CC ?= cc CXX ?= c++ PKG_CONFIG ?= pkg-config 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/xtlite.c src/graph/graph.c src/dsp/gain.c src/engine/offline_engine.c CORE_OBJECTS := $(CORE_SOURCES:%.c=$(BUILD_DIR)/%.o) TEST_OBJECT := $(BUILD_DIR)/tests/unit/test_core.o GUI_AVAILABLE := $(shell $(PKG_CONFIG) --exists fltk 2>/dev/null && echo yes) .PHONY: all clean test gui install all: $(BUILD_DIR)/libxtlite.a $(BUILD_DIR)/libxtlite.a: $(CORE_OBJECTS) @mkdir -p $(@D) $(AR) rcs $@ $^ $(BUILD_DIR)/%.o: %.c @mkdir -p $(@D) $(CC) $(CFLAGS) -c $< -o $@ $(BUILD_DIR)/%.o: %.cpp @mkdir -p $(@D) $(CXX) $(CXXFLAGS) $(shell $(PKG_CONFIG) --cflags fltk 2>/dev/null) -c $< -o $@ $(TEST_OBJECT): tests/unit/test_core.c @mkdir -p $(@D) $(CC) $(CFLAGS) -c $< -o $@ $(BUILD_DIR)/test_core: $(TEST_OBJECT) $(BUILD_DIR)/libxtlite.a $(CC) $(LDFLAGS) -o $@ $(TEST_OBJECT) $(BUILD_DIR)/libxtlite.a -lm test: $(BUILD_DIR)/test_core ./$(BUILD_DIR)/test_core ifeq ($(GUI_AVAILABLE),yes) gui: $(BUILD_DIR)/xtlite $(BUILD_DIR)/xtlite: $(BUILD_DIR)/src/gui/main.o $(BUILD_DIR)/src/gui/main_window.o $(BUILD_DIR)/libxtlite.a $(CXX) $(LDFLAGS) -o $@ $^ $(shell $(PKG_CONFIG) --libs fltk) -lm else gui: @echo "FLTK was not found by pkg-config. Install FLTK development files to build the GUI." @exit 1 endif install: all install -d "$(DESTDIR)$(PREFIX)/include/xtlite" "$(DESTDIR)$(PREFIX)/lib" install -m 0644 include/xtlite/*.h "$(DESTDIR)$(PREFIX)/include/xtlite/" install -m 0644 "$(BUILD_DIR)/libxtlite.a" "$(DESTDIR)$(PREFIX)/lib/" clean: rm -rf "$(BUILD_DIR)"