diff options
Diffstat (limited to 'Makefile.logic')
-rw-r--r-- | Makefile.logic | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/Makefile.logic b/Makefile.logic new file mode 100644 index 0000000..00064a7 --- /dev/null +++ b/Makefile.logic @@ -0,0 +1,86 @@ +# Project setup +BUILD_PROFILE?= +BUILD_DIR = target/$(BUILD_PROFILE) +OBJ_DIR = artifacts +SRC_DIR ?= ./src +INC_DIR = ./include +INC_SUB_NAME = opensmarts +INC_SUB_DIR = $(INC_DIR)/$(INC_SUB_NAME) +PROJECT_NAME = libopensmarts +PROJECT_TYPE = lib +SHARED=1 + +# Objects +NAMES = $(basename $(notdir $(wildcard $(SRC_DIR)/*.c))) +HEADS = $(addprefix $(INC_SUB_DIR)/, $(notdir $(wildcard $(INC_SUB_DIR)/*.h))) +SRCS = $(addsuffix .c, $(NAMES)) +OBJS = $(addsuffix .o, $(NAMES)) + + +# C compiler +CC ?= gcc + +# Setup C flags +CC_FLAGS_all ?= -std=c23 -Wextra -Wall -I$(INC_DIR) + +CC_FLAGS ?= -O2 -DNDEBUG +CC_FLAGS += $(CC_FLAGS_all) +CC_FLAGS_debug ?= -ggdb +CC_FLAGS_debug += $(CC_FLAGS_all) + +ifeq ($(BUILD_PROFILE),debug) + CC_FLAGS=$(CC_FLAGS_debug) +endif + +# Detect target +BUILD_FLAGS=$(CC_FLAGS) +BUILD_TOOL=$(CC) +BUILD_FILE_TYPE= +ifeq ($(OS),Windows_NT) + ifeq ($(PROJECT_TYPE),lib) + BUILD_FLAGS+=-shared + BUILD_FILE_TYPE=.dll + else + BUILD_FILE_TYPE=.exe + endif +else + ifeq ($(PROJECT_TYPE),lib) + ifeq ($(SHARED),1) + BUILD_FLAGS+=-shared + BUILD_FILE_TYPE=.so + CC_FLAGS += -fpic + else + BUILD_TOOL=ar + BUILD_FLAGS=-crs + BUILD_FILE_TYPE=.a + endif + endif +endif + +# Actual makefile targets + +build: $(BUILD_DIR) $(addprefix $(BUILD_DIR)/$(OBJ_DIR)/, $(OBJS)) + echo $(NAMES) + $(BUILD_TOOL) $(BUILD_FLAGS) -o $(BUILD_DIR)/$(PROJECT_NAME)$(BUILD_FILE_TYPE) $(addprefix $(BUILD_DIR)/$(OBJ_DIR)/, $(OBJS)) + +clean: + rm -rf $(BUILD_DIR) + +install: build + install -m 755 $(BUILD_DIR)/$(PROJECT_NAME)$(BUILD_FILE_TYPE) /usr/lib/$(BUILD_PREFIX)$(PROJECT_NAME)$(BUILD_FILE_TYPE) + cp -rf $(INC_SUB_DIR) /usr/include + +remove: + rm -rf /usr/include/$(INC_SUB_NAME) + rm -rf /usr/lib/$(PROJECT_NAME)$(BUILD_FILE_TYPE) + +$(BUILD_DIR)/$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(HEADS) + $(CC) $(CC_FLAGS) -c -o $@ $< + +$(BUILD_DIR): + mkdir -p $(BUILD_DIR) + mkdir -p $(BUILD_DIR)/$(OBJ_DIR) + +format: + echo $(addprefix $(SRC_DIR)/, $(SRCS)) $(HEADS) | xargs clang-format --style=file -i + |