CC = clang CXX = clang++ CFLAGS = -O2 -Wall -I./libs -pthread CXXFLAGS = -std=c++17 -O2 -Wall -I./libs -pthread UNAME_S := $(shell uname -s) BREW_PREFIX := $(shell brew --prefix portaudio 2>/dev/null) CACHE_DIR = cache OUT_DIR = out TARGET = $(OUT_DIR)/cerberus SRCS_CPP = main.cpp commands.cpp cli.cpp webserver.cpp sound.cpp bfsk.cpp x25519_handshake.cpp SRCS_C = libs/monocypher.c libs/linenoise.c OBJS_CPP = $(patsubst %.cpp, $(CACHE_DIR)/%.o, $(SRCS_CPP)) OBJS_C = $(patsubst libs/%.c, $(CACHE_DIR)/%.o, $(SRCS_C)) OBJS = $(OBJS_CPP) $(OBJS_C) ifneq ($(UNAME_S),) ifeq ($(UNAME_S),Darwin) ifneq ($(BREW_PREFIX),) CFLAGS += -I$(BREW_PREFIX)/include CXXFLAGS += -I$(BREW_PREFIX)/include LIBS += -L$(BREW_PREFIX)/lib -lportaudio else $(warning PortAudio not found via brew) endif else ifeq ($(UNAME_S),Linux) HAVE_PKG := $(shell pkg-config --exists portaudio-2.0 && echo yes || echo no) ifeq ($(HAVE_PKG),yes) PORTAUDIO_CFLAGS := $(shell pkg-config --cflags portaudio-2.0) PORTAUDIO_LIBS := $(shell pkg-config --libs portaudio-2.0) CFLAGS += $(PORTAUDIO_CFLAGS) CXXFLAGS += $(PORTAUDIO_CFLAGS) LIBS += $(PORTAUDIO_LIBS) else $(warning portaudio-2.0 not found, using -lportaudio) LIBS += -lportaudio endif endif endif .PHONY: all clean all: $(TARGET) $(TARGET): $(OBJS) | $(OUT_DIR) $(CXX) $(CXXFLAGS) -o $@ $^ $(LIBS) $(CACHE_DIR)/%.o: %.cpp | $(CACHE_DIR) $(CXX) $(CXXFLAGS) -c $< -o $@ $(CACHE_DIR)/%.o: libs/%.c | $(CACHE_DIR) $(CC) $(CFLAGS) -c $< -o $@ $(CACHE_DIR): mkdir -p $(CACHE_DIR) $(OUT_DIR): mkdir -p $(OUT_DIR) clean: rm -f $(TARGET) $(CACHE_DIR)/*.o