summaryrefslogtreecommitdiff
path: root/GNUmakefile
diff options
context:
space:
mode:
Diffstat (limited to 'GNUmakefile')
-rw-r--r--GNUmakefile59
1 files changed, 59 insertions, 0 deletions
diff --git a/GNUmakefile b/GNUmakefile
new file mode 100644
index 0000000..b8aab00
--- /dev/null
+++ b/GNUmakefile
@@ -0,0 +1,59 @@
+# Source
+OBJS_DIR := ./build
+SOURCE_DIR := ./src
+LIB_DIR := ./lib
+INCLUDE_DIR := ./include
+TEST_SRC_DIR := ./test
+out ?=
+INSTALL_DIR = $(out)
+
+# Flags
+CXX := g++
+CXXFLAGS := -std=c++23 # -fsanitize=address -g
+LINKFLAGS := #-static-libasan
+TEST_CXXFLAGS := -std=c++23 -I$(INCLUDE_DIR) -fsanitize=address -g
+TEST_LINKFLAGS := -L$(LIB_DIR) -ltehjson -static-libasan
+
+# Outputs
+LIB := $(LIB_DIR)/libtehjson.so
+TEST := json_test
+
+# Files
+SOURCE_FILES := $(wildcard $(SOURCE_DIR)/*.cpp)
+SOURCE_HEADERS := $(wildcard $(SOURCE_DIR)/*.h $(SOURCE_DIR)/*.hpp)
+OBJS := $(subst $(SOURCE_DIR),$(OBJS_DIR), $(patsubst %.cpp,%.o,$(SOURCE_FILES)))
+INCLUDE_HEADERS := $(subst $(SOURCE_DIR),$(INCLUDE_DIR), $(SOURCE_HEADERS))
+TEST_SOURCE := $(wildcard $(TEST_SRC_DIR)/*.cpp)
+TEST_HEADERS := $(wildcard $(TEST_SRC_DIR)/*.h)
+TEST_OBJS = $(subst $(TEST_SRC_DIR),$(OBJS_DIR), $(patsubst %.cpp,%.o,$(TEST_SOURCE)))
+
+# Main lib
+$(LIB): $(INCLUDE_HEADERS) $(OBJS)
+ $(CXX) $(OBJS) $(CXXFLAGS) $(LINKFLAGS) -shared -o $(LIB)
+
+$(OBJS_DIR)/%.o: $(SOURCE_DIR)/%.cpp $(SOURCE_DIR)/%.h
+ $(CXX) $(CXXFLAGS) -c $< -o $@
+
+$(INCLUDE_DIR)/%.h: $(SOURCE_DIR)/%.h lib
+ cp $< $@
+$(INCLUDE_DIR)/%.hpp: $(SOURCE_DIR)/%.hpp lib
+ cp $< $@
+
+# Test binary
+$(TEST): $(TEST_OBJS) $(LIB)
+ $(CXX) $(TEST_OBJS) $(TEST_CXXFLAGS) $(TEST_LINKFLAGS) -o $(TEST)
+
+$(OBJS_DIR)/%.o: $(TEST_SRC_DIR)/%.cpp $(TEST_SOURCE) $(TEST_HEADERS)
+ $(CXX) $(TEST_CXXFLAGS) -c $< -o $@
+
+
+# Phony
+.PHONY: clean
+clean:
+ rm -f $(LIB)
+ rm -f $(OBJS_DIR)/*.o
+ rm -f $(TEST)
+
+test: $(TEST)
+
+$(OBJS_DIR)/json.o: $(SOURCE_DIR)/json.hpp