1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
|
# -*- makefile -*-
BUILD_OS := $(strip $(shell uname -s | tr '[:upper:]' '[:lower:]'))
OS ?= $(BUILD_OS)
# Default value of $OS on Windows is Windows_NT
ifeq ($(OS), Windows_NT)
# that's how we detect x64...
ifneq ($(findstring 64, $(BUILD_OS)),)
OS = win64
else
OS = win32
endif
endif
CPU = $(shell uname -m | sed -e 's/i[345678]86/i386/')
MODEL = 32 # Default to 32bit compiles
PLATFORM = $(CPU)-$(OS)
ifeq ($(OS), sunos)
OS = solaris
endif
ifneq ($(findstring cygwin,$(BUILD_OS)),)
# cygwin is always x32 for now
OS = win32
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 -Werror -Wall -Wno-unused -Wno-parentheses
PICFLAGS = -fPIC
SOFLAGS = -shared -Wl,-O1
LDFLAGS += $(SOFLAGS)
IFLAGS = -I"$(BUILD_DIR)"
CFLAGS = $(OFLAGS) $(WFLAGS) $(IFLAGS) $(PICFLAGS) -D_REENTRANT
ifeq ($(OS), win64)
override CPU = x86_64
JDK_INCLUDES=-I$(JNI_DIR)/win32/include -I$(JNI_DIR)/win32/include/win32
CC = gcc -m64
CXX = g++
PICFLAGS =
LDFLAGS += -Wl,--add-stdcall-alias
PICFLAGS =
PREFIX =
LIBEXT = dll
endif
ifeq ($(OS), win32)
CC += -mno-cygwin -mwin32
LDFLAGS += -mno-cygwin -Wl,--add-stdcall-alias
PREFIX =
PICFLAGS =
LIBEXT = dll
endif
ifeq ($(OS), darwin)
ARCHFLAGS = -arch ppc
ifneq ($(findstring $(CPU), i386 x86_64),)
ARCHFLAGS += -arch i386 -arch x86_64
endif
CC = gcc-4.0
MACSDK = /Developer/SDKs/MacOSX10.4u.sdk
CFLAGS += $(ARCHFLAGS) -isysroot $(MACSDK) -DTARGET_RT_MAC_CFM=0
CFLAGS += -fno-common
LDFLAGS = $(ARCHFLAGS) -dynamiclib -Wl,-syslibroot,$(MACSDK) -mmacosx-version-min=10.4
# 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 = gcc
CFLAGS += -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
ifneq ($(findstring cygwin, $(OS)),)
CFLAGS += -mno-cygwin -mwin32
LDFLAGS += -mno-cygwin -Wl,--add-stdcall-alias
LIBEXT = dll
PREFIX =
PICFLAGS =
endif
ifneq ($(findstring mingw, $(OS)),)
LIBEXT = dll
PICFLAGS=
endif
ifeq ($(CPU), sparcv9)
MODEL = 64
endif
ifeq ($(CPU), amd64)
MODEL = 64
endif
ifeq ($(CPU), x86_64)
MODEL = 64
endif
ifeq ($(CPU), s390x)
MODEL = 64
endif
ifeq ($(CPU), ppc64)
MODEL = 64
endif
# On platforms (linux, solaris) that support both 32bit and 64bit, force building for one or the other
ifneq ($(strip $(findstring $(OS), linux solaris)),)
# Change the CC/LD instead of CFLAGS/LDFLAGS, incase other things in the flags
# makes the libffi build choke
#CC += -m$(MODEL)
#LD += -m$(MODEL)
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 OS="$(OS)"
@echo BUILD_OS="$(BUILD_OS)"
@echo JAVA_HOME="$(JAVA_HOME)"
@echo JDK_HOME="$(JDK_HOME)"
@echo "SRCS=$(TEST_SRCS)"
|