blob: 062df022a60d29d067152c7d9acc8375e5ad4a6d [file] [log] [blame]
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/*