Moved from written by hand Makefiles to Premake

This commit is contained in:
Robert Bendun 2022-10-08 15:05:05 +02:00
parent 32f2183136
commit 0ee52951c1
10 changed files with 93 additions and 111 deletions

3
.gitignore vendored
View File

@ -11,3 +11,6 @@ drafts.cc
release_* release_*
*.zip *.zip
*.html *.html
.clang-tidy
*.make
Makefile

View File

@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed ### Changed
* Integrated libmidi library into Musique codebase * Integrated libmidi library into Musique codebase
* Moved from Makefile to Premake build system for unified multiplatform builds
* Moved from custom ALSA interaction to using rtmidi for MIDI I/O operations * Moved from custom ALSA interaction to using rtmidi for MIDI I/O operations
### Removed ### Removed

View File

@ -1,39 +0,0 @@
include config.mk
Sources := $(shell find musique/ -name '*.cc')
Obj := $(subst musique/,,$(Sources:%.cc=%.o))
all: bin/musique
include scripts/debug.mk
include scripts/release.mk
include scripts/test.mk
bin/bestline.o: lib/bestline/bestline.c lib/bestline/bestline.h
@echo "CC $@"
@$(CC) $< -c -O3 -o $@
# http://www.music.mcgill.ca/~gary/rtmidi/#compiling
bin/rtmidi.o: lib/rtmidi/RtMidi.cpp lib/rtmidi/RtMidi.h
@echo "CXX $@"
@$(CXX) $< -c -O2 -o $@ -D__LINUX_ALSA__
doc: Doxyfile musique/*.cc musique/*.hh
doxygen
doc-open: doc
xdg-open ./doc/build/html/index.html
clean:
rm -rf bin coverage
release: bin/musique
scripts/release
install: bin/musique
scripts/install
.PHONY: clean doc doc-open all test unit-tests release install
$(shell mkdir -p $(subst musique/,bin/,$(shell find musique/* -type d)))
$(shell mkdir -p $(subst musique/,bin/debug/,$(shell find musique/* -type d)))

View File

@ -21,52 +21,22 @@ $ sudo apt install -y build-essential libasound2-dev
## Budowanie interpretera ## Budowanie interpretera
```console Wygeneruj konfigurację dla twojej platformy przy pomocy [`premake`](https://premake.github.io/)
$ make bin/musique
```
Żeby zainstalować interpreter języka Musique w systemie, należy dodatkowo wykonać polecenie: - Linux: `premake5 gmake`
- Windows: `premake5 <twoja-wersja-visual-studio>`, np `premake5 vs2022`
``` Żeby zainstalować interpreter języka Musique w systemie, należy dodatkowo wykonać polecenie `scripts/install`
# make install
```
*Uwaga*: powyższe polecenie instalacyjne musi zostać wykonane jako uprzywilejowany użytkownik (np. wykorzystując polecenie `sudo`). *Uwaga*: powyższe polecenie instalacyjne musi zostać wykonane jako uprzywilejowany użytkownik (np. wykorzystując polecenie `sudo`).
## Dostępne komendy
- `make` - Buduje interpreter `bin/musique` (tryb release)
- `make debug` - Buduje interpreter `bin/debug/musique` (tryb debug)
- `make clean` - Usuwa reprodukowalne elementy projektu (automatycznie stworzone pliki binarne czy raporty)
### Dokumentacja ### Dokumentacja
- `make doc` - Tworzy `doc/build/html/` zawierający dokumentację projektu Dokumentację kodu źródłowego możesz wygenerować korzystając z polecenia `doxygen`. Dokumentacja języka (jak i kodu źródłowego po wygnerowaniu) dostępna jest w katalogu `doc/`.
### Testowanie ### Testowanie
- `make test` - Uruchom wszystkie dostępne testy automatyczne - `scripts/test.py` - Nagrywa testy zachowań przykładów
- `scripts/test.py test examples` - Uruchamia testy zachowań przykładów
- `scripts/test.py record examples` - Nagrywa testy zachowań przykładów
### Debugowanie
- `scripts/log-function-calls.sh` - Tworzy listę wywołań funkcji używając GDB
## Budowa projektu
```
.
├── bin Miejsce produkcji plików wykonywalnych
├── doc Dokumentacja języka, interpretera
│   └── build Miejsce produkcji dokumentacji
├── editor Pluginy do edytorów dodające wsparcie dla języka
├── lib Zewnętrzne zależności projektu
│   ├── expected
│   └── ut
└── include Główny katalog z plikami nagłówkowymi
├── scripts Skrypty wspierające budowanie i tworzenie
└── src Główny katalog z plikami źródłowymi
```
## Kolorowanie składni ## Kolorowanie składni

View File

@ -1,12 +0,0 @@
MAKEFLAGS="-j $(grep -c ^processor /proc/cpuinfo)"
CXXFLAGS:=$(CXXFLAGS) -std=c++20 -Wall -Wextra -Werror=switch -Werror=return-type -Werror=unused-result -Wno-maybe-uninitialized
CPPFLAGS:=$(CPPFLAGS) -Ilib/expected/ -I. -Ilib/bestline/ -Ilib/rtmidi/
RELEASE_FLAGS=-O2
DEBUG_FLAGS=-O0 -ggdb -fsanitize=undefined -DDebug
CXX=g++
LDFLAGS=-flto
LDLIBS=-lasound -lpthread -static-libgcc -static-libstdc++

82
premake5.lua Normal file
View File

@ -0,0 +1,82 @@
workspace "Musique"
configurations { "Debug", "Release" }
flags { "MultiProcessorCompile" }
makesettings { 'MAKEFLAGS="-j $(grep -c ^processor /proc/cpuinfo)"' }
project "Musique"
kind "ConsoleApp"
language "C++"
cppdialect "C++20"
staticruntime "on"
includedirs { ".", "lib/bestline/", "lib/rtmidi/", "lib/expected/" }
files { "musique/**.hh", "musique/**.cc" }
links { "bestline", "rtmidi" }
filter "configurations:Debug"
defines { "Debug" }
symbols "On"
targetdir "bin/debug"
objdir "bin/debug"
filter {}
filter { "system:linux", "configurations:Debug" }
buildoptions { "-Og", "-ggdb", "-fsanitize=undefined" }
filter {}
filter "configurations:Release"
targetdir "bin/"
objdir "bin/"
optimize "On"
filter {}
filter "system:windows"
targetname "musique.exe"
filter {}
filter "system:linux"
links { "asound", "pthread" }
targetname "musique"
filter {}
project "Bestline"
kind "StaticLib"
language "C"
includedirs { "lib/bestline" }
files { "lib/bestline/bestline.c" }
targetdir "bin/"
optimize "On"
filter "configurations:Debug"
targetdir "bin/debug"
objdir "bin/debug"
filter {}
filter "configurations:Release"
targetdir "bin/"
objdir "bin/"
filter {}
project "RtMidi"
kind "StaticLib"
language "C++"
includedirs { "lib/rtmidi" }
files { "lib/rtmidi/RtMidi.cpp" }
targetdir "bin/"
optimize "On"
filter "system:linux"
defines { "__LINUX_ALSA__" }
filter {}
filter "configurations:Debug"
targetdir "bin/debug"
objdir "bin/debug"
filter {}
filter "configurations:Release"
targetdir "bin/"
objdir "bin/"
filter {}

View File

@ -1,11 +0,0 @@
Debug_Obj=$(addprefix bin/debug/,$(Obj))
debug: bin/debug/musique
bin/debug/musique: $(Debug_Obj) bin/debug/main.o bin/bestline.o
@echo "CXX $@"
@$(CXX) $(CXXFLAGS) $(DEBUG_FLAGS) $(CPPFLAGS) -o $@ $(Debug_Obj) bin/bestline.o $(LDFLAGS) $(LDLIBS)
bin/debug/%.o: musique/%.cc
@echo "CXX $@"
@$(CXX) $(CXXFLAGS) $(DEBUG_FLAGS) $(CPPFLAGS) -o $@ $< -c

View File

@ -17,7 +17,7 @@ fi
mkdir -p "$Target" mkdir -p "$Target"
if ! [ -f bin/musique ]; then if ! [ -f bin/musique ]; then
make bin/musique make config=release
fi fi
echo "Copy bin/musique, examples, license and documentation" echo "Copy bin/musique, examples, license and documentation"

View File

@ -1,9 +0,0 @@
Release_Obj=$(addprefix bin/,$(Obj))
bin/%.o: musique/%.cc
@echo "CXX $@"
@$(CXX) $(CXXFLAGS) $(RELEASE_FLAGS) $(CPPFLAGS) -o $@ $< -c
bin/musique: $(Release_Obj) bin/main.o bin/bestline.o bin/rtmidi.o
@echo "CXX $@"
@$(CXX) $(CXXFLAGS) $(RELEASE_FLAGS) $(CPPFLAGS) -o $@ $(Release_Obj) bin/bestline.o bin/rtmidi.o $(LDFLAGS) $(LDLIBS)

View File

@ -1,3 +0,0 @@
test: bin/debug/musique
python3 scripts/test.py