diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e540367 --- /dev/null +++ b/Makefile @@ -0,0 +1,73 @@ + +ifndef RM_INCLUDE_DIR + RM_INCLUDE_DIR=include/ +endif +ifndef RM_SOURCE_DIR + RM_SOURCE_DIR=rmutil/ +endif +ifndef MODULE_SOURCE_DIR + MODULE_SOURCE_DIR=source/ +endif + +CFLAGS ?= -g -fPIC -O3 -std=gnu99 -Wall -Wno-unused-function +CFLAGS += -I$(RM_INCLUDE_DIR) +CC=gcc + +BUILD_OBJ_DIR=build/objects/ +BUILD_DIR=build/ + +_SRCS_RM=util.c strings.c sds.c vector.c alloc.c periodic.c +SRCS=$(addprefix $(RM_SOURCE_DIR),$(_SRCS_RM)) + +_OBJS=util.o strings.o sds.o vector.o alloc.o periodic.o +OBJS=$(addprefix $(BUILD_OBJ_DIR),$(_OBJS)) +# $(warning $(OBJS)) + +# find the OS +uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not') + +# Compile flags for linux / osx +ifeq ($(uname_S),Linux) + SHOBJ_CFLAGS ?= -fno-common -g -ggdb + SHOBJ_LDFLAGS ?= -shared -Bsymbolic +else + SHOBJ_CFLAGS ?= -dynamic -fno-common -g -ggdb + SHOBJ_LDFLAGS ?= -bundle -undefined dynamic_lookup +endif + +$(shell mkdir -p build/objects) + +all: rmutil $(BUILD_DIR)module.so + +rmutil: $(BUILD_DIR)librmutil.a + +clean: + rm -rf $(BUILD_DIR) + +$(BUILD_DIR)librmutil.a: $(OBJS) + ar rcs $@ $^ + +$(BUILD_OBJ_DIR)util.o: $(RM_SOURCE_DIR)util.c + $(CC) $(CFLAGS) -c -o $@ $^ + +$(BUILD_OBJ_DIR)strings.o: $(RM_SOURCE_DIR)strings.c + $(CC) $(CFLAGS) -c -o $@ $^ + +$(BUILD_OBJ_DIR)sds.o: $(RM_SOURCE_DIR)sds.c + $(CC) $(CFLAGS) -c -o $@ $^ + +$(BUILD_OBJ_DIR)vector.o: $(RM_SOURCE_DIR)vector.c + $(CC) $(CFLAGS) -c -o $@ $^ + +$(BUILD_OBJ_DIR)alloc.o: $(RM_SOURCE_DIR)alloc.c + $(CC) $(CFLAGS) -c -o $@ $^ + +$(BUILD_OBJ_DIR)periodic.o: $(RM_SOURCE_DIR)periodic.c + $(CC) $(CFLAGS) -c -o $@ $^ + +$(BUILD_DIR)module.so: $(BUILD_DIR)librmutil.a $(BUILD_OBJ_DIR)module.o + $(LD) -o $@ $(BUILD_OBJ_DIR)module.o $(SHOBJ_LDFLAGS) $(LIBS) -L$(BUILD_DIR) -lrmutil -lc + +$(BUILD_OBJ_DIR)module.o: $(MODULE_SOURCE_DIR)module.c + $(CC) $(CFLAGS) -c -o $@ $^ +