From e59a4601da889c5f8ea7f8791f900012c3766846 Mon Sep 17 00:00:00 2001 From: mike-evolved Date: Tue, 2 Dec 2025 00:41:06 -0600 Subject: [PATCH 1/4] Update docker-build-linux for devtoolset 11+ --- java/crossbuild/docker-build-linux.sh | 44 ++++++++++++++++++--------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/java/crossbuild/docker-build-linux.sh b/java/crossbuild/docker-build-linux.sh index 4996696eac70..fdce720d5ebc 100755 --- a/java/crossbuild/docker-build-linux.sh +++ b/java/crossbuild/docker-build-linux.sh @@ -9,6 +9,11 @@ if [ -z "${J}" ]; then J=1 fi +# Convert 100% to number of CPUs (for make -j) +if [ "${J}" = "100%" ]; then + J=$(nproc 2>/dev/null || echo 1) +fi + # just in-case this is run outside Docker mkdir -p /rocksdb-local-build @@ -16,27 +21,36 @@ rm -rf /rocksdb-local-build/* cp -r /rocksdb-host/* /rocksdb-local-build cd /rocksdb-local-build -# Use scl devtoolset if available +# Detect and enable devtoolset if available +DEVTOOLSET="" if hash scl 2>/dev/null; then - if scl --list | grep -q 'devtoolset-8'; then - # CentOS 6+ - scl enable devtoolset-8 'make clean-not-downloaded' - scl enable devtoolset-8 "PORTABLE=1 J=$J make -j$J rocksdbjavastatic" + # Check for devtoolsets in order of preference (newer first) + if scl --list | grep -q 'devtoolset-12'; then + DEVTOOLSET="devtoolset-12" + elif scl --list | grep -q 'devtoolset-11'; then + DEVTOOLSET="devtoolset-11" + elif scl --list | grep -q 'devtoolset-10'; then + DEVTOOLSET="devtoolset-10" + elif scl --list | grep -q 'devtoolset-9'; then + DEVTOOLSET="devtoolset-9" + elif scl --list | grep -q 'devtoolset-8'; then + DEVTOOLSET="devtoolset-8" elif scl --list | grep -q 'devtoolset-7'; then - # CentOS 6+ - scl enable devtoolset-7 'make clean-not-downloaded' - scl enable devtoolset-7 "PORTABLE=1 J=$J make -j$J rocksdbjavastatic" + DEVTOOLSET="devtoolset-7" elif scl --list | grep -q 'devtoolset-2'; then - # CentOS 5 or 6 - scl enable devtoolset-2 'make clean-not-downloaded' - scl enable devtoolset-2 "PORTABLE=1 J=$J make -j$J rocksdbjavastatic" - else - echo "Could not find devtoolset" - exit 1; + DEVTOOLSET="devtoolset-2" fi +fi + +# Build with devtoolset if available, otherwise use system compiler +# Add -Wno-error=restrict for GCC 12+ to avoid false positive warnings +if [ -n "$DEVTOOLSET" ]; then + echo "Using $DEVTOOLSET" + scl enable $DEVTOOLSET "bash -c 'make clean-not-downloaded && PORTABLE=1 J=$J EXTRA_CXXFLAGS=-Wno-error=restrict make -j$J rocksdbjavastatic'" else + echo "No scl devtoolset found, using system compiler" make clean-not-downloaded - PORTABLE=1 make -j$J rocksdbjavastatic + PORTABLE=1 EXTRA_CXXFLAGS=-Wno-error=restrict make -j$J rocksdbjavastatic fi cp java/target/librocksdbjni-linux*.so java/target/rocksdbjni-*-linux*.jar java/target/rocksdbjni-*-linux*.jar.sha1 /rocksdb-java-target From c2013ff391eb74ef340dfa3ac26ca61d528b4829 Mon Sep 17 00:00:00 2001 From: mike-evolved Date: Thu, 4 Dec 2025 08:46:03 -0600 Subject: [PATCH 2/4] update ubuntu18 to centos7 --- Makefile | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 403c804c17f7..992393115e2b 100644 --- a/Makefile +++ b/Makefile @@ -2223,6 +2223,20 @@ endif JAVA_STATIC_FLAGS = -DZLIB -DBZIP2 -DSNAPPY -DLZ4 -DZSTD JAVA_STATIC_INCLUDES = -I./zlib-$(ZLIB_VER) -I./bzip2-$(BZIP2_VER) -I./snappy-$(SNAPPY_VER) -I./snappy-$(SNAPPY_VER)/build -I./lz4-$(LZ4_VER)/lib -I./zstd-$(ZSTD_VER)/lib -I./zstd-$(ZSTD_VER)/lib/dictBuilder +# Docker image names for cross-platform Java builds +DOCKER_IMAGE_CENTOS7_X86 ?= evolvedbinary/rocksjava:centos7_x86-be +DOCKER_IMAGE_CENTOS7_X64 ?= evolvedbinary/rocksjava:centos7_x64-be +DOCKER_IMAGE_CENTOS7_PPC64LE ?= evolvedbinary/rocksjava:centos7_ppc64le-be +DOCKER_IMAGE_CENTOS7_ARM64V8 ?= evolvedbinary/rocksjava:centos7_arm64v8-be +DOCKER_IMAGE_CENTOS7_S390X ?= evolvedbinary/rocksjava:centos7_s390x-be +DOCKER_IMAGE_UBUNTU20_RISCV64 ?= evolvedbinary/rocksjava:ubuntu20_riscv64-be +DOCKER_IMAGE_ALPINE3_X86 ?= evolvedbinary/rocksjava:alpine3_x86-be +DOCKER_IMAGE_ALPINE3_X64 ?= evolvedbinary/rocksjava:alpine3_x64-be +DOCKER_IMAGE_ALPINE3_PPC64LE ?= evolvedbinary/rocksjava:alpine3_ppc64le-be +DOCKER_IMAGE_ALPINE3_ARM64V8 ?= evolvedbinary/rocksjava:alpine3_arm64v8-be +DOCKER_IMAGE_ALPINE3_S390X ?= evolvedbinary/rocksjava:alpine3_s390x-be +DOCKER_IMAGE_ALPINE3_RISCV64 ?= evolvedbinary/rocksjava:alpine3_riscv64-be + ifneq ($(findstring rocksdbjavastatic, $(filter-out rocksdbjavastatic_deps, $(MAKECMDGOALS))),) CXXFLAGS += $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) CFLAGS += $(JAVA_STATIC_FLAGS) $(JAVA_STATIC_INCLUDES) @@ -2314,47 +2328,47 @@ rocksdbjavastaticreleasedocker: rocksdbjavastaticosx rocksdbjavastaticdockerx86 rocksdbjavastaticdockerx86: mkdir -p java/target - docker run --rm --name rocksdb_linux_x86-be --platform linux/386 --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) evolvedbinary/rocksjava:centos7_x86-be /rocksdb-host/java/crossbuild/docker-build-linux.sh + docker run --rm --name rocksdb_linux_x86-be --platform linux/386 --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) $(DOCKER_IMAGE_CENTOS7_X86) /rocksdb-host/java/crossbuild/docker-build-linux.sh rocksdbjavastaticdockerx86_64: mkdir -p java/target - docker run --rm --name rocksdb_linux_x64-be --platform linux/amd64 --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) evolvedbinary/rocksjava:centos7_x64-be /rocksdb-host/java/crossbuild/docker-build-linux.sh + docker run --rm --name rocksdb_linux_x64-be --platform linux/amd64 --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) $(DOCKER_IMAGE_CENTOS7_X64) /rocksdb-host/java/crossbuild/docker-build-linux.sh rocksdbjavastaticdockerppc64le: mkdir -p java/target - docker run --rm --name rocksdb_linux_ppc64le-be --platform linux/ppc64le --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) evolvedbinary/rocksjava:centos7_ppc64le-be /rocksdb-host/java/crossbuild/docker-build-linux.sh + docker run --rm --name rocksdb_linux_ppc64le-be --platform linux/ppc64le --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) $(DOCKER_IMAGE_CENTOS7_PPC64LE) /rocksdb-host/java/crossbuild/docker-build-linux.sh rocksdbjavastaticdockerarm64v8: mkdir -p java/target - docker run --rm --name rocksdb_linux_arm64v8-be --platform linux/aarch64 --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) evolvedbinary/rocksjava:centos7_arm64v8-be /rocksdb-host/java/crossbuild/docker-build-linux.sh + docker run --rm --name rocksdb_linux_arm64v8-be --platform linux/aarch64 --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) $(DOCKER_IMAGE_CENTOS7_ARM64V8) /rocksdb-host/java/crossbuild/docker-build-linux.sh rocksdbjavastaticdockers390x: mkdir -p java/target - docker run --rm --name rocksdb_linux_s390x-be --platform linux/s390x --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) evolvedbinary/rocksjava:ubuntu18_s390x-be /rocksdb-host/java/crossbuild/docker-build-linux.sh + docker run --rm --name rocksdb_linux_s390x-be --platform linux/s390x --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) $(DOCKER_IMAGE_CENTOS7_S390X) /rocksdb-host/java/crossbuild/docker-build-linux.sh rocksdbjavastaticdockerriscv64: mkdir -p java/target - docker run --rm --name rocksdb_linux_riscv64-be --platform linux/riscv64 --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) evolvedbinary/rocksjava:ubuntu20_riscv64-be /rocksdb-host/java/crossbuild/docker-build-linux.sh + docker run --rm --name rocksdb_linux_riscv64-be --platform linux/riscv64 --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) $(DOCKER_IMAGE_UBUNTU20_RISCV64) /rocksdb-host/java/crossbuild/docker-build-linux.sh rocksdbjavastaticdockerx86musl: mkdir -p java/target - docker run --rm --name rocksdb_linux_x86-musl-be --platform linux/386 --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) evolvedbinary/rocksjava:alpine3_x86-be /rocksdb-host/java/crossbuild/docker-build-linux.sh + docker run --rm --name rocksdb_linux_x86-musl-be --platform linux/386 --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) $(DOCKER_IMAGE_ALPINE3_X86) /rocksdb-host/java/crossbuild/docker-build-linux.sh rocksdbjavastaticdockerx86_64musl: mkdir -p java/target - docker run --rm --name rocksdb_linux_x64-musl-be --platform linux/amd64 --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) evolvedbinary/rocksjava:alpine3_x64-be /rocksdb-host/java/crossbuild/docker-build-linux.sh + docker run --rm --name rocksdb_linux_x64-musl-be --platform linux/amd64 --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) $(DOCKER_IMAGE_ALPINE3_X64) /rocksdb-host/java/crossbuild/docker-build-linux.sh rocksdbjavastaticdockerppc64lemusl: mkdir -p java/target - docker run --rm --name rocksdb_linux_ppc64le-musl-be --platform linux/ppc64le --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) evolvedbinary/rocksjava:alpine3_ppc64le-be /rocksdb-host/java/crossbuild/docker-build-linux.sh + docker run --rm --name rocksdb_linux_ppc64le-musl-be --platform linux/ppc64le --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) $(DOCKER_IMAGE_ALPINE3_PPC64LE) /rocksdb-host/java/crossbuild/docker-build-linux.sh rocksdbjavastaticdockerarm64v8musl: mkdir -p java/target - docker run --rm --name rocksdb_linux_arm64v8-musl-be --platform linux/aarch64 --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) evolvedbinary/rocksjava:alpine3_arm64v8-be /rocksdb-host/java/crossbuild/docker-build-linux.sh + docker run --rm --name rocksdb_linux_arm64v8-musl-be --platform linux/aarch64 --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) $(DOCKER_IMAGE_ALPINE3_ARM64V8) /rocksdb-host/java/crossbuild/docker-build-linux.sh rocksdbjavastaticdockers390xmusl: mkdir -p java/target - docker run --rm --name rocksdb_linux_s390x-musl-be --platform linux/s390x --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) evolvedbinary/rocksjava:alpine3_s390x-be /rocksdb-host/java/crossbuild/docker-build-linux.sh + docker run --rm --name rocksdb_linux_s390x-musl-be --platform linux/s390x --attach stdin --attach stdout --attach stderr --volume $(HOME)/.m2:/root/.m2:ro --volume `pwd`:/rocksdb-host:ro --volume /rocksdb-local-build --volume `pwd`/java/target:/rocksdb-java-target --env DEBUG_LEVEL=$(DEBUG_LEVEL) --env J=$(J) $(DOCKER_IMAGE_ALPINE3_S390X) /rocksdb-host/java/crossbuild/docker-build-linux.sh rocksdbjavastaticpublish: rocksdbjavastaticrelease rocksdbjavastaticpublishcentral From 29d1105c13ebf79e9b5d5ce954b43de24d09e5e1 Mon Sep 17 00:00:00 2001 From: mike-evolved Date: Thu, 4 Dec 2025 09:15:48 -0600 Subject: [PATCH 3/4] Use power8 for portable powerPC builds --- build_tools/build_detect_platform | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/build_tools/build_detect_platform b/build_tools/build_detect_platform index ff7ceeece8d8..f9ba7f6701b0 100755 --- a/build_tools/build_detect_platform +++ b/build_tools/build_detect_platform @@ -652,7 +652,9 @@ if [ "$PORTABLE" == "" ] || [ "$PORTABLE" == 0 ]; then if test -n "`echo $TARGET_ARCHITECTURE | grep ^ppc64`"; then # Tune for this POWER processor, treating '+' models as base models POWER=`LD_SHOW_AUXV=1 /bin/true | grep AT_PLATFORM | grep -E -o power[0-9]+` - COMMON_FLAGS="$COMMON_FLAGS -mcpu=$POWER -mtune=$POWER " + if [ -n "$POWER" ]; then + COMMON_FLAGS="$COMMON_FLAGS -mcpu=$POWER -mtune=$POWER " + fi elif test -n "`echo $TARGET_ARCHITECTURE | grep -e^arm -e^aarch64`"; then # TODO: Handle this with approprite options. COMMON_FLAGS="$COMMON_FLAGS" @@ -679,7 +681,10 @@ if [ "$PORTABLE" == "" ] || [ "$PORTABLE" == 0 ]; then else # PORTABLE specified if [ "$PORTABLE" == 1 ]; then - if test -n "`echo $TARGET_ARCHITECTURE | grep ^s390x`"; then + if test -n "`echo $TARGET_ARCHITECTURE | grep ^ppc64`"; then + # For portable powerPC builds, use generic power8 + COMMON_FLAGS="$COMMON_FLAGS -mcpu=power8 -mtune=power8 " + elif test -n "`echo $TARGET_ARCHITECTURE | grep ^s390x`"; then COMMON_FLAGS="$COMMON_FLAGS -march=z196 " elif test -n "`echo $TARGET_ARCHITECTURE | grep ^riscv64`"; then COMMON_FLAGS="$COMMON_FLAGS -march=rv64gc" From 6956b3767667185fe1413e0d9d145e0157add2b2 Mon Sep 17 00:00:00 2001 From: mike-evolved Date: Tue, 9 Dec 2025 13:58:13 -0600 Subject: [PATCH 4/4] zlib.net migrated to openresty --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 992393115e2b..05b2c07a7ca7 100644 --- a/Makefile +++ b/Makefile @@ -2082,7 +2082,7 @@ SHA256_CMD = sha256sum ZLIB_VER ?= 1.3.1 ZLIB_SHA256 ?= 9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23 -ZLIB_DOWNLOAD_BASE ?= http://zlib.net +ZLIB_DOWNLOAD_BASE ?= https://github.com/madler/zlib/releases/download/v$(ZLIB_VER) BZIP2_VER ?= 1.0.8 BZIP2_SHA256 ?= ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269 BZIP2_DOWNLOAD_BASE ?= http://sourceware.org/pub/bzip2