# --------------------------------------------------------------------------- # Options # --------------------------------------------------------------------------- DEBUG ?= 0 ASAN ?= 0 STATIC ?= 0 FPGO ?= 0 STRIP ?= 0 MARCH ?= native MTUNE ?= native # --------------------------------------------------------------------------- # Directories # --------------------------------------------------------------------------- SUBDIR_APP := frontend SUBDIR_LIB := libslunkcrypt # --------------------------------------------------------------------------- # Flags # --------------------------------------------------------------------------- CFLAGS = -I$(SUBDIR_LIB)/include -Wall -Wno-trigraphs -march=$(MARCH) -mtune=$(MTUNE) LDFLGS = ifeq ($(DEBUG),1) CONFIG := _g CFLAGS += -Og -g else ifeq ($(ASAN),1) CONFIG := _a CFLAGS += -O1 -g -fsanitize=address -fno-omit-frame-pointer else CONFIG := CFLAGS += -O3 -DNDEBUG endif ifneq ($(FPGO),0) CFLAGS += -fprofile-$(FPGO) endif MACHINE := $(shell $(CC) -dumpmachine) ifneq ($(filter %mingw32 %-windows-gnu %-cygwin %-cygnus,$(MACHINE)),) SUFFIX := .exe else SUFFIX := endif ifeq ($(filter %mingw32 %-windows-gnu,$(MACHINE)),) LDFLGS += -lpthread endif ifneq ($(STRIP),0) LDFLGS += -s endif ifeq ($(STATIC),1) LDFLGS += -static endif ifneq ($(filter %-w64-mingw32 %w64-windows-gnu,$(MACHINE)),) LDFLGS += -mconsole -municode endif # --------------------------------------------------------------------------- # File names # --------------------------------------------------------------------------- OUTNAME_APP := slunkcrypt$(CONFIG)$(SUFFIX) OUTNAME_LIB := libslunkcrypt$(CONFIG)-1.a OUTPATH_APP := $(SUBDIR_APP)/bin/$(OUTNAME_APP) OUTPATH_LIB := $(SUBDIR_LIB)/lib/$(OUTNAME_LIB) SOURCES_APP := $(wildcard $(SUBDIR_APP)/src/*.c) OBJECTS_APP := $(patsubst $(SUBDIR_APP)/src/%.c,$(SUBDIR_APP)/obj/%$(CONFIG).o,$(SOURCES_APP)) SOURCES_LIB := $(wildcard $(SUBDIR_LIB)/src/*.c) OBJECTS_LIB := $(patsubst $(SUBDIR_LIB)/src/%.c,$(SUBDIR_LIB)/obj/%$(CONFIG).o,$(SOURCES_LIB)) ifneq ($(filter %-mingw32 %-windows-gnu %-cygwin %-cygnus,$(MACHINE)),) RCFILES_APP := $(wildcard $(SUBDIR_APP)/res/*.rc) OBJECTS_APP += $(patsubst $(SUBDIR_APP)/res/%.rc,$(SUBDIR_APP)/obj/%.rsrc.o,$(RCFILES_APP)) endif # --------------------------------------------------------------------------- # Targets # --------------------------------------------------------------------------- .PHONY: all clean all: $(OUTPATH_APP) $(OUTPATH_APP): $(OBJECTS_APP) $(OUTPATH_LIB) @mkdir -p $(@D) $(CC) $(CFLAGS) $^ -o $@ $(LDFLGS) $(OUTPATH_LIB): $(OBJECTS_LIB) @mkdir -p $(@D) $(AR) rcs $@ $^ $(SUBDIR_APP)/obj/%$(CONFIG).o: $(SUBDIR_APP)/src/%.c @mkdir -p $(@D) $(CC) $(CFLAGS) -c $< -o $@ $(SUBDIR_APP)/obj/%.rsrc.o: $(SUBDIR_APP)/res/%.rc @mkdir -p $(@D) windres -o $@ $< $(SUBDIR_LIB)/obj/%$(CONFIG).o: $(SUBDIR_LIB)/src/%.c @mkdir -p $(@D) $(CC) $(CFLAGS) -c $< -o $@ clean: $(RM) $(SUBDIR_APP)/obj/*.o $(SUBDIR_APP)/obj/*.gcda $(SUBDIR_APP)/lib/*.a $(SUBDIR_APP)/bin/*$(SUFFIX) $(RM) $(SUBDIR_LIB)/obj/*.o $(SUBDIR_LIB)/obj/*.gcda $(SUBDIR_LIB)/lib/*.a $(SUBDIR_LIB)/bin/*$(SUFFIX)