From 1e32d291e84362c0cc08b9eaafdfd3908a4a5ab8 Mon Sep 17 00:00:00 2001 From: Abhishek Soni Date: Wed, 23 Sep 2015 08:41:12 -0700 Subject: [PATCH] Adding support for s390x --- Makefile | 2 +- Makefile.common | 38 +++++++++++++++++- README.md | 10 ++++- build.sbt | 1 + src/main/java/org/xerial/snappy/OSInfo.java | 8 ++++ .../native/Linux/s390x/libsnappyjava.so | Bin 0 -> 55768 bytes 6 files changed, 55 insertions(+), 4 deletions(-) create mode 100755 src/main/resources/org/xerial/snappy/native/Linux/s390x/libsnappyjava.so diff --git a/Makefile b/Makefile index 0f14338c..57ece653 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ $(SNAPPY_GIT_UNPACKED): 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 + cd $(SNAPPY_SRC_DIR) && ./autogen.sh && ./configure jni-header: $(SRC)/org/xerial/snappy/SnappyNative.h diff --git a/Makefile.common b/Makefile.common index 7b22f07d..edba3c75 100755 --- a/Makefile.common +++ b/Makefile.common @@ -42,7 +42,7 @@ endif # os=Default is meant to be generic unix/linux -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 AIX-ppc64 +known_os_archs := Linux-x86 Linux-x86_64 Linux-arm Linux-armhf Linux-ppc Linux-ppc64 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-ppc64 os_arch := $(OS_NAME)-$(OS_ARCH) IBM_JDK_7 := $(findstring IBM, $(shell $(JAVA) -version 2>&1 | grep IBM | grep "JRE 1.7")) @@ -94,12 +94,23 @@ 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 := -DHAVE_CONFIG_H -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m32 +else + Linux-ppc_CXXFLAGS := -DHAVE_CONFIG_H -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-ppc64_CXX := g++ Linux-ppc64_STRIP := strip ifeq ($(IBM_JDK_7),) 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 + 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 -m64 endif Linux-ppc64_LINKFLAGS := -shared -static-libgcc -static-libstdc++ Linux-ppc64_LIBNAME := libsnappyjava.so @@ -116,6 +127,29 @@ 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 := -DHAVE_CONFIG_H -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m31 +else + Linux-s390_CXXFLAGS := -DHAVE_CONFIG_H -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 := -DHAVE_CONFIG_H -Ilib/inc_linux -I$(JAVA_HOME)/include -Ilib/inc_mac -O2 -fPIC -fvisibility=hidden -m64 +else + Linux-s390x_CXXFLAGS := -DHAVE_CONFIG_H -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_LINKFLAGS := -shared -static-libgcc +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 diff --git a/README.md b/README.md index d2fe0048..5cf02dff 100755 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ When building on Solaris use A file `target/snappy-java-$(version).jar` is the product additionally containing the native library built for your platform. -## Building linux x86_64 binary +## Building linux x86\_64 binary snappy-java tries to static link libstdc++ to increase the availability for various Linux versions. However, standard distributions of 64-bit Linux OS rarely provide libstdc++ compiled with `-fPIC` option. I currently uses custom g++, compiled as follows: @@ -128,6 +128,14 @@ $ make install This g++ build enables static linking of libstdc++. For more infomation on building GCC, see GCC's home page. +## Building Linux s390/s390x binaries + +Older snapshots of snappy contain a buggy config.h.in that does not work properly on some big-endian platforms like Linux on IBM z (s390/s390x). Building snappy-java on s390/s390x requires fetching the snappy source from GitHub, and processing the source with autoconf to obtain a usable config.h. On a RHEL s390x system, these steps produced a working 64-bit snappy-java build (the process should be similar for other distributions): + + $ sudo yum install java-1.7.1-ibm-devel libstdc++-static-devel + $ export JAVA_HOME=/usr/lib/jvm/java-1.7.1-ibm-1.7.1.2.10-1jpp.3.el7_0.s390x + $ make USE_GIT=1 GIT_REPO_URL=https://github.com/google/snappy.git GIT_SNAPPY_BRANCH=master IBM_JDK_7=1 + ## Cross-compiling for other platforms The Makefile contains rules for cross-compiling the native library for other platforms so that the snappy-java JAR can support multiple platforms. For example, to build the native libraries for x86 Linux, x86 and x86-64 Windows, and soft- and hard-float ARM: diff --git a/build.sbt b/build.sbt index dab77b0c..9c2c3159 100644 --- a/build.sbt +++ b/build.sbt @@ -95,6 +95,7 @@ OsgiKeys.additionalHeaders := Map( "org/xerial/snappy/native/Linux/arm/libsnappyjava.so;osname=linux;processor=arm", "org/xerial/snappy/native/Linux/ppc64/libsnappyjava.so;osname=linux;processor=ppc64", "org/xerial/snappy/native/Linux/ppc64le/libsnappyjava.so;osname=linux;processor=ppc64le", +"org/xerial/snappy/native/Linux/s390x/libsnappyjava.so;osname=linux;processor=s390x", "org/xerial/snappy/native/AIX/ppc64/libsnappyjava.a;osname=aix;processor=ppc64", "org/xerial/snappy/native/SunOS/x86/libsnappyjava.so;osname=sunos;processor=x86", "org/xerial/snappy/native/SunOS/x86_64/libsnappyjava.so;osname=sunos;processor=x86-64", diff --git a/src/main/java/org/xerial/snappy/OSInfo.java b/src/main/java/org/xerial/snappy/OSInfo.java index 1ed7a842..fc4d926f 100755 --- a/src/main/java/org/xerial/snappy/OSInfo.java +++ b/src/main/java/org/xerial/snappy/OSInfo.java @@ -44,6 +44,8 @@ public class OSInfo public static final String IA64 = "ia64"; public static final String PPC = "ppc"; public static final String PPC64 = "ppc64"; + public static final String IBMZ = "s390"; + public static final String IBMZ_64 = "s390x"; static { // x86 mappings @@ -81,6 +83,12 @@ public class OSInfo archMapping.put("powerpc64", PPC64); archMapping.put("power_pc64", PPC64); archMapping.put("power_rs64", PPC64); + + // IBM z mappings + archMapping.put(IBMZ, IBMZ); + + // IBM z 64-bit mappings + archMapping.put(IBMZ_64, IBMZ_64); } diff --git a/src/main/resources/org/xerial/snappy/native/Linux/s390x/libsnappyjava.so b/src/main/resources/org/xerial/snappy/native/Linux/s390x/libsnappyjava.so new file mode 100755 index 0000000000000000000000000000000000000000..b87e9be5f3c40e95761505aadd86e6715ef93507 GIT binary patch literal 55768 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 SZWoofGNduSa#s)Q7ykmZbvGaY literal 0 HcmV?d00001