forked from OSchip/llvm-project
80 lines
1.8 KiB
Makefile
80 lines
1.8 KiB
Makefile
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/*
|