Support clang/OS X shared libraries in the Makefile.

This commit is contained in:
Bob Nystrom
2015-01-28 19:50:53 -08:00
parent 2f97ef57d3
commit 3bed04e0b9
2 changed files with 27 additions and 21 deletions

View File

@ -19,6 +19,16 @@ else
CPPFLAGS += -fPIC
endif
# Clang on Mac OS X has different flags and a different extension to build a
# shared library.
ifneq (,$(findstring darwin,$(TARGET_OS)))
SHARED_LIB_FLAGS =
SHARED_EXT = dylib
else
SHARED_LIB_FLAGS = -Wl,-soname,$@.so
SHARED_EXT = so
endif
# Files.
SOURCES := $(wildcard src/*.c)
HEADERS := $(wildcard src/*.h)
@ -38,21 +48,18 @@ RELEASE_CPP_LIB_OBJECTS := $(subst build/release-cpp/main.o,,$(RELEASE_CPP_OBJEC
all: release
clean:
@rm -rf build wren wrend libwren.a libwrend.a libwren.so libwrend.so
@rm -rf build wren wrend libwren libwrend
prep:
@mkdir -p build/debug build/release build/release-cpp
# Debug build.
debug: prep wrend libwrend.a libwrend.so
debug: prep wrend libwrend
# Debug static library.
libwrend.a: $(DEBUG_LIB_OBJECTS)
$(AR) $@ $^
# Debug shared library.
libwrend.so: $(DEBUG_LIB_OBJECTS)
$(CC) $(DEBUG_CFLAGS) -shared -Wl,-soname,$@ -o $@ $^
# Debug static and shared libraries.
libwrend: $(DEBUG_LIB_OBJECTS)
$(AR) $@.a $^
$(CC) $(DEBUG_CFLAGS) -shared $(SHARED_LIB_FLAGS) -o $@.$(SHARED_EXT) $^
# Debug command-line interpreter.
wrend: $(DEBUG_OBJECTS)
@ -63,15 +70,12 @@ build/debug/%.o: src/%.c include/wren.h $(HEADERS)
$(CC) -c $(CFLAGS) $(DEBUG_CFLAGS) -Iinclude -o $@ $<
# Release build.
release: prep wren libwren.a libwren.so
release: prep wren libwren
# Release static library.
libwren.a: $(RELEASE_LIB_OBJECTS)
$(AR) $@ $^
# Release shared library.
libwren.so: $(RELEASE_LIB_OBJECTS)
$(CC) $(RELEASE_CFLAGS) -shared -Wl,-soname,$@ -o $@ $^
# Release static and shared libraries.
libwren: $(RELEASE_LIB_OBJECTS)
$(AR) $@.a $^
$(CC) $(RELEASE_CFLAGS) -shared $(SHARED_LIB_FLAGS) -o $@.$(SHARED_EXT) $^
# Release command-line interpreter.
wren: $(RELEASE_OBJECTS)
@ -82,11 +86,11 @@ build/release/%.o: src/%.c include/wren.h $(HEADERS)
$(CC) -c $(CFLAGS) $(RELEASE_CFLAGS) -Iinclude -o $@ $<
# Release C++ build.
release-cpp: prep wren-cpp libwren-cpp.a
release-cpp: prep wren-cpp libwren-cpp
# Release C++ static lib
libwren-cpp.a: $(RELEASE_CPP_LIB_OBJECTS)
$(AR) $@ $^
# Release C++ static library.
libwren-cpp: $(RELEASE_CPP_LIB_OBJECTS)
$(AR) $@.a $^
# Release C++ command-line interpreter.
wren-cpp: $(RELEASE_CPP_OBJECTS)