diff --git a/Makefile b/Makefile index 0821c87..17bed9a 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,16 @@ SNAPPY_SRC:=$(addprefix $(SNAPPY_SRC_DIR)/,$(SNAPPY_CC)) SNAPPY_OBJ:=$(addprefix $(SNAPPY_OUT)/,$(patsubst %.cc,%.o,$(SNAPPY_CC)) SnappyNative.o) SNAPPY_UNPACKED:=$(TARGET)/snappy-extracted.log +SNAPPY_GIT_UNPACKED:=$(TARGET)/snappy-git-extracted.log + +ifdef USE_GIT + ifndef GIT_REPO_URL + $(warning GIT_REPO_URL is not set when using git) + endif + ifndef GIT_SNAPPY_BRANCH + $(warning GIT_SNAPPY_BRANCH is not set when using git) + endif +endif CXXFLAGS:=$(CXXFLAGS) -I$(SNAPPY_SRC_DIR) @@ -29,6 +39,14 @@ $(SNAPPY_ARCHIVE): $(SNAPPY_UNPACKED): $(SNAPPY_ARCHIVE) $(TAR) xvfz $< -C $(TARGET) touch $@ + cd $(SNAPPY_SRC_DIR) && ./configure + +$(SNAPPY_GIT_UNPACKED): + @mkdir -p $(SNAPPY_SRC_DIR) + git clone $(GIT_REPO_URL) $(SNAPPY_SRC_DIR) + git --git-dir=$(SNAPPY_SRC_DIR)/.git --work-tree=$(SNAPPY_SRC_DIR) checkout -b local/snappy-$(GIT_SNAPPY_BRANCH) $(GIT_SNAPPY_BRANCH) + touch $@ + cd $(SNAPPY_SRC_DIR) && ./configure jni-header: $(SRC)/org/xerial/snappy/SnappyNative.h @@ -46,7 +64,11 @@ src/main/resources/org/xerial/snappy/SnappyNativeLoader.bytecode: src/main/resou $(JAVAC) -source 1.5 -target 1.5 -d $(TARGET)/temp $< cp $(TARGET)/temp/org/xerial/snappy/SnappyNativeLoader.class $@ -$(SNAPPY_SRC): $(SNAPPY_UNPACKED) +ifndef USE_GIT + $(SNAPPY_SRC): $(SNAPPY_UNPACKED) +else + $(SNAPPY_SRC): $(SNAPPY_GIT_UNPACKED) +endif $(SNAPPY_OUT)/%.o : $(SNAPPY_SRC_DIR)/%.cc @mkdir -p $(@D) @@ -73,7 +95,11 @@ NATIVE_DLL:=$(NATIVE_DIR)/$(LIBNAME) snappy-jar-version:=snappy-java-$(shell $(JAVA) -jar lib/silk-weaver.jar find 'project(artifactId, version)' pom.xml | grep snappy-java | awk '{ print $$2; }') -native: $(SNAPPY_UNPACKED) $(NATIVE_DLL) +ifndef USE_GIT + native: $(SNAPPY_UNPACKED) $(NATIVE_DLL) +else + native: $(SNAPPY_GIT_UNPACKED) $(NATIVE_DLL) +endif snappy: native $(TARGET)/$(snappy-jar-version).jar $(NATIVE_DLL): $(SNAPPY_OUT)/$(LIBNAME) diff --git a/Makefile.common b/Makefile.common index 7cdb2d9..e765e0d 100755 --- a/Makefile.common +++ b/Makefile.common @@ -22,6 +22,7 @@ OSINFO_PROG := lib/org/xerial/snappy/OSInfo.class 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 # Windows uses different path separators ifeq ($(OS_NAME),Windows) @@ -41,13 +42,24 @@ endif # os=Default is meant to be generic unix/linux -known_os_archs := Linux-x86 Linux-x86_64 Linux-arm Linux-armhf Mac-x86 Mac-x86_64 FreeBSD-x86_64 Windows-x86 Windows-x86_64 SunOS-x86 SunOS-sparc SunOS-x86_64 +known_os_archs := Linux-x86 Linux-x86_64 Linux-arm Linux-armhf Linux-ppc64 Mac-x86 Mac-x86_64 FreeBSD-x86_64 Windows-x86 Windows-x86_64 SunOS-x86 SunOS-sparc SunOS-x86_64 os_arch := $(OS_NAME)-$(OS_ARCH) +IBM_JDK := $(findstring IBM, $(shell $(JAVA) -version 2>&1 | grep IBM)) ifeq (,$(findstring $(strip $(os_arch)),$(known_os_archs))) os_arch := Default endif +ifneq ($(IBM_JDK),) + $(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/linux/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 := @@ -60,18 +72,37 @@ Default_SNAPPY_FLAGS := Linux-x86_CXX := $(CROSS_PREFIX)g++ Linux-x86_STRIP := $(CROSS_PREFIX)strip -Linux-x86_CXXFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m32 +ifeq ($(IBM_JDK),) + Linux-x86_CXXFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m32 +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 +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 -Linux-x86_64_CXXFLAGS := -include lib/inc_linux/jni_md.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m64 +ifeq ($(IBM_JDK),) + Linux-x86_64_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -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 -Ilib/inc_mac -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-ppc64_CXX := g++ +Linux-ppc64_STRIP := strip +ifeq ($(IBM_JDK),) + Linux-ppc64_CXXFLAGS := -DHAVE_CONFIG_H -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m64 +else + Linux-ppc64_CXXFLAGS := -DHAVE_CONFIG_H -include $(IBM_JDK_LIB)/jni_md.h -include $(IBM_JDK_LIB)/jniport.h -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux -O2 -fPIC +endif +Linux-ppc64_LINKFLAGS := -shared -static-libgcc -static-libstdc++ +Linux-ppc64_LIBNAME := libsnappyjava.so +Linux-ppc64_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 diff --git a/Milestone.md b/Milestone.md index 62c40b8..10b9c3f 100644 --- a/Milestone.md +++ b/Milestone.md @@ -9,7 +9,9 @@ Since vesion 1.1.0.x, Java 6 (1.6) or higher is required. # snappy-java-1.1.1-M2 (12 June 2014) * Bug fixes and some optimization of SnappyFramedFormat + * Added a native library for ppc64le * Preview build (without libstdc++ embedded for Linux/x86_64) + ## snappy-java-1.1.1-M1 * Preview build (without libstdc++ embedded for Linux/x86_64) diff --git a/pom.xml b/pom.xml index 05cf218..7da4b98 100755 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.xerial.snappy snappy-java - 1.1.1-M1 + 1.1.1-M2 Snappy for Java snappy-java: A fast compression/decompression library bundle