summaryrefslogtreecommitdiff
path: root/Makefile.logic
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile.logic')
-rw-r--r--Makefile.logic86
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
+