| CC ?= clang | |
| ifeq "$(ARCH)" "" | |
| ARCH = x86_64 | |
| endif | |
| ifeq "$(OS)" "" | |
| OS = $(shell uname -s) | |
| endif | |
| CFLAGS ?= -g -O0 | |
| CWD := $(shell pwd) | |
| LIB_PREFIX := libloadunload_ | |
| ifeq "$(OS)" "Darwin" | |
| CFLAGS += -arch $(ARCH) | |
| DS := dsymutil | |
| LD_FLAGS := -dynamiclib | |
| LIB_A := $(LIB_PREFIX)a.dylib | |
| LIB_B := $(LIB_PREFIX)b.dylib | |
| LIB_C := $(LIB_PREFIX)c.dylib | |
| LIB_D := $(LIB_PREFIX)d.dylib | |
| EXEC_PATH := "@executable_path" | |
| EXEC_PATH_A := -install_name $(EXEC_PATH)/$(LIB_A) | |
| EXEC_PATH_B := -install_name $(EXEC_PATH)/$(LIB_B) | |
| EXEC_PATH_C := -install_name $(EXEC_PATH)/$(LIB_C) | |
| EXEC_PATH_D := -install_name $(CWD)/$(LIB_D) | |
| else | |
| CFLAGS += -fPIC | |
| LD_FLAGS := -shared | |
| LIB_DL := -ldl | |
| LIB_A := $(LIB_PREFIX)a.so | |
| LIB_B := $(LIB_PREFIX)b.so | |
| LIB_C := $(LIB_PREFIX)c.so | |
| LIB_D := $(LIB_PREFIX)d.so | |
| endif | |
| all: a.out $(LIB_A) $(LIB_B) $(LIB_C) $(LIB_D) hidden/$(LIB_D) | |
| a.out: main.o $(LIB_D) | |
| $(CC) $(CFLAGS) -o a.out main.o -L. -lloadunload_d $(LIB_DL) | |
| main.o: main.c | |
| $(CC) $(CFLAGS) -c main.c | |
| hidden/$(LIB_D): b.o | |
| $(CC) $(CFLAGS) $(LD_FLAGS) -o hidden/$(LIB_D) d.o | |
| if [ "$(OS)" = "Darwin" ]; then dsymutil -o hidden/$(LIB_D).dSYM hidden/$(LIB_D); fi | |
| $(LIB_A): a.o $(LIB_B) | |
| $(CC) $(CFLAGS) $(LD_FLAGS) $(EXEC_PATH_A) -o $(LIB_A) a.o -L. -lloadunload_b | |
| if [ "$(OS)" = "Darwin" ]; then dsymutil $(LIB_A); fi | |
| a.o: a.c | |
| $(CC) $(CFLAGS) -c a.c | |
| $(LIB_B): b.o | |
| $(CC) $(CFLAGS) $(LD_FLAGS) $(EXEC_PATH_B) -o $(LIB_B) b.o | |
| if [ "$(OS)" = "Darwin" ]; then dsymutil $(LIB_B); fi | |
| b.o: b.c | |
| $(CC) $(CFLAGS) -c b.c | |
| $(LIB_C): c.o | |
| $(CC) $(CFLAGS) $(LD_FLAGS) $(EXEC_PATH_C) -o $(LIB_C) c.o | |
| if [ "$(OS)" = "Darwin" ]; then dsymutil $(LIB_C); fi | |
| c.o: c.c | |
| $(CC) $(CFLAGS) -c c.c | |
| $(LIB_D): d.o | |
| $(CC) $(CFLAGS) $(LD_FLAGS) $(EXEC_PATH_D) -o $(LIB_D) d.o | |
| if [ "$(OS)" = "Darwin" ]; then dsymutil $(LIB_D); fi | |
| d.o: d.c | |
| $(CC) $(CFLAGS) -c d.c | |
| clean: | |
| rm -rf *.o *~ *.dylib *.so a.out *.dSYM hidden/* |