diff --git a/BUILD.md b/BUILD.md index 46a3301..bbf775f 100755 --- a/BUILD.md +++ b/BUILD.md @@ -116,20 +116,5 @@ If you are using Mac and openjdk7 (or higher), use the following option: $ make native LIBNAME=libsnappyjava.dylib -## Building with musl libc -This project now supports building with musl libc, which is commonly used in Alpine Linux. To build using musl: - -1. Use the provided Alpine-based Dockerfile: -```bash -docker build -f docker/Dockerfile.alpine -t snappy-java-alpine . -docker run -it snappy-java-alpine sh -make -``` - -2. The build process will: -- Use musl libc instead of glibc -- Statically link required libraries -- Create a native library compatible with Alpine/musl systems - -The resulting library will be placed in: -`src/main/resources/org/xerial/snappy/native/Linux-musl/x86_64/libsnappyjava.so` +## Building with Alpine +This project now supports Alpine Image, which has the musl library. diff --git a/Makefile b/Makefile index 52f64b3..dae33f2 100644 --- a/Makefile +++ b/Makefile @@ -151,7 +151,7 @@ native: jni-header snappy-header $(NATIVE_DLL) native-nocmake: jni-header $(NATIVE_DLL) snappy: native $(TARGET)/$(snappy-jar-version).jar -native-all: native native-arm clean-docker mac64 win32 win64 linux32 linux64 linux-ppc64le linux-riscv64 linux-s390x +native-all: native native-arm clean-docker mac64 win32 win64 linux32 linux64 linux-ppc64le linux-riscv64 linux-s390x alpine-image alpine ifdef CI # Clean docker images within CI to avoid no space left error @@ -199,6 +199,12 @@ linux32: jni-header linux64: jni-header docker run $(DOCKER_RUN_OPTS) -i -v $$PWD:/work xerial/centos5-linux-x86_64-pic bash -c 'make clean-native native-nocmake OS_NAME=Linux OS_ARCH=x86_64' +alpine-image: + docker build -f docker/Dockerfile.alpine -t snappy-java-alpine . + +alpine: jni-header + docker run $(DOCKER_RUN_OPTS) -i -v $$PWD:/work snappy-java-alpine bash -c 'make clean-native native-nocmake OS_NAME=Alpine OS_ARCH=x86_64' + freebsd64: $(MAKE) native OS_NAME=FreeBSD OS_ARCH=x86_64 diff --git a/Makefile.common b/Makefile.common index 4e64c6d..6f46c3e 100755 --- a/Makefile.common +++ b/Makefile.common @@ -108,16 +108,16 @@ Linux-x86_64_LINKFLAGS := -shared -static-libgcc -static-libstdc++ Linux-x86_64_LIBNAME := libsnappyjava.so Linux-x86_64_SNAPPY_FLAGS := -Linux-x86_64_musl_CXX := $(CROSS_PREFIX)g++ -Linux-x86_64_musl_STRIP := $(CROSS_PREFIX)strip +Alpine-x86_64_CXX := $(CROSS_PREFIX)g++ +Alpine-x86_64_STRIP := $(CROSS_PREFIX)strip ifeq ($(IBM_JDK_7),) - Linux-x86_64_musl_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m64 -std=c++11 + Alpine-x86_64_CXXFLAGS := -Ilib/inc_linux -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m64 -std=c++11 else - Linux-x86_64_musl_CXXFLAGS := -include $(IBM_JDK_LIB)/jni_md.h -include $(IBM_JDK_LIB)/jniport.h -I$(JAVA_HOME)/include -O2 -fPIC -fvisibility=hidden -m64 -std=c++11 + Alpine-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 -std=c++11 endif -Linux-x86_64_musl_LINKFLAGS := -shared -static-libgcc -static-libstdc++ -Linux-x86_64_musl_LIBNAME := libsnappyjava.so -Linux-x86_64_musl_SNAPPY_FLAGS := +Alpine-x86_64_LINKFLAGS := -shared -static-libgcc -static-libstdc++ +Alpine-x86_64_LIBNAME := libsnappyjava.so +Alpine-x86_64_SNAPPY_FLAGS := Linux-ppc_CXX := g++ Linux-ppc_STRIP := strip diff --git a/build.sbt b/build.sbt index 8e1efe3..e99d69d 100644 --- a/build.sbt +++ b/build.sbt @@ -111,7 +111,7 @@ OsgiKeys.additionalHeaders := Map( "org/xerial/snappy/native/Linux/ppc64/libsnappyjava.so;osname=linux;processor=ppc64le", "org/xerial/snappy/native/Linux/s390x/libsnappyjava.so;osname=linux;processor=s390x", "org/xerial/snappy/native/Linux/loongarch64/libsnappyjava.so;osname=linux;processor=loongarch64", - "org/xerial/snappy/native/Linux/x86_64_musl/libsnappyjava.so;osname=linux;processor=x86-64", + "org/xerial/snappy/native/Alpine/x86_64/libsnappyjava.so;osname=alpine;processor=x86-64", "org/xerial/snappy/native/AIX/ppc/libsnappyjava.a;osname=aix;processor=ppc", "org/xerial/snappy/native/AIX/ppc64/libsnappyjava.a;osname=aix;processor=ppc64", "org/xerial/snappy/native/SunOS/x86/libsnappyjava.so;osname=sunos;processor=x86", diff --git a/docker/Dockerfile.alpine b/docker/Dockerfile.alpine-linux-x86_64 similarity index 95% rename from docker/Dockerfile.alpine rename to docker/Dockerfile.alpine-linux-x86_64 index 1d019d6..c76cec9 100644 --- a/docker/Dockerfile.alpine +++ b/docker/Dockerfile.alpine-linux-x86_64 @@ -31,6 +31,6 @@ RUN python3 -m ensurepip RUN pip3 install --no-cache --upgrade pip setuptools # Set Env Vars -ENV CC=gcc CXX=g++ TARGET_OS=LinuxMUSL +ENV CC=gcc CXX=g++ ENV JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk ENV PATH="${JAVA_HOME}/bin:${PATH}" diff --git a/docker/Toolchain-musl.cmake b/docker/Toolchain-musl.cmake deleted file mode 100644 index ea21053..0000000 --- a/docker/Toolchain-musl.cmake +++ /dev/null @@ -1,20 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_VERSION 1) - -# Specify the cross compilers -set(CMAKE_C_COMPILER gcc) -set(CMAKE_CXX_COMPILER g++) - -# Set target environment path -set(CMAKE_FIND_ROOT_PATH /usr) - -# Search for programs in the host environment -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) - -# Search for libraries and headers in the target environment -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -# Set compiler flags for musl -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static") \ No newline at end of file diff --git a/src/main/resources/org/xerial/snappy/native/Alpine/x86_64/.keep b/src/main/resources/org/xerial/snappy/native/Alpine/x86_64/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/resources/org/xerial/snappy/native/Alpine/x86_64/libsnappyjava.so b/src/main/resources/org/xerial/snappy/native/Alpine/x86_64/libsnappyjava.so new file mode 100755 index 0000000..20ecf77 Binary files /dev/null and b/src/main/resources/org/xerial/snappy/native/Alpine/x86_64/libsnappyjava.so differ