This is an automated email from the ASF dual-hosted git repository.
gavinchou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 6a38371759d [chore](cloud) add build fdb script (#60877)
6a38371759d is described below
commit 6a38371759da8073afdaade58481e37ef8fe69d3
Author: walter <[email protected]>
AuthorDate: Thu Mar 5 15:58:35 2026 +0800
[chore](cloud) add build fdb script (#60877)
---
cloud/script/build_fdb.sh | 384 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 384 insertions(+)
diff --git a/cloud/script/build_fdb.sh b/cloud/script/build_fdb.sh
new file mode 100644
index 00000000000..89f8dc887c7
--- /dev/null
+++ b/cloud/script/build_fdb.sh
@@ -0,0 +1,384 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#!/bin/bash
+
+set -e
+
+# Default values
+VERSION="7.1.55"
+BUILD_DIR="./build_output"
+DOCKER_IMAGE="foundationdb/build:centos7-latest"
+REPO_URL="https://github.com/apple/foundationdb.git"
+SRC_DIR="./foundationdb"
+UPDATE_REPO=true
+
+# Feature flags (default: all enabled except AWS and Azure backup)
+BUILD_AWS_BACKUP=false
+BUILD_AZURE_BACKUP=false
+USE_JEMALLOC=true
+USE_LTO=true
+BUILD_DOCUMENTATION=true
+WITH_ROCKSDB=true
+WITH_GRPC=true
+FULL_DEBUG_SYMBOLS=true
+
+# Binding flags (default: only C and Python enabled)
+BUILD_C_BINDING=true
+BUILD_PYTHON_BINDING=true
+BUILD_JAVA_BINDING=false
+BUILD_GO_BINDING=false
+BUILD_SWIFT_BINDING=false
+BUILD_RUBY_BINDING=false
+
+# Colors for output
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+BLUE='\033[0;34m'
+NC='\033[0m' # No Color
+
+# Print help message
+show_help() {
+ cat << EOF
+Usage: $0 [OPTIONS]
+
+Build FoundationDB using Docker.
+
+Options:
+ -v VERSION FoundationDB version/tag to build (default: 7.1.55)
+ -o BUILD_DIR Output directory for build artifacts (default:
./build_output)
+ -i DOCKER_IMAGE Docker image to use (default:
foundationdb/build:centos7-latest)
+ -s SRC_DIR Source directory (default: ./foundationdb)
+ -u Skip updating repository
+
+Backup Options:
+ --aws Enable AWS backup support
+ --azure Enable Azure backup support
+
+Build Options:
+ --no-jemalloc Disable jemalloc (default: enabled)
+ --no-lto Disable Link Time Optimization (default: enabled)
+ --no-debug-syms Disable full debug symbols (default: enabled)
+ --no-docs Disable documentation (default: enabled)
+ --no-rocksdb Disable RocksDB support (default: enabled)
+ --no-grpc Disable gRPC support (default: enabled)
+
+Binding Options (default: C and Python enabled, others disabled):
+ --java Enable Java binding
+ --go Enable Go binding
+ --swift Enable Swift binding
+ --ruby Enable Ruby binding
+ --all-bindings Enable all bindings
+ --minimal-bindings Enable only C binding
+
+Environment Variables:
+ FDB_ENABLE_JAVA Enable Java binding (true/false)
+ FDB_ENABLE_GO Enable Go binding (true/false)
+ FDB_ENABLE_SWIFT Enable Swift binding (true/false)
+ FDB_ENABLE_RUBY Enable Ruby binding (true/false)
+
+General:
+ -h Show this help message
+
+Examples:
+ $0 # Build with all features (C +
Python bindings)
+ $0 -v 7.3.0 # Build specific version
+ $0 -v 7.3.0 --aws --azure # Enable AWS + Azure backup
+ $0 --java --go --swift # Enable additional bindings
+ $0 --all-bindings # Enable all bindings
+ $0 --no-grpc --no-rocksdb # Disable specific features
+ $0 --minimal-bindings # Only C binding
+ FDB_ENABLE_JAVA=true $0 # Enable Java via env var
+
+EOF
+}
+
+# Parse command line arguments
+while [[ $# -gt 0 ]]; do
+ case $1 in
+ -v)
+ VERSION="$2"
+ shift 2
+ ;;
+ -o)
+ BUILD_DIR="$2"
+ shift 2
+ ;;
+ -i)
+ DOCKER_IMAGE="$2"
+ shift 2
+ ;;
+ -s)
+ SRC_DIR="$2"
+ shift 2
+ ;;
+ -u)
+ UPDATE_REPO=false
+ shift
+ ;;
+ --aws)
+ BUILD_AWS_BACKUP=true
+ shift
+ ;;
+ --azure)
+ BUILD_AZURE_BACKUP=true
+ shift
+ ;;
+ --no-jemalloc)
+ USE_JEMALLOC=false
+ shift
+ ;;
+ --no-lto)
+ USE_LTO=false
+ shift
+ ;;
+ --no-debug-syms)
+ FULL_DEBUG_SYMBOLS=false
+ shift
+ ;;
+ --no-docs)
+ BUILD_DOCUMENTATION=false
+ shift
+ ;;
+ --no-rocksdb)
+ WITH_ROCKSDB=false
+ shift
+ ;;
+ --no-grpc)
+ WITH_GRPC=false
+ shift
+ ;;
+ --debug-syms)
+ FULL_DEBUG_SYMBOLS=true
+ shift
+ ;;
+ --docs)
+ BUILD_DOCUMENTATION=true
+ shift
+ ;;
+ --rocksdb)
+ WITH_ROCKSDB=true
+ shift
+ ;;
+ --grpc)
+ WITH_GRPC=true
+ shift
+ ;;
+ --java)
+ BUILD_JAVA_BINDING=true
+ shift
+ ;;
+ --go)
+ BUILD_GO_BINDING=true
+ shift
+ ;;
+ --swift)
+ BUILD_SWIFT_BINDING=true
+ shift
+ ;;
+ --ruby)
+ BUILD_RUBY_BINDING=true
+ shift
+ ;;
+ --all-bindings)
+ BUILD_JAVA_BINDING=true
+ BUILD_GO_BINDING=true
+ BUILD_SWIFT_BINDING=true
+ BUILD_RUBY_BINDING=true
+ shift
+ ;;
+ --minimal-bindings)
+ BUILD_PYTHON_BINDING=false
+ shift
+ ;;
+ -h)
+ show_help
+ exit 0
+ ;;
+ *)
+ echo -e "${RED}Unknown option: $1${NC}" >&2
+ show_help
+ exit 1
+ ;;
+ esac
+done
+
+# Override bindings from environment variables
+if [ "$FDB_ENABLE_JAVA" = "true" ]; then
+ BUILD_JAVA_BINDING=true
+fi
+if [ "$FDB_ENABLE_GO" = "true" ]; then
+ BUILD_GO_BINDING=true
+fi
+if [ "$FDB_ENABLE_SWIFT" = "true" ]; then
+ BUILD_SWIFT_BINDING=true
+fi
+if [ "$FDB_ENABLE_RUBY" = "true" ]; then
+ BUILD_RUBY_BINDING=true
+fi
+
+# Build CMAKE options string
+CMAKE_OPTIONS=""
+
+# Base options
+CMAKE_OPTIONS+=" -DCMAKE_BUILD_TYPE=Release"
+CMAKE_OPTIONS+=" -DFDB_RELEASE=ON"
+# CMAKE_OPTIONS+=" -DFORCE_ALL_COMPONENTS=ON"
+
+# Optional features
+if [ "$USE_JEMALLOC" = true ]; then
+ CMAKE_OPTIONS+=" -DUSE_JEMALLOC=ON"
+else
+ CMAKE_OPTIONS+=" -DUSE_JEMALLOC=OFF"
+fi
+
+if [ "$USE_LTO" = true ]; then
+ CMAKE_OPTIONS+=" -DUSE_LTO=ON"
+else
+ CMAKE_OPTIONS+=" -DUSE_LTO=OFF"
+fi
+
+if [ "$FULL_DEBUG_SYMBOLS" = true ]; then
+ CMAKE_OPTIONS+=" -DFULL_DEBUG_SYMBOLS=ON"
+fi
+
+if [ "$BUILD_DOCUMENTATION" = true ]; then
+ CMAKE_OPTIONS+=" -DBUILD_DOCUMENTATION=ON"
+fi
+
+if [ "$WITH_ROCKSDB" = true ]; then
+ CMAKE_OPTIONS+=" -DWITH_ROCKSDB=ON"
+fi
+
+if [ "$WITH_GRPC" = true ]; then
+ CMAKE_OPTIONS+=" -DWITH_GRPC=ON"
+fi
+
+# Backup options
+if [ "$BUILD_AWS_BACKUP" = true ]; then
+ CMAKE_OPTIONS+=" -DBUILD_AWS_BACKUP=ON"
+fi
+
+if [ "$BUILD_AZURE_BACKUP" = true ]; then
+ CMAKE_OPTIONS+=" -DBUILD_AZURE_BACKUP=ON"
+fi
+
+# Binding options
+if [ "$BUILD_C_BINDING" = true ]; then
+ CMAKE_OPTIONS+=" -DBUILD_C_BINDING=ON"
+fi
+
+if [ "$BUILD_PYTHON_BINDING" = true ]; then
+ CMAKE_OPTIONS+=" -DBUILD_PYTHON_BINDING=ON"
+fi
+
+if [ "$BUILD_JAVA_BINDING" = true ]; then
+ CMAKE_OPTIONS+=" -DBUILD_JAVA_BINDING=ON"
+fi
+
+if [ "$BUILD_GO_BINDING" = true ]; then
+ CMAKE_OPTIONS+=" -DBUILD_GO_BINDING=ON"
+fi
+
+if [ "$BUILD_SWIFT_BINDING" = true ]; then
+ CMAKE_OPTIONS+=" -DBUILD_SWIFT_BINDING=ON"
+fi
+
+if [ "$BUILD_RUBY_BINDING" = true ]; then
+ CMAKE_OPTIONS+=" -DBUILD_RUBY_BINDING=ON"
+fi
+
+# Print configuration
+echo -e "${GREEN}=== FoundationDB Build Configuration ===${NC}"
+echo -e "${BLUE}Basic Settings:${NC}"
+echo " Version: $VERSION"
+echo " Build Dir: $BUILD_DIR"
+echo " Source Dir: $SRC_DIR"
+echo " Docker Image: $DOCKER_IMAGE"
+echo " Update Repo: $UPDATE_REPO"
+echo ""
+
+echo -e "${BLUE}Enabled Features:${NC}"
+echo " JEMALLOC: $USE_JEMALLOC"
+echo " LTO: $USE_LTO"
+echo " Debug Symbols: $FULL_DEBUG_SYMBOLS"
+echo " Documentation: $BUILD_DOCUMENTATION"
+echo " RocksDB: $WITH_ROCKSDB"
+echo " gRPC: $WITH_GRPC"
+echo " AWS Backup: $BUILD_AWS_BACKUP"
+echo " Azure Backup: $BUILD_AZURE_BACKUP"
+echo ""
+
+echo -e "${BLUE}Enabled Bindings:${NC}"
+echo " C: $BUILD_C_BINDING"
+echo " Python: $BUILD_PYTHON_BINDING"
+echo " Java: $BUILD_JAVA_BINDING"
+echo " Go: $BUILD_GO_BINDING"
+echo " Swift: $BUILD_SWIFT_BINDING"
+echo " Ruby: $BUILD_RUBY_BINDING"
+echo ""
+
+echo -e "${BLUE}CMake Options:${NC}"
+echo "$CMAKE_OPTIONS" | tr ' ' '\n' | grep -v '^$' | sed 's/^/ /'
+echo ""
+
+# Pull Docker image
+echo -e "${YELLOW}Pulling Docker image...${NC}"
+docker pull "$DOCKER_IMAGE"
+
+# Clone or update repository
+if [ -d "$SRC_DIR" ]; then
+ echo -e "${YELLOW}Repository exists...${NC}"
+ if [ "$UPDATE_REPO" = true ]; then
+ echo "Updating repository..."
+ cd "$SRC_DIR"
+ git fetch origin
+ git reset --hard origin/main
+ cd ..
+ else
+ echo "Skipping repository update (-u flag set)"
+ fi
+else
+ echo -e "${YELLOW}Cloning repository...${NC}"
+ git clone "$REPO_URL" "$SRC_DIR"
+fi
+
+# Checkout specific version/tag
+echo -e "${YELLOW}Checking out version: $VERSION${NC}"
+cd "$SRC_DIR"
+git checkout "$VERSION"
+cd ..
+
+# Create build output directory
+mkdir -p "$BUILD_DIR"
+
+# Run build in container
+echo -e "${YELLOW}Starting build...${NC}"
+docker run --rm \
+ -v "$(pwd)/$SRC_DIR:/foundationdb/src:ro" \
+ -v "$(pwd)/$BUILD_DIR:/foundationdb/build" \
+ "$DOCKER_IMAGE" \
+ bash -c "
+ mkdir -p /foundationdb/build && \
+ cd /foundationdb/build && \
+ CC=clang CXX=clang++ LD=lld cmake -B build -D USE_LD=LLD -D
USE_LIBCXX=1 -G Ninja $CMAKE_OPTIONS /foundationdb/src && \
+ ninja -C build
+ "
+
+echo ""
+echo -e "${GREEN}=== Build Complete! ===${NC}"
+echo "Artifacts location: $(pwd)/$BUILD_DIR"
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]