From 3bed04e0b95f1a26c6dac530afb0c6822d13534b Mon Sep 17 00:00:00 2001 From: Bob Nystrom Date: Wed, 28 Jan 2015 19:50:53 -0800 Subject: [PATCH] Support clang/OS X shared libraries in the Makefile. --- .gitignore | 2 ++ Makefile | 46 +++++++++++++++++++++++++--------------------- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index 8830ad32..0471c9b2 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,8 @@ libwren.a libwrend.a libwren.so libwrend.so +libwren.dylib +libwrend.dylib libwren-cpp.a # XCode user-specific stuff. diff --git a/Makefile b/Makefile index 153ef4cc..95cf6a65 100644 --- a/Makefile +++ b/Makefile @@ -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)