SlunkCrypt/Makefile

154 lines
4.0 KiB
Makefile
Raw Normal View History

2020-10-14 19:59:12 +02:00
# ---------------------------------------------------------------------------
# Options
# ---------------------------------------------------------------------------
2020-10-13 23:36:58 +02:00
2020-10-21 21:58:46 +02:00
DEBUG ?= 0
2021-04-07 01:40:05 +02:00
NALYZE ?= 0
ASAN ?= 0
2020-10-21 21:58:46 +02:00
STATIC ?= 0
FLTO ?= 0
FPGO ?= 0
2020-10-31 16:33:53 +01:00
STRIP ?= 0
2021-04-19 22:21:07 +02:00
CPU ?= 0
THREAD ?= 1
2020-10-14 19:59:12 +02:00
$(info Options: DEBUG=$(DEBUG), NALYZE=$(NALYZE), ASAN=$(ASAN), STATIC=$(STATIC), FLTO=$(FLTO), FPGO=$(FPGO), STRIP=$(STRIP), CPU=$(CPU), THREAD=$(THREAD))
2020-10-14 19:59:12 +02:00
# ---------------------------------------------------------------------------
# Directories
2020-10-14 19:59:12 +02:00
# ---------------------------------------------------------------------------
SUBDIR_APP := frontend
SUBDIR_LIB := libslunkcrypt
# ---------------------------------------------------------------------------
# Flags
# ---------------------------------------------------------------------------
2021-04-07 01:40:05 +02:00
CONFIG =
LDFLGS =
CFLAGS = -I$(SUBDIR_LIB)/include -std=gnu99 -Wall -pedantic
2021-04-19 22:21:07 +02:00
ifneq (,$(firstword $(filter 32 64,$(CPU))))
2021-04-19 22:21:07 +02:00
CFLAGS += -m$(firstword $(CPU))
endif
ifneq (,$(firstword $(TARGET)))
CFLAGS += --target=$(firstword $(TARGET))
LDFLGS += --target=$(firstword $(TARGET))
endif
ifneq (,$(firstword $(MARCH)))
2021-04-19 22:21:07 +02:00
CFLAGS += -march=$(firstword $(MARCH))
endif
ifneq (,$(firstword $(MTUNE)))
2021-04-19 22:21:07 +02:00
CFLAGS += -mtune=$(firstword $(MTUNE))
endif
2020-10-14 19:59:12 +02:00
2021-04-07 01:40:05 +02:00
ifneq ($(ASAN),0)
CONFIG := _a
CFLAGS += -O1 -g -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls
else ifneq ($(DEBUG),0)
CONFIG := _g
CFLAGS += -Og -g
2020-10-14 19:59:12 +02:00
else
2020-10-14 21:55:39 +02:00
CFLAGS += -O3 -DNDEBUG
ifneq ($(FLTO),0)
2021-05-08 19:23:57 +02:00
CFLAGS += -flto
2020-10-14 19:59:12 +02:00
endif
ifneq ($(FPGO),0)
2021-04-19 22:21:07 +02:00
CFLAGS += -fprofile-$(firstword $(FPGO))
endif
endif
2021-04-07 01:40:05 +02:00
ifneq ($(NALYZE),0)
CFLAGS += -fanalyzer
endif
MACHINE := $(strip $(shell $(CC) -dumpmachine))
ifeq (,$(MACHINE))
$(error Failed to determine target machine, please check CC is working!)
else
$(info Target machine type: $(MACHINE))
endif
2020-10-14 19:59:12 +02:00
ifneq (,$(firstword $(filter %mingw32 %-windows-gnu %-cygwin %-cygnus,$(MACHINE))))
2020-10-14 19:59:12 +02:00
SUFFIX := .exe
2020-10-13 23:36:58 +02:00
else
SUFFIX :=
2020-10-13 23:36:58 +02:00
endif
ifneq (,$(firstword $(filter %-w64-mingw32 %w64-windows-gnu,$(MACHINE))))
LDFLGS += -mconsole -municode
2020-10-31 16:33:53 +01:00
endif
2020-10-21 21:58:46 +02:00
ifeq ($(STATIC),1)
LDFLGS += -static
endif
ifneq ($(STRIP),0)
LDFLGS += -s
endif
ifeq ($(THREAD),1)
LDFLGS += -lpthread
else
CFLAGS += -DSLUNKBUILD_NOTHREADS
2020-10-14 19:59:12 +02:00
endif
ifneq (,$(firstword $(filter %-unknown-haiku,$(MACHINE))))
LDFLGS += -lbsd
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)
2020-10-14 19:59:12 +02:00
SOURCES_APP := $(wildcard $(SUBDIR_APP)/src/*.c)
OBJECTS_APP := $(patsubst $(SUBDIR_APP)/src/%.c,$(SUBDIR_APP)/obj/%$(CONFIG).o,$(SOURCES_APP))
2020-10-14 19:59:12 +02:00
SOURCES_LIB := $(wildcard $(SUBDIR_LIB)/src/*.c)
OBJECTS_LIB := $(patsubst $(SUBDIR_LIB)/src/%.c,$(SUBDIR_LIB)/obj/%$(CONFIG).o,$(SOURCES_LIB))
2020-10-14 19:59:12 +02:00
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
2020-10-14 19:59:12 +02:00
# ---------------------------------------------------------------------------
# Targets
# ---------------------------------------------------------------------------
2020-10-13 23:36:58 +02:00
.PHONY: all clean
all: $(OUTPATH_APP)
2020-10-14 19:59:12 +02:00
$(OUTPATH_APP): $(OBJECTS_APP) $(OUTPATH_LIB)
2020-10-14 19:59:12 +02:00
@mkdir -p $(@D)
$(CC) $(CFLAGS) $^ -o $@ $(LDFLGS)
$(OUTPATH_LIB): $(OBJECTS_LIB)
2020-10-14 19:59:12 +02:00
@mkdir -p $(@D)
$(AR) rcs $@ $^
2020-10-13 23:36:58 +02:00
$(SUBDIR_APP)/obj/%$(CONFIG).o: $(SUBDIR_APP)/src/%.c
2020-10-14 19:59:12 +02:00
@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 $@
2020-10-13 23:36:58 +02:00
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)