diff --git a/Makefile b/Makefile deleted file mode 100644 index 4a0d6e2..0000000 --- a/Makefile +++ /dev/null @@ -1,74 +0,0 @@ -SRC_DIR = src -INC_DIR = include -OBJ_DIR = obj -BIN_DIR = bin - -CC = cc -CFLAGS_DEBUG = -g -O0 -Wall -Wpedantic -I$(INC_DIR) -std=c89 -fPIC -CFLAGS_RELEASE = -O2 -Wall -Wpedantic -I$(INC_DIR) -std=c89 -fPIC -LDFLAGS = -ldl - -LIB_NAME = libstk.so - -OBJS_DEBUG = \ - $(OBJ_DIR)/debug/module.o \ - $(OBJ_DIR)/debug/platform.o \ - $(OBJ_DIR)/debug/stk.o \ - $(OBJ_DIR)/debug/stk_log.o - -OBJS_RELEASE = \ - $(OBJ_DIR)/release/module.o \ - $(OBJ_DIR)/release/platform.o \ - $(OBJ_DIR)/release/stk.o \ - $(OBJ_DIR)/release/stk_log.o - -.PHONY: all debug release clean - -all: debug - -debug: $(BIN_DIR)/debug/$(LIB_NAME) - -release: $(BIN_DIR)/release/$(LIB_NAME) - -$(BIN_DIR)/debug/$(LIB_NAME): $(OBJS_DEBUG) - @mkdir -p $(BIN_DIR)/debug - $(CC) -shared -o $@ $(OBJS_DEBUG) $(LDFLAGS) - -$(BIN_DIR)/release/$(LIB_NAME): $(OBJS_RELEASE) - @mkdir -p $(BIN_DIR)/release - $(CC) -shared -o $@ $(OBJS_RELEASE) $(LDFLAGS) - -$(OBJ_DIR)/debug/module.o: $(SRC_DIR)/module.c - @mkdir -p $(OBJ_DIR)/debug - $(CC) $(CFLAGS_DEBUG) -c $(SRC_DIR)/module.c -o $@ - -$(OBJ_DIR)/debug/platform.o: $(SRC_DIR)/platform.c - @mkdir -p $(OBJ_DIR)/debug - $(CC) $(CFLAGS_DEBUG) -c $(SRC_DIR)/platform.c -o $@ - -$(OBJ_DIR)/debug/stk.o: $(SRC_DIR)/stk.c - @mkdir -p $(OBJ_DIR)/debug - $(CC) $(CFLAGS_DEBUG) -c $(SRC_DIR)/stk.c -o $@ - -$(OBJ_DIR)/debug/stk_log.o: $(SRC_DIR)/stk_log.c - @mkdir -p $(OBJ_DIR)/debug - $(CC) $(CFLAGS_DEBUG) -c $(SRC_DIR)/stk_log.c -o $@ - -$(OBJ_DIR)/release/module.o: $(SRC_DIR)/module.c - @mkdir -p $(OBJ_DIR)/release - $(CC) $(CFLAGS_RELEASE) -c $(SRC_DIR)/module.c -o $@ - -$(OBJ_DIR)/release/platform.o: $(SRC_DIR)/platform.c - @mkdir -p $(OBJ_DIR)/release - $(CC) $(CFLAGS_RELEASE) -c $(SRC_DIR)/platform.c -o $@ - -$(OBJ_DIR)/release/stk.o: $(SRC_DIR)/stk.c - @mkdir -p $(OBJ_DIR)/release - $(CC) $(CFLAGS_RELEASE) -c $(SRC_DIR)/stk.c -o $@ - -$(OBJ_DIR)/release/stk_log.o: $(SRC_DIR)/stk_log.c - @mkdir -p $(OBJ_DIR)/release - $(CC) $(CFLAGS_RELEASE) -c $(SRC_DIR)/stk_log.c -o $@ - -clean: - @rm -rf $(OBJ_DIR) $(BIN_DIR) diff --git a/bmake.mk b/bmake.mk new file mode 100644 index 0000000..6d252de --- /dev/null +++ b/bmake.mk @@ -0,0 +1,40 @@ +.include "config.mk" + +FULL_LIB = lib${LIB_NAME}.so +LDFLAGS_PLAT = -ldl +CFLAGS_PLAT = -fPIC +CFLAGS_BASE = -Wall -Wpedantic -I${INC_DIR} -std=c89 ${CFLAGS_PLAT} + +.PHONY: all debug release clean + +all: debug + +OBJS_DEBUG = ${SRCS:S/^src\//obj\/debug\//:S/.c$/.o/} +OBJS_RELEASE = ${SRCS:S/^src\//obj\/release\//:S/.c$/.o/} + +debug: ${BIN_DIR}/debug/${FULL_LIB} +release: ${BIN_DIR}/release/${FULL_LIB} + +${BIN_DIR}/debug/${FULL_LIB}: ${OBJS_DEBUG} + @mkdir -p ${.TARGET:H} + ${CC} -shared -o ${.TARGET} ${.ALLSRC} ${LDFLAGS_PLAT} + +${BIN_DIR}/release/${FULL_LIB}: ${OBJS_RELEASE} + @mkdir -p ${.TARGET:H} + ${CC} -shared -o ${.TARGET} ${.ALLSRC} ${LDFLAGS_PLAT} + +.for _src in ${SRCS} +obj/debug/${_src:T:R}.o: ${_src} + @mkdir -p ${.TARGET:H} + ${CC} ${CFLAGS_BASE} -g -O0 -MMD -MP -c ${_src} -o ${.TARGET} + +obj/release/${_src:T:R}.o: ${_src} + @mkdir -p ${.TARGET:H} + ${CC} ${CFLAGS_BASE} -O2 -MMD -MP -c ${_src} -o ${.TARGET} +.endfor + +.dinclude "obj/debug/*.d" +.dinclude "obj/release/*.d" + +clean: + rm -rf ${OBJ_DIR} ${BIN_DIR} diff --git a/build.bat b/build.bat new file mode 100755 index 0000000..00d0faf --- /dev/null +++ b/build.bat @@ -0,0 +1,2 @@ +@echo off +make -f gmake.mk %* diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..3df3691 --- /dev/null +++ b/build.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +OS=$(uname -s | tr '[:upper:]' '[:lower:]') + +if [ "$OS" = "linux" ]; then + MK_FILE="gmake.mk" +else + MK_FILE="bmake.mk" +fi + +make -f "$MK_FILE" "$@" diff --git a/config.mk b/config.mk new file mode 100644 index 0000000..20d3239 --- /dev/null +++ b/config.mk @@ -0,0 +1,11 @@ +SRC_DIR = src +INC_DIR = include +OBJ_DIR = obj +BIN_DIR = bin + +LIB_NAME = stk + +SRCS = src/module.c \ + src/platform.c \ + src/stk.c \ + src/stk_log.c diff --git a/gmake.mk b/gmake.mk new file mode 100644 index 0000000..9c57536 --- /dev/null +++ b/gmake.mk @@ -0,0 +1,43 @@ +include config.mk + +ifeq ($(OS),Windows_NT) + FULL_LIB := $(LIB_NAME).dll + LDFLAGS_PLAT := -ldl +else + FULL_LIB := lib$(LIB_NAME).so + LDFLAGS_PLAT := -ldl + CFLAGS_PLAT := -fPIC +endif + +CFLAGS_BASE := -Wall -Wpedantic -I$(INC_DIR) -std=c89 $(CFLAGS_PLAT) + +.PHONY: all debug release clean + +all: debug + +debug: $(BIN_DIR)/debug/$(FULL_LIB) +release: $(BIN_DIR)/release/$(FULL_LIB) + +# Debug Rules +$(BIN_DIR)/debug/$(FULL_LIB): $(SRCS:src/%.c=obj/debug/%.o) + @mkdir -p $(@D) + $(CC) -shared -o $@ $^ $(LDFLAGS_PLAT) + +obj/debug/%.o: src/%.c + @mkdir -p $(@D) + $(CC) $(CFLAGS_BASE) -g -O0 -MMD -MP -c $< -o $@ + +# Release Rules +$(BIN_DIR)/release/$(FULL_LIB): $(SRCS:src/%.c=obj/release/%.o) + @mkdir -p $(@D) + $(CC) -shared -o $@ $^ $(LDFLAGS_PLAT) + +obj/release/%.o: src/%.c + @mkdir -p $(@D) + $(CC) $(CFLAGS_BASE) -O2 -MMD -MP -c $< -o $@ + +-include $(wildcard obj/debug/*.d) +-include $(wildcard obj/release/*.d) + +clean: + rm -rf $(OBJ_DIR) $(BIN_DIR)