TARGET:=target SRC:=src/main/java include src/main/resources/org/xerial/snappy/VERSION ifndef JAVA_HOME $(warning Set JAVA_HOME environment variable) endif JAVA := "$$JAVA_HOME/bin/java" JAVAC := "$$JAVA_HOME/bin/javac" JAVAH := "$$JAVA_HOME/bin/javah" LITTLE_ENDIAN := "Little Endian" BIG_ENDIAN := "Big Endian" OSINFO_CLASS := org.xerial.snappy.OSInfo OSINFO_PROG := lib/org/xerial/snappy/OSInfo.class ## building OSInfo.java #$(info compiling OSInfo.java) #$(shell mkdir -p lib) #$(shell $(JAVAC) src/main/java/org/xerial/snappy/OSInfo.java -d lib) OS_NAME := $(shell $(JAVA) -cp lib $(OSINFO_CLASS) --os) OS_ARCH := $(shell $(JAVA) -cp lib $(OSINFO_CLASS) --arch) LIB_FOLDER := $(shell $(JAVA) -cp lib $(OSINFO_CLASS)) IBM_JDK_LIB := lib/inc_ibm ENDIANESS=$(shell lscpu | grep "Byte Order" |cut -d ":" -f2) # Windows uses different path separators ifeq ($(OS_NAME),Windows) sep := ; else sep := : endif snappy := snappy-$(SNAPPY_VERSION) jni_md := $(shell find -L "$(JAVA_HOME)" -name jni_md.h | head -1) ifneq ($(jni_md),) jni_include := $(shell dirname "$(jni_md)") endif # os=Default is meant to be generic unix/linux known_os_archs := Linux-x86 Linux-x86_64 Linux-arm Linux-armv6 Linux-armv7 Linux-android-arm Linux-aarch64 Linux-ppc Linux-ppc64 Linux-ppc64le Linux-s390 Linux-s390x Mac-x86 Mac-x86_64 FreeBSD-x86_64 Windows-x86 Windows-x86_64 SunOS-x86 SunOS-sparc SunOS-x86_64 AIX-ppc AIX-ppc64 os_arch := $(OS_NAME)-$(OS_ARCH) IBM_JDK_7 := $(findstring IBM, $(shell $(JAVA) -version 2>&1 | grep IBM | grep "JRE 1.7")) ifeq (,$(findstring $(strip $(os_arch)),$(known_os_archs))) os_arch := Default endif os_folder := $(shell echo $(OS_NAME) | tr A-Z a-z) ifneq ($(IBM_JDK_7),) $(shell mkdir -p $(IBM_JDK_LIB)) $(shell cp $(JAVA_HOME)/include/jniport.h $(IBM_JDK_LIB)) $(shell sed -i "s|#define JNIEXPORT *$$|#define JNIEXPORT __attribute__((__visibility__(\"default\")))|" $(IBM_JDK_LIB)/jniport.h) $(shell sed -i "s|typedef long long jlong;.*|/*typedef long long jlong;*/|" $(IBM_JDK_LIB)/jniport.h) $(shell cp $(JAVA_HOME)/include/$(os_folder)/jni_md.h $(IBM_JDK_LIB)) $(shell sed -i "s|#define JNIEXPORT|#define JNIEXPORT __attribute__((__visibility__(\"default\")))|" $(IBM_JDK_LIB)/jni_md.h) $(shell sed -i "s|typedef long long jlong;.*|/*typedef long long jlong;*/|" $(IBM_JDK_LIB)/jni_md.h) endif # cross-compilation toolchain prefix (e.g. "arm-linux-gnueabi-") CROSS_PREFIX := Default_CXX := $(CROSS_PREFIX)g++ Default_STRIP := $(CROSS_PREFIX)strip Default_CXXFLAGS := -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden Default_LINKFLAGS := -shared -static Default_LIBNAME := libsnappyjava.so Default_SNAPPY_FLAGS := Linux-x86_CXX := $(CROSS_PREFIX)g++ Linux-x86_STRIP := $(CROSS_PREFIX)strip ifeq ($(IBM_JDK_7),) Linux-x86_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m32 -U__SSE2__ else Linux-x86_CXXFLAGS := -include $(IBM_JDK_LIB)/jni_md.h -include $(IBM_JDK_LIB)/jniport.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m32 -U__SSE2__ endif Linux-x86_LINKFLAGS := -shared -static-libgcc -static-libstdc++ Linux-x86_LIBNAME := libsnappyjava.so Linux-x86_SNAPPY_FLAGS:= Linux-x86_64_CXX := $(CROSS_PREFIX)g++ Linux-x86_64_STRIP := $(CROSS_PREFIX)strip ifeq ($(IBM_JDK_7),) Linux-x86_64_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m64 else Linux-x86_64_CXXFLAGS := -include $(IBM_JDK_LIB)/jni_md.h -include $(IBM_JDK_LIB)/jniport.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m64 endif Linux-x86_64_LINKFLAGS := -shared -static-libgcc -static-libstdc++ Linux-x86_64_LIBNAME := libsnappyjava.so Linux-x86_64_SNAPPY_FLAGS := Linux-ppc_CXX := g++ Linux-ppc_STRIP := strip ifeq ($(IBM_JDK_7),) Linux-ppc_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m32 else Linux-ppc_CXXFLAGS := -include lib/inc_linux/jni_md.h -include $(IBM_JDK_LIB)/jniport.h -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux -O2 -fPIC -m32 endif Linux-ppc_LINKFLAGS := -shared -static-libgcc -static-libstdc++ Linux-ppc_LIBNAME := libsnappyjava.so Linux-ppc_SNAPPY_FLAGS := Linux-ppc64le_CXX := $(CROSS_PREFIX)g++ Linux-ppc64le_STRIP := $(CROSS_PREFIX)strip ifeq ($(IBM_JDK_7),) Linux-ppc64le_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m64 else Linux-ppc64le_CXXFLAGS := -include $(IBM_JDK_LIB)/jni_md.h -include $(IBM_JDK_LIB)/jniport.h -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux -O2 -fPIC -m64 endif # ppcle64 GLIBC is at 2.17; so disable __tls_get_addr_opt which is dependent on 2.22; Linux-ppc64le_LINKFLAGS := -shared -static-libgcc -static-libstdc++ -Wl,--no-tls-optimize,--no-tls-get-addr-optimize Linux-ppc64le_LIBNAME := libsnappyjava.so Linux-ppc64le_SNAPPY_FLAGS := Linux-ppc64_CXX := $(CROSS_PREFIX)g++ Linux-ppc64_STRIP := $(CROSS_PREFIX)strip ifeq ($(IBM_JDK_7),) Linux-ppc64_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m64 else Linux-ppc64_CXXFLAGS := -include $(IBM_JDK_LIB)/jni_md.h -include $(IBM_JDK_LIB)/jniport.h -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux -O2 -fPIC -m64 endif Linux-ppc64_LINKFLAGS := -shared -static-libgcc -static-libstdc++ Linux-ppc64_LIBNAME := libsnappyjava.so Linux-ppc64_SNAPPY_FLAGS := AIX-ppc_CXX := g++ AIX-ppc_STRIP := strip AIX-ppc_LIBNAME := libsnappyjava.a ifeq ($(IBM_JDK_7),) AIX-ppc_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -maix32 else AIX-ppc_CXXFLAGS := -I$(JAVA_HOME)/include/aix -Ilib/inc_ibm -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -maix32 endif AIX-ppc_LINKFLAGS := -shared -static-libgcc -static-libstdc++ -lcrypt AIX-ppc_SNAPPY_FLAGS := AIX-ppc64_CXX := g++ AIX-ppc64_STRIP := strip -X64 AIX-ppc64_LIBNAME := libsnappyjava.a ifeq ($(IBM_JDK_7),) AIX-ppc64_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -maix64 else AIX-ppc64_CXXFLAGS := -I$(JAVA_HOME)/include/aix -Ilib/inc_ibm -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -maix64 endif AIX-ppc64_LINKFLAGS := -shared -static-libgcc -static-libstdc++ -lcrypt AIX-ppc64_SNAPPY_FLAGS := Linux-s390_CXX := g++ Linux-s390_STRIP := strip ifeq ($(IBM_JDK_7),) Linux-s390_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m31 else Linux-s390_CXXFLAGS := -I$(JAVA_HOME)/include/linux -Ilib/inc_ibm -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -m31 endif Linux-s390_LINKFLAGS := -shared -static-libgcc -static-libstdc++ Linux-s390_LIBNAME := libsnappyjava.so Linux-s390_SNAPPY_FLAGS := Linux-s390x_CXX := g++ Linux-s390x_STRIP := strip ifeq ($(IBM_JDK_7),) Linux-s390x_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m64 else Linux-s390x_CXXFLAGS := -I$(JAVA_HOME)/include/linux -Ilib/inc_ibm -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -m64 endif Linux-s390x_LINKFLAGS := -shared -static-libgcc -static-libstdc++ Linux-s390x_LIBNAME := libsnappyjava.so Linux-s390x_SNAPPY_FLAGS := SunOS-x86_CXX := g++ SunOS-x86_STRIP := strip SunOS-x86_CXXFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden SunOS-x86_LINKFLAGS := -shared -static-libgcc -static-libstdc++ SunOS-x86_LIBNAME := libsnappyjava.so SunOS-x86_SNAPPY_FLAGS := SunOS-sparc_CXX := g++ SunOS-sparc_STRIP := strip SunOS-sparc_CXXFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden SunOS-sparc_LINKFLAGS := -shared -static-libgcc -static-libstdc++ SunOS-sparc_LIBNAME := libsnappyjava.so SunOS-sparc_SNAPPY_FLAGS := SunOS-x86_64_CXX := g++ SunOS-x86_64_STRIP := strip SunOS-x86_64_CXXFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m64 SunOS-x86_64_LINKFLAGS := -shared -static-libgcc -static-libstdc++ SunOS-x86_64_LIBNAME := libsnappyjava.so SunOS-x86_64_SNAPPY_FLAGS := # '-include lib/inc_linux/jni_md.h' is used to force the use of our version, # which defines JNIEXPORT differently; otherwise, since OpenJDK includes # jni_md.h in same directory as jni.h, the include path is ignored when # jni_md.h is included from jni.h Linux-arm_CXX := $(CROSS_PREFIX)g++ Linux-arm_STRIP := $(CROSS_PREFIX)strip Linux-arm_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -mfloat-abi=softfp Linux-arm_LINKFLAGS := -shared -static-libgcc Linux-arm_LIBNAME := libsnappyjava.so Linux-arm_SNAPPY_FLAGS:= Linux-armv6_CXX := $(CROSS_PREFIX)g++ Linux-armv6_STRIP := $(CROSS_PREFIX)strip Linux-armv6_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -mfloat-abi=hard Linux-armv6_LINKFLAGS := -shared -static-libgcc Linux-armv6_LIBNAME := libsnappyjava.so Linux-armv6_SNAPPY_FLAGS:= Linux-armv7_CXX := $(CROSS_PREFIX)g++ Linux-armv7_STRIP := $(CROSS_PREFIX)strip Linux-armv7_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -mfloat-abi=hard Linux-armv7_LINKFLAGS := -shared -static-libgcc Linux-armv7_LIBNAME := libsnappyjava.so Linux-armv7_SNAPPY_FLAGS:= Linux-android-arm_CXX := $(CROSS_PREFIX)g++ Linux-android-arm_STRIP := $(CROSS_PREFIX)strip Linux-android-arm_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -isystem /usr/arm-linux-androideabi/include/c++/4.9.x Linux-android-arm_LINKFLAGS := -shared -static-libgcc Linux-android-arm_LIBNAME := libsnappyjava.so Linux-android-arm_SNAPPY_FLAGS:= Linux-aarch64_CXX := $(CROSS_PREFIX)g++ Linux-aarch64_STRIP := $(CROSS_PREFIX)strip Linux-aarch64_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden Linux-aarch64_LINKFLAGS := -shared -static-libgcc -static-libstdc++ Linux-aarch64_LIBNAME := libsnappyjava.so Linux-aarch64_SNAPPY_FLAGS:= Mac-x86_CXX := g++ -arch i386 Mac-x86_STRIP := strip -x Mac-x86_CXXFLAGS := -Ilib/inc_mac -I$(JAVA_HOME)/include -O2 -fPIC -mmacosx-version-min=10.4 -fvisibility=hidden Mac-x86_LINKFLAGS := -dynamiclib -static-libgcc Mac-x86_LIBNAME := libsnappyjava.jnilib Mac-x86_SNAPPY_FLAGS := Mac-x86_64_CXX := c++ -arch $(OS_ARCH) Mac-x86_64_STRIP := strip -x Mac-x86_64_CXXFLAGS := -Ilib/inc_mac -I$(JAVA_HOME)/include -O2 -fPIC -mmacosx-version-min=10.7 -fvisibility=hidden -stdlib=libc++ Mac-x86_64_LINKFLAGS := -dynamiclib Mac-x86_64_LIBNAME := libsnappyjava.jnilib Mac-x86_64_SNAPPY_FLAGS := FreeBSD-x86_64_CXX := $(CROSS_PREFIX)g++ FreeBSD-x86_64_STRIP := $(CROSS_PREFIX)strip FreeBSD-x86_64_CXXFLAGS := -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden FreeBSD-x86_64_LINKFLAGS := -shared -static-libgcc FreeBSD-x86_64_LIBNAME := libsnappyjava.so FreeBSD-x86_64_SNAPPY_FLAGS := Windows-x86_CXX := $(CROSS_PREFIX)g++ Windows-x86_STRIP := $(CROSS_PREFIX)strip Windows-x86_CXXFLAGS := -Ilib/inc_win -O2 Windows-x86_LINKFLAGS := -Wl,--kill-at -shared -static Windows-x86_LIBNAME := snappyjava.dll Windows-x86_SNAPPY_FLAGS := Windows-x86_64_CXX := $(CROSS_PREFIX)g++ Windows-x86_64_STRIP := $(CROSS_PREFIX)strip Windows-x86_64_CXXFLAGS := -Ilib/inc_win -O2 Windows-x86_64_LINKFLAGS := -Wl,--kill-at -shared -static Windows-x86_64_LIBNAME := snappyjava.dll Windows-x86_64_SNAPPY_FLAGS := CXX := $($(os_arch)_CXX) STRIP := $($(os_arch)_STRIP) CXXFLAGS := $($(os_arch)_CXXFLAGS) LINKFLAGS := $($(os_arch)_LINKFLAGS) LIBNAME := $($(os_arch)_LIBNAME) SNAPPY_FLAGS := $($(os_arch)_SNAPPY_FLAGS) CXXFLAGS := $(CXXFLAGS) -DHAVE_CONFIG_H ifneq ($(jni_include),) CXXFLAGS := $(CXXFLAGS) -I"$(jni_include)" endif