BUILD_DIR := build SRC_DIR := src INCLUDE_DIR := include PRIVATE_INCLUDE_DIR := privinclude LIBIRCC_DIR := libircc LIBIRCC_LIB := $(LIBIRCC_DIR)/libircc.so CC := clang CFLAGS := -I$(INCLUDE_DIR) -I$(PRIVATE_INCLUDE_DIR) -I$(LIBIRCC_DIR)/include -Wall -Wextra CFLAGS_DBG := $(CFLAGS) -g -O0 CFLAGS_REL := $(CFLAGS) -O2 LDFLAGS := -L./libircc -Wl,-rpath,'$$ORIGIN/libircc' -lircc -lssl -lcrypto LDFLAGS_REL := $(LDFLAGS) -s APPLICATION := bbirc APPLICATION_DBG := bbirc-debug $(shell mkdir -p $(BUILD_DIR)) SRCS := $(wildcard $(SRC_DIR)/*.c) LIBIRCC_SRCS := $(shell find $(LIBIRCC_DIR)/$(SRC_DIR) -name '*.c') DBG_OBJS := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/dbg_%.o,$(SRCS)) REL_OBJS := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/rel_%.o,$(SRCS)) .PHONY: all debug release both clean ircc all: release debug: ircc $(APPLICATION_DBG) release: ircc $(APPLICATION) both: debug release ircc: $(LIBIRCC_LIB) $(APPLICATION): $(REL_OBJS) $(CC) -o $@ $^ $(LDFLAGS_REL) $(APPLICATION_DBG): $(DBG_OBJS) +$(MAKE) -C $(LIBIRCC_DIR) $(CC) -o $@ $^ $(LDFLAGS) $(BUILD_DIR)/dbg_%.o: $(SRC_DIR)/%.c $(CC) -c -o $@ $< $(CFLAGS_DBG) $(BUILD_DIR)/rel_%.o: $(SRC_DIR)/%.c $(CC) -c -o $@ $< $(CFLAGS_REL) $(LIBIRCC_LIB): $(LIBIRCC_SRCS) +$(MAKE) -C libircc clean: rm -rf $(BUILD_DIR) rm -rf $(APPLICATION) rm -rf $(APPLICATION_DBG) +$(MAKE) -C $(LIBIRCC_DIR) clean