xtc/Makefile

83 lines
2.6 KiB
Makefile
Raw Normal View History

2026-10-26 22:51:25 +01:00
CC ?= cc
CXX ?= c++
PKG_CONFIG ?= pkg-config
2026-10-26 23:03:17 +01:00
FLTK_CONFIG ?= fltk-config
2026-10-26 22:51:25 +01:00
BUILD_DIR ?= build
PREFIX ?= /usr/local
CFLAGS ?= -O2 -g
CFLAGS += -std=c99 -Wall -Wextra -Wpedantic -Wconversion -Wshadow -Iinclude
CXXFLAGS ?= -O2 -g
CXXFLAGS += -std=c++17 -Wall -Wextra -Wpedantic -Iinclude
LDFLAGS ?=
CORE_SOURCES := src/core/xtc.c src/graph/graph.c src/dsp/gain.c src/engine/offline_engine.c
2026-10-26 22:51:25 +01:00
CORE_OBJECTS := $(CORE_SOURCES:%.c=$(BUILD_DIR)/%.o)
TEST_OBJECT := $(BUILD_DIR)/tests/unit/test_core.o
2026-10-26 23:03:17 +01:00
ifeq ($(shell $(PKG_CONFIG) --exists fltk 2>/dev/null && echo yes),yes)
FLTK_CXXFLAGS := $(shell $(PKG_CONFIG) --cflags fltk)
FLTK_LIBS := $(shell $(PKG_CONFIG) --libs fltk)
GUI_AVAILABLE := yes
else ifeq ($(shell $(FLTK_CONFIG) --version >/dev/null 2>&1 && echo yes),yes)
FLTK_CXXFLAGS := $(shell $(FLTK_CONFIG) --cxxflags)
FLTK_LIBS := $(shell $(FLTK_CONFIG) --ldflags)
GUI_AVAILABLE := yes
endif
2026-10-26 22:51:25 +01:00
2026-10-26 23:03:17 +01:00
.PHONY: all clean test debug gui install
all: $(BUILD_DIR)/libxtc.a $(BUILD_DIR)/xtc-check
2026-10-26 23:03:17 +01:00
$(BUILD_DIR)/xtc-check: $(BUILD_DIR)/src/main.o $(BUILD_DIR)/libxtc.a
2026-10-26 23:03:17 +01:00
$(CC) $(LDFLAGS) -o $@ $^ -lm
2026-10-26 22:51:25 +01:00
$(BUILD_DIR)/libxtc.a: $(CORE_OBJECTS)
2026-10-26 22:51:25 +01:00
@mkdir -p $(@D)
$(AR) rcs $@ $^
$(BUILD_DIR)/%.o: %.c
@mkdir -p $(@D)
2026-10-26 23:03:17 +01:00
$(CC) $(CFLAGS) -MMD -MP -c $< -o $@
2026-10-26 22:51:25 +01:00
$(BUILD_DIR)/%.o: %.cpp
@mkdir -p $(@D)
2026-10-26 23:03:17 +01:00
$(CXX) $(CXXFLAGS) $(FLTK_CXXFLAGS) -MMD -MP -c $< -o $@
2026-10-26 22:51:25 +01:00
$(TEST_OBJECT): tests/unit/test_core.c
@mkdir -p $(@D)
2026-10-26 23:03:17 +01:00
$(CC) $(CFLAGS) -MMD -MP -c $< -o $@
2026-10-26 22:51:25 +01:00
$(BUILD_DIR)/test_core: $(TEST_OBJECT) $(BUILD_DIR)/libxtc.a
$(CC) $(LDFLAGS) -o $@ $(TEST_OBJECT) $(BUILD_DIR)/libxtc.a -lm
2026-10-26 22:51:25 +01:00
2026-10-26 23:20:00 +01:00
$(BUILD_DIR)/test_offline: $(BUILD_DIR)/tests/unit/test_offline.o $(BUILD_DIR)/libxtc.a
$(CC) $(LDFLAGS) -o $@ $^ -lm
test: $(BUILD_DIR)/test_core $(BUILD_DIR)/test_offline $(BUILD_DIR)/xtc-check
2026-10-26 22:51:25 +01:00
./$(BUILD_DIR)/test_core
2026-10-26 23:20:00 +01:00
./$(BUILD_DIR)/test_offline
./$(BUILD_DIR)/xtc-check
2026-10-26 23:03:17 +01:00
debug:
$(MAKE) BUILD_DIR="$(BUILD_DIR)/debug" CFLAGS="$(CFLAGS) -O0 -g3" CXXFLAGS="$(CXXFLAGS) -O0 -g3" all test
2026-10-26 22:51:25 +01:00
ifeq ($(GUI_AVAILABLE),yes)
gui: $(BUILD_DIR)/xtc
2026-10-26 22:51:25 +01:00
$(BUILD_DIR)/xtc: $(BUILD_DIR)/src/gui/main.o $(BUILD_DIR)/src/gui/main_window.o $(BUILD_DIR)/libxtc.a
2026-10-26 23:03:17 +01:00
$(CXX) $(LDFLAGS) -o $@ $^ $(FLTK_LIBS) -lm
2026-10-26 22:51:25 +01:00
else
gui:
2026-10-26 23:03:17 +01:00
@echo "FLTK was not found by pkg-config or fltk-config. GUI requires FLTK development files."
2026-10-26 22:51:25 +01:00
@exit 1
endif
install: all
install -d "$(DESTDIR)$(PREFIX)/include/xtc" "$(DESTDIR)$(PREFIX)/lib"
install -m 0644 include/xtc/*.h "$(DESTDIR)$(PREFIX)/include/xtc/"
install -m 0644 "$(BUILD_DIR)/libxtc.a" "$(DESTDIR)$(PREFIX)/lib/"
2026-10-26 22:51:25 +01:00
clean:
rm -rf "$(BUILD_DIR)"
2026-10-26 23:03:17 +01:00
2026-10-26 23:20:00 +01:00
-include $(CORE_OBJECTS:.o=.d) $(TEST_OBJECT:.o=.d) $(BUILD_DIR)/src/main.d $(BUILD_DIR)/tests/unit/test_offline.d \
2026-10-26 23:03:17 +01:00
$(BUILD_DIR)/src/gui/main.d $(BUILD_DIR)/src/gui/main_window.d