1
0
forked from Mirror/wren

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

2
.gitignore vendored
View File

@ -10,6 +10,8 @@ libwren.a
libwrend.a libwrend.a
libwren.so libwren.so
libwrend.so libwrend.so
libwren.dylib
libwrend.dylib
libwren-cpp.a libwren-cpp.a
# XCode user-specific stuff. # XCode user-specific stuff.

View File

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