Bringed back old build system
This commit is contained in:
parent
0ee52951c1
commit
5866278340
3
.gitignore
vendored
3
.gitignore
vendored
@ -11,6 +11,3 @@ drafts.cc
|
|||||||
release_*
|
release_*
|
||||||
*.zip
|
*.zip
|
||||||
*.html
|
*.html
|
||||||
.clang-tidy
|
|
||||||
*.make
|
|
||||||
Makefile
|
|
||||||
|
@ -15,7 +15,6 @@ 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
Normal file
39
Makefile
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
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,22 +21,52 @@ $ sudo apt install -y build-essential libasound2-dev
|
|||||||
|
|
||||||
## Budowanie interpretera
|
## Budowanie interpretera
|
||||||
|
|
||||||
Wygeneruj konfigurację dla twojej platformy przy pomocy [`premake`](https://premake.github.io/)
|
```console
|
||||||
|
$ make bin/musique
|
||||||
|
```
|
||||||
|
|
||||||
- Linux: `premake5 gmake`
|
Żeby zainstalować interpreter języka Musique w systemie, należy dodatkowo wykonać polecenie:
|
||||||
- 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
|
||||||
|
|
||||||
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/`.
|
- `make doc` - Tworzy `doc/build/html/` zawierający dokumentację projektu
|
||||||
|
|
||||||
### Testowanie
|
### Testowanie
|
||||||
|
|
||||||
- `scripts/test.py` - Nagrywa testy zachowań przykładów
|
- `make test` - Uruchom wszystkie dostępne testy automatyczne
|
||||||
|
- `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
Normal file
12
config.mk
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
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
82
premake5.lua
@ -1,82 +0,0 @@
|
|||||||
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 {}
|
|
11
scripts/debug.mk
Normal file
11
scripts/debug.mk
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
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 config=release
|
make bin/musique
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Copy bin/musique, examples, license and documentation"
|
echo "Copy bin/musique, examples, license and documentation"
|
||||||
|
9
scripts/release.mk
Normal file
9
scripts/release.mk
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
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)
|
3
scripts/test.mk
Normal file
3
scripts/test.mk
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
test: bin/debug/musique
|
||||||
|
python3 scripts/test.py
|
||||||
|
|
Loading…
Reference in New Issue
Block a user