blob: a7ba9e67ec4122748ae5e09ef3a3b4b928820847 [file] [log] [blame]
# -*- makefile -*-
ifeq ($(OS),)
BUILD_OS := $(shell uname -s | tr '[:upper:]' '[:lower:]')
OS := $(BUILD_OS)
endif
ifeq ($(CPU),)
CPU := $(shell uname -m | sed -e 's/i[345678]86/i386/')
endif
PLATFORM = $(CPU)-$(OS)
ifeq ($(OS), sunos)
OS = solaris
endif
SRC_DIR = libtest
BUILD_DIR ?= build
TEST_BUILD_DIR = $(BUILD_DIR)/libtest
# Set defaults to unix (linux/solaris/bsd)
PREFIX = lib
LIBEXT ?= so
LIBNAME = $(PREFIX)test.$(LIBEXT)
export MACOSX_DEPLOYMENT_TARGET=10.4
CCACHE := $(strip $(realpath $(shell which ccache 2> /dev/null)))
TEST_SRCS = $(wildcard $(SRC_DIR)/*.c)
TEST_OBJS := $(patsubst $(SRC_DIR)/%.c, $(TEST_BUILD_DIR)/%.o, $(TEST_SRCS))
#
# Compiler/linker flags from:
# http://weblogs.java.net/blog/kellyohair/archive/2006/01/compilation_of_1.html
JFLAGS = -fno-omit-frame-pointer -fno-strict-aliasing
OFLAGS = -O2 $(JFLAGS)
WFLAGS = -W -Wall -Wno-unused -Wno-parentheses
PICFLAGS = -fPIC
SOFLAGS = -shared
LDFLAGS += $(SOFLAGS)
IFLAGS = -I"$(BUILD_DIR)"
CFLAGS = $(OFLAGS) $(WFLAGS) $(IFLAGS) $(PICFLAGS) -D_REENTRANT
ifneq ($(strip $(findstring $(OS), win32, mingw, cygwin)),)
# For cygwin => win32-native builds, strip out cygwin deps
ifneq ($(findstring cygwin, $(BUILD_OS)),)
CC += -mno-cygwin -mwin32
LDFLAGS += -mno-cygwin -Wl,--add-stdcall-alias
endif
PICFLAGS=
LIBEXT=dll
CC = gcc
endif
ifeq ($(OS), darwin)
ifneq ($(findstring $(CPU),ppc),)
ARCHFLAGS += -arch ppc
endif
ifneq ($(findstring $(CPU),i386 x86_64),)
ARCHFLAGS += -arch i386 -arch x86_64
endif
CFLAGS += $(ARCHFLAGS) -DTARGET_RT_MAC_CFM=0
CFLAGS += -fno-common
LDFLAGS = $(ARCHFLAGS) -dynamiclib
# link against the universal libraries on ppc machines
LDFLAGS += -L$(MACSDK)/usr/lib
LIBEXT = dylib
FFI_CFLAGS += -isysroot $(MACSDK)
PICFLAGS =
SOFLAGS =
endif
ifeq ($(OS), linux)
SOFLAGS += -Wl,-soname,$(LIBNAME)
endif
ifeq ($(OS), solaris)
CC = /usr/sfw/bin/gcc -std=c99
LD = /usr/ccs/bin/ld
SOFLAGS = -shared -static-libgcc
endif
ifeq ($(OS), aix)
LIBEXT = a
SOFLAGS = -shared -static-libgcc
PICFLAGS += -pthread
endif
ifneq ($(findstring bsd, $(OS)),)
SOFLAGS = -shared -static-libgcc
CFLAGS += -pthread
LDFLAGS += -pthread
endif
ifeq ($(CPU), i386)
MODEL = 32
endif
ifeq ($(CPU), sparcv9)
MODEL = 64
endif
ifeq ($(CPU), amd64)
MODEL = 64
endif
ifeq ($(CPU), x86_64)
MODEL = 64
endif
ifeq ($(CPU), ppc64)
MODEL = 64
endif
ifeq ($(CPU), powerpc64)
MODEL = 64
endif
MODELFLAG =
ifneq ($(MODEL),)
MODELFLAG = -m$(MODEL)
endif
# On platforms (linux, solaris) that support both 32bit and 64bit, force building for one or the other
ifneq ($(or $(findstring linux, $(OS)), $(findstring solaris, $(OS))),)
# Change the CC/LD instead of CFLAGS/LDFLAGS, incase other things in the flags
# makes the libffi build choke
CC += $(MODELFLAG)
LD += $(MODELFLAG)
endif
LIBTEST = $(BUILD_DIR)/$(LIBNAME)
all: $(LIBTEST)
$(TEST_BUILD_DIR)/%.o : $(SRC_DIR)/%.c
@mkdir -p $(@D)
$(CCACHE) $(CC) $(CFLAGS) -c $< -o $@
$(LIBTEST): $(TEST_OBJS)
$(CC) -o $@ $(LDFLAGS) $(TEST_OBJS) -lm
clean::
# nothing to do - ant will delete the build dir
debug::
@echo "SRCS=$(TEST_SRCS)"