Moved from written by hand Makefiles to Premake
This commit is contained in:
parent
32f2183136
commit
0ee52951c1
3
.gitignore
vendored
3
.gitignore
vendored
@ -11,3 +11,6 @@ drafts.cc
|
|||||||
release_*
|
release_*
|
||||||
*.zip
|
*.zip
|
||||||
*.html
|
*.html
|
||||||
|
.clang-tidy
|
||||||
|
*.make
|
||||||
|
Makefile
|
||||||
|
@ -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
|
||||||
|
39
Makefile
39
Makefile
@ -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)))
|
|
42
README.md
42
README.md
@ -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
|
||||||
|
|
||||||
|
12
config.mk
12
config.mk
@ -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
82
premake5.lua
Normal 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 {}
|
@ -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
|
|
@ -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"
|
||||||
|
@ -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)
|
|
@ -1,3 +0,0 @@
|
|||||||
test: bin/debug/musique
|
|
||||||
python3 scripts/test.py
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user