aboutsummaryrefslogtreecommitdiffstats
path: root/daemon/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/Makefile')
-rw-r--r--daemon/Makefile46
1 files changed, 46 insertions, 0 deletions
diff --git a/daemon/Makefile b/daemon/Makefile
new file mode 100644
index 0000000..e38108f
--- /dev/null
+++ b/daemon/Makefile
@@ -0,0 +1,46 @@
+TARGET_EXEC := midi-router-daemon
+
+BUILD_DIR := ./build
+SRC_DIRS := ./src
+
+# Find all the C++ files we want to compile
+# Note the single quotes around the * expressions. The shell will incorrectly expand these otherwise, but we want to send the * directly to the find command.
+SRCS := $(shell find $(SRC_DIRS) -name '*.cpp')
+
+# Prepends BUILD_DIR and appends .o to every src file
+# As an example, ./your_dir/hello.cpp turns into ./build/./your_dir/hello.cpp.o
+OBJS := $(SRCS:%=$(BUILD_DIR)/%.o)
+
+# String substitution (suffix version without %).
+# As an example, ./build/hello.cpp.o turns into ./build/hello.cpp.d
+DEPS := $(OBJS:.o=.d)
+
+# Every folder in ./src will need to be passed to GCC so that it can find header files
+INC_DIRS := $(shell find $(SRC_DIRS) -type d) ./include
+# Add a prefix to INC_DIRS. So moduleA would become -ImoduleA. GCC understands this -I flag
+INC_FLAGS := $(addprefix -I,$(INC_DIRS))
+
+# The -MMD and -MP flags together generate Makefiles for us!
+# These files will have .d instead of .o as the output.
+CPPFLAGS := -O3 -std=c++23 $(INC_FLAGS) -MMD -MP
+
+LDFLAGS := -lrtmidi
+
+# The final build step.
+$(BUILD_DIR)/$(TARGET_EXEC): $(OBJS)
+ $(CXX) $(OBJS) -o $@ $(LDFLAGS)
+
+# Build step for C++ source
+$(BUILD_DIR)/%.cpp.o: %.cpp
+ mkdir -p $(dir $@)
+ $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@
+
+
+.PHONY: clean
+clean:
+ rm -r $(BUILD_DIR)
+
+# Include the .d makefiles. The - at the front suppresses the errors of missing
+# Makefiles. Initially, all the .d files will be missing, and we don't want those
+# errors to show up.
+-include $(DEPS)