musique/Makefile

115 lines
3.0 KiB
Makefile
Raw Permalink Normal View History

2022-04-24 15:27:09 +02:00
MAKEFLAGS="-j $(grep -c ^processor /proc/cpuinfo)"
2022-07-30 13:45:23 +02:00
CXXFLAGS:=$(CXXFLAGS) -std=c++20 -Wall -Wextra -Werror=switch -Werror=return-type -Werror=unused-result -Wno-maybe-uninitialized
CPPFLAGS:=$(CPPFLAGS) \
-Ilib/bestline/ \
-Ilib/expected/ \
-Ilib/midi/include \
-Ilib/scheduler \
-Ilib/ut/ \
-Isrc/
2022-05-21 23:11:04 +02:00
RELEASE_FLAGS=-O3
DEBUG_FLAGS=-O0 -ggdb -fsanitize=undefined -DDebug
2022-05-25 03:14:29 +02:00
CXX=g++
2022-04-24 15:27:09 +02:00
LDFLAGS=-L./lib/midi/ -L./lib/scheduler/
LDLIBS=-lscheduler -lmidi-alsa -lasound -lpthread
Bestline_Dependency = bin/bestline.o
Scheduler_Dependency = lib/scheduler/libscheduler.a
Midi_Dependency = lib/midi/libmidi-alsa.a
External_Dependencies = $(Scheduler_Dependency) $(Midi_Dependency) $(Bestline_Dependency)
2022-05-23 17:27:06 +02:00
2022-05-21 23:11:04 +02:00
Obj= \
context.o \
2022-05-21 23:11:04 +02:00
environment.o \
errors.o \
interpreter.o \
lexer.o \
lines.o \
2022-05-21 23:11:04 +02:00
location.o \
number.o \
parser.o \
pretty.o \
2022-05-21 23:11:04 +02:00
unicode.o \
unicode_tables.o \
value.o
Tests= \
context.o \
environment.o \
interpreter.o \
lex.o \
main.o \
number.o \
parser.o \
unicode.o \
value.o
2022-05-21 23:11:04 +02:00
Release_Obj=$(addprefix bin/,$(Obj))
Debug_Obj=$(addprefix bin/debug/,$(Obj))
Test_Obj=$(addprefix bin/debug/tests/,$(Tests))
2022-04-24 16:09:55 +02:00
all: bin/musique
2022-04-24 15:27:09 +02:00
2022-05-22 06:33:17 +02:00
test: unit-tests
etc/tools/test.py test examples
2022-05-21 23:11:04 +02:00
debug: bin/debug/musique
2022-04-24 15:27:09 +02:00
bin/%.o: src/%.cc src/*.hh
2022-05-25 03:14:29 +02:00
@echo "CXX $@"
@$(CXX) $(CXXFLAGS) $(RELEASE_FLAGS) $(CPPFLAGS) -o $@ $< -c
2022-05-21 23:11:04 +02:00
lib/%.a:
(cd $(shell dirname $@); make)
bin/musique: $(Release_Obj) bin/main.o src/*.hh $(External_Dependencies)
2022-05-25 03:14:29 +02:00
@echo "CXX $@"
2022-06-11 19:57:56 +02:00
@$(CXX) $(CXXFLAGS) $(RELEASE_FLAGS) $(CPPFLAGS) -o $@ $(Release_Obj) bin/bestline.o bin/main.o $(LDFLAGS) $(LDLIBS)
2022-05-21 23:11:04 +02:00
bin/debug/musique: $(Debug_Obj) bin/debug/main.o src/*.hh $(External_Dependencies)
2022-05-25 03:14:29 +02:00
@echo "CXX $@"
2022-06-11 19:57:56 +02:00
@$(CXX) $(CXXFLAGS) $(DEBUG_FLAGS) $(CPPFLAGS) -o $@ $(Debug_Obj) bin/bestline.o bin/debug/main.o $(LDFLAGS) $(LDLIBS)
2022-04-24 15:27:09 +02:00
2022-05-21 23:11:04 +02:00
bin/debug/%.o: src/%.cc src/*.hh
2022-05-25 03:14:29 +02:00
@echo "CXX $@"
@$(CXX) $(CXXFLAGS) $(DEBUG_FLAGS) $(CPPFLAGS) -o $@ $< -c
2022-04-24 16:09:55 +02:00
2022-06-11 19:57:56 +02:00
bin/bestline.o: lib/bestline/bestline.c lib/bestline/bestline.h
@echo "CC $@"
@$(CC) $< -c -O3 -o $@
2022-04-24 16:09:55 +02:00
unit-tests: bin/unit-tests
./$<
2022-05-02 22:09:11 +02:00
unit-test-coverage:
@which gcov >/dev/null || ( echo "[ERROR] gcov is required for test coverage report"; false )
@which gcovr >/dev/null || ( echo "[ERROR] gcovr is required for test coverage report"; false )
2022-05-02 22:09:11 +02:00
CXXFLAGS=--coverage $(MAKE) bin/unit-tests -B
bin/unit-tests
rm -rf coverage
mkdir coverage
2022-06-05 23:54:42 +02:00
gcovr -e '.*\.hpp' -e 'src/tests/.*' -e 'src/pretty.cc' --html --html-details -o coverage/index.html
2022-05-22 04:31:31 +02:00
rm -rf bin/debug
xdg-open coverage/index.html
doc: Doxyfile src/*.cc src/*.hh
doxygen
2022-05-02 22:09:11 +02:00
2022-05-10 15:25:17 +02:00
doc-open: doc
xdg-open ./doc/build/html/index.html
bin/unit-tests: $(Test_Obj) $(Debug_Obj)
2022-05-25 03:14:29 +02:00
@echo "CXX $@"
@$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(DEBUG_FLAGS) -o $@ $^
2022-04-24 15:27:09 +02:00
clean: clean-dependencies
2022-05-02 22:12:29 +02:00
rm -rf bin coverage
2022-04-24 15:27:09 +02:00
clean-dependencies:
rm -f $(External_Dependencies)
.PHONY: clean clean-dependencies doc doc-open all test unit-tests
2022-04-24 15:27:09 +02:00
$(shell mkdir -p bin/debug/tests)