From 58662783406a557fd032a274c613ec5a0488d77a Mon Sep 17 00:00:00 2001 From: Robert Bendun Date: Sat, 8 Oct 2022 20:34:29 +0200 Subject: [PATCH] Bringed back old build system --- .gitignore | 3 -- CHANGELOG.md | 1 - Makefile | 39 ++++++++++++++++++++++ README.md | 42 ++++++++++++++++++++---- config.mk | 12 +++++++ premake5.lua | 82 ---------------------------------------------- scripts/debug.mk | 11 +++++++ scripts/release | 2 +- scripts/release.mk | 9 +++++ scripts/test.mk | 3 ++ 10 files changed, 111 insertions(+), 93 deletions(-) create mode 100644 Makefile create mode 100644 config.mk delete mode 100644 premake5.lua create mode 100644 scripts/debug.mk create mode 100644 scripts/release.mk create mode 100644 scripts/test.mk diff --git a/.gitignore b/.gitignore index 4377be5..759bc5e 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,3 @@ drafts.cc release_* *.zip *.html -.clang-tidy -*.make -Makefile diff --git a/CHANGELOG.md b/CHANGELOG.md index 17b96b2..3410822 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9ae20dd --- /dev/null +++ b/Makefile @@ -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))) diff --git a/README.md b/README.md index 1d983a1..d1dfd68 100644 --- a/README.md +++ b/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 `, 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 diff --git a/config.mk b/config.mk new file mode 100644 index 0000000..c41bf54 --- /dev/null +++ b/config.mk @@ -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++ diff --git a/premake5.lua b/premake5.lua deleted file mode 100644 index b1d08ac..0000000 --- a/premake5.lua +++ /dev/null @@ -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 {} diff --git a/scripts/debug.mk b/scripts/debug.mk new file mode 100644 index 0000000..b59424c --- /dev/null +++ b/scripts/debug.mk @@ -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 diff --git a/scripts/release b/scripts/release index ae61c23..8e69ea5 100755 --- a/scripts/release +++ b/scripts/release @@ -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" diff --git a/scripts/release.mk b/scripts/release.mk new file mode 100644 index 0000000..d7c77b6 --- /dev/null +++ b/scripts/release.mk @@ -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) diff --git a/scripts/test.mk b/scripts/test.mk new file mode 100644 index 0000000..23df39a --- /dev/null +++ b/scripts/test.mk @@ -0,0 +1,3 @@ +test: bin/debug/musique + python3 scripts/test.py +