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 $@ $^