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_*
|
||||
*.zip
|
||||
*.html
|
||||
.clang-tidy
|
||||
*.make
|
||||
Makefile
|
||||
|
@ -15,7 +15,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
### Changed
|
||||
|
||||
* 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
|
||||
|
||||
### 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
|
||||
|
||||
Wygeneruj konfigurację dla twojej platformy przy pomocy [`premake`](https://premake.github.io/)
|
||||
```console
|
||||
$ make bin/musique
|
||||
```
|
||||
|
||||
- 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:
|
||||
|
||||
Ż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`).
|
||||
|
||||
## 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
|
||||
|
||||
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
|
||||
|
||||
- `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
|
||||
|
||||
|
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"
|
||||
|
||||
if ! [ -f bin/musique ]; then
|
||||
make config=release
|
||||
make bin/musique
|
||||
fi
|
||||
|
||||
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