Skip to content

Commit a08756c

Browse files
author
yangxingxiang
committed
Add build.sh surpport Default local build and Ubuntu 22.04 Docker build and Ubuntu 20.04 Docker build
1 parent 3a30c53 commit a08756c

File tree

4 files changed

+193
-8
lines changed

4 files changed

+193
-8
lines changed

build.sh

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
#!/bin/bash
2+
set -e
3+
4+
# Default build config
5+
BUILD_TYPE="local"
6+
UBUNTU_VERSION="2204"
7+
BUILD_DIR="build-local"
8+
9+
# Parse arguments
10+
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
11+
cat <<EOF
12+
HF3FS Build System
13+
14+
Usage: $0 [OPTION]
15+
16+
Options:
17+
docker-ubuntu2204 Build using Ubuntu 22.04 Docker container
18+
docker-ubuntu2004 Build using Ubuntu 20.04 Docker container
19+
-h, --help Show this help message
20+
21+
Environment:
22+
- Local builds use host system tools with clang-14
23+
- Docker builds create isolated environments with version-specific toolchains
24+
- Build artifacts are stored in separate directories:
25+
- build-local/ : Default local build
26+
- build-docker-ubuntu2204/ : Ubuntu 22.04 Docker build
27+
- build-docker-ubuntu2004/ : Ubuntu 20.04 Docker build
28+
29+
Examples:
30+
./build.sh # Local build with clang-14
31+
./build.sh docker-ubuntu2204 # Docker build with Ubuntu 22.04
32+
./build.sh docker-ubuntu2004 # Docker build with Ubuntu 20.04
33+
34+
EOF
35+
exit 0
36+
elif [[ "$1" == "docker-ubuntu2204" ]]; then
37+
BUILD_TYPE="docker"
38+
BUILD_DIR="build-docker-ubuntu2204"
39+
elif [[ "$1" == "docker-ubuntu2004" ]]; then
40+
BUILD_TYPE="docker"
41+
UBUNTU_VERSION="2004"
42+
BUILD_DIR="build-docker-ubuntu2004"
43+
elif [[ -n "$1" ]]; then
44+
echo "Error: Invalid option '$1'"
45+
echo "Try './build.sh --help' for usage information"
46+
exit 1
47+
fi
48+
49+
# Common build parameters
50+
CPU_CORES=$(nproc)
51+
CMAKE_FLAGS=(
52+
-DCMAKE_CXX_COMPILER=clang++-14
53+
-DCMAKE_C_COMPILER=clang-14
54+
-DCMAKE_BUILD_TYPE=RelWithDebInfo
55+
)
56+
57+
local_build() {
58+
echo "Starting local build..."
59+
mkdir -p ${BUILD_DIR} && cd ${BUILD_DIR}
60+
CC=clang-14 CXX=clang++-14 cmake "${CMAKE_FLAGS[@]}" ..
61+
make -j${CPU_CORES}
62+
}
63+
64+
docker_build() {
65+
echo "Starting Docker build for Ubuntu ${UBUNTU_VERSION}..."
66+
DOCKER_IMAGE="hf3fs-dev-ubuntu${UBUNTU_VERSION}"
67+
docker build -t ${DOCKER_IMAGE} -f dockerfile/ubuntu${UBUNTU_VERSION}/dev.dockerfile .
68+
docker run --rm \
69+
-v "${PWD}:/build/src" \
70+
--cpus="${CPU_CORES}" \
71+
-e BUILD_JOBS="${CPU_CORES}" \
72+
${DOCKER_IMAGE} /bin/bash -c "
73+
cd /build/src && \
74+
mkdir -p ${BUILD_DIR} && \
75+
cd ${BUILD_DIR} && \
76+
cmake .. ${CMAKE_FLAGS[@]} && \
77+
make -j\${BUILD_JOBS}
78+
"
79+
}
80+
81+
# Execute build
82+
if [[ "${BUILD_TYPE}" == "docker" ]]; then
83+
docker_build
84+
else
85+
local_build
86+
fi

dockerfile/dev.dockerfile

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,19 @@ RUN apt-get update &&\
2424
apt-get clean &&\
2525
rm -rf /var/lib/apt/lists/*
2626

27-
ARG TARGETARCH
2827
ARG FDB_VERSION=7.3.63
29-
ARG FDB_ARCH_SUFFIX
30-
RUN case "${TARGETARCH}" in \
31-
amd64) FDB_ARCH_SUFFIX="amd64" ;; \
32-
arm64) FDB_ARCH_SUFFIX="aarch64" ;; \
33-
*) echo "Unsupported architecture: ${TARGETARCH}"; exit 1 ;; \
28+
RUN FDB_ARCH_SUFFIX=$(dpkg --print-architecture) && \
29+
case "${FDB_ARCH_SUFFIX}" in \
30+
amd64) ;; \
31+
arm64) FDB_ARCH_SUFFIX="aarch64" ;; \
32+
*) echo "Unsupported architecture: ${FDB_ARCH_SUFFIX}"; exit 1 ;; \
3433
esac && \
3534
FDB_CLIENT_URL="https://github.com/apple/foundationdb/releases/download/${FDB_VERSION}/foundationdb-clients_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb" && \
3635
FDB_SERVER_URL="https://github.com/apple/foundationdb/releases/download/${FDB_VERSION}/foundationdb-server_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb" && \
3736
wget -q "${FDB_CLIENT_URL}" && \
3837
wget -q "${FDB_SERVER_URL}" && \
3938
dpkg -i foundationdb-clients_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb && \
40-
dpkg -i foundationdb-server_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb && \
39+
# dpkg -i foundationdb-server_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb && \
4140
rm foundationdb-clients_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb foundationdb-server_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb
4241

4342
ARG LIBFUSE_VERSION=3.16.2
@@ -48,4 +47,4 @@ RUN wget -O- ${LIBFUSE_DOWNLOAD_URL} |\
4847
mkdir build && cd build &&\
4948
meson setup .. && meson configure -D default_library=both &&\
5049
ninja && ninja install &&\
51-
rm -f -r /tmp/fuse-${LIBFUSE_VERSION}*
50+
rm -f -r /tmp/fuse-${LIBFUSE_VERSION}*
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
FROM ubuntu:20.04
2+
3+
SHELL ["/bin/bash", "-euo", "pipefail", "-c"]
4+
RUN apt-get update &&\
5+
apt-get install -y --no-install-recommends \
6+
git wget ca-certificates \
7+
clang-format-14 clang-14 clang-tidy-14 lld-14 \
8+
build-essential meson libclang-rt-14-dev gcc-10 g++-10 cmake rustc cargo \
9+
google-perftools \
10+
libaio-dev \
11+
libboost1.71-all-dev \
12+
libdouble-conversion-dev \
13+
libdwarf-dev \
14+
libgflags-dev \
15+
libgmock-dev \
16+
libgoogle-glog-dev \
17+
libgoogle-perftools-dev \
18+
libgtest-dev \
19+
liblz4-dev \
20+
liblzma-dev \
21+
libssl-dev \
22+
libunwind-dev \
23+
libuv1-dev &&\
24+
apt-get clean &&\
25+
rm -rf /var/lib/apt/lists/*
26+
27+
ARG FDB_VERSION=7.3.63
28+
RUN FDB_ARCH_SUFFIX=$(dpkg --print-architecture) && \
29+
case "${FDB_ARCH_SUFFIX}" in \
30+
amd64) ;; \
31+
arm64) FDB_ARCH_SUFFIX="aarch64" ;; \
32+
*) echo "Unsupported architecture: ${FDB_ARCH_SUFFIX}"; exit 1 ;; \
33+
esac && \
34+
FDB_CLIENT_URL="https://github.com/apple/foundationdb/releases/download/${FDB_VERSION}/foundationdb-clients_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb" && \
35+
FDB_SERVER_URL="https://github.com/apple/foundationdb/releases/download/${FDB_VERSION}/foundationdb-server_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb" && \
36+
wget -q "${FDB_CLIENT_URL}" && \
37+
wget -q "${FDB_SERVER_URL}" && \
38+
dpkg -i foundationdb-clients_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb && \
39+
# dpkg -i foundationdb-server_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb && \
40+
rm foundationdb-clients_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb foundationdb-server_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb
41+
42+
ARG LIBFUSE_VERSION=3.16.2
43+
ARG LIBFUSE_DOWNLOAD_URL=https://github.com/libfuse/libfuse/releases/download/fuse-${LIBFUSE_VERSION}/fuse-${LIBFUSE_VERSION}.tar.gz
44+
RUN wget -O- ${LIBFUSE_DOWNLOAD_URL} |\
45+
tar -xzvf - -C /tmp &&\
46+
cd /tmp/fuse-${LIBFUSE_VERSION} &&\
47+
mkdir build && cd build &&\
48+
meson setup .. && meson configure -D default_library=both &&\
49+
ninja && ninja install &&\
50+
rm -f -r /tmp/fuse-${LIBFUSE_VERSION}*
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
FROM ubuntu:22.04
2+
3+
SHELL ["/bin/bash", "-euo", "pipefail", "-c"]
4+
RUN apt-get update &&\
5+
apt-get install -y --no-install-recommends \
6+
git wget ca-certificates \
7+
clang-format-14 clang-14 clang-tidy-14 lld-14 \
8+
build-essential meson gcc-12 g++-12 cmake rustc cargo \
9+
google-perftools \
10+
libaio-dev \
11+
libboost-all-dev \
12+
libdouble-conversion-dev \
13+
libdwarf-dev \
14+
libgflags-dev \
15+
libgmock-dev \
16+
libgoogle-glog-dev \
17+
libgoogle-perftools-dev \
18+
libgtest-dev \
19+
liblz4-dev \
20+
liblzma-dev \
21+
libssl-dev \
22+
libunwind-dev \
23+
libuv1-dev &&\
24+
apt-get clean &&\
25+
rm -rf /var/lib/apt/lists/*
26+
27+
ARG FDB_VERSION=7.3.63
28+
RUN FDB_ARCH_SUFFIX=$(dpkg --print-architecture) && \
29+
case "${FDB_ARCH_SUFFIX}" in \
30+
amd64) ;; \
31+
arm64) FDB_ARCH_SUFFIX="aarch64" ;; \
32+
*) echo "Unsupported architecture: ${FDB_ARCH_SUFFIX}"; exit 1 ;; \
33+
esac && \
34+
FDB_CLIENT_URL="https://github.com/apple/foundationdb/releases/download/${FDB_VERSION}/foundationdb-clients_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb" && \
35+
FDB_SERVER_URL="https://github.com/apple/foundationdb/releases/download/${FDB_VERSION}/foundationdb-server_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb" && \
36+
wget -q "${FDB_CLIENT_URL}" && \
37+
wget -q "${FDB_SERVER_URL}" && \
38+
dpkg -i foundationdb-clients_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb && \
39+
# dpkg -i foundationdb-server_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb && \
40+
rm foundationdb-clients_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb foundationdb-server_${FDB_VERSION}-1_${FDB_ARCH_SUFFIX}.deb
41+
42+
ARG LIBFUSE_VERSION=3.16.2
43+
ARG LIBFUSE_DOWNLOAD_URL=https://github.com/libfuse/libfuse/releases/download/fuse-${LIBFUSE_VERSION}/fuse-${LIBFUSE_VERSION}.tar.gz
44+
RUN wget -O- ${LIBFUSE_DOWNLOAD_URL} |\
45+
tar -xzvf - -C /tmp &&\
46+
cd /tmp/fuse-${LIBFUSE_VERSION} &&\
47+
mkdir build && cd build &&\
48+
meson setup .. && meson configure -D default_library=both &&\
49+
ninja && ninja install &&\
50+
rm -f -r /tmp/fuse-${LIBFUSE_VERSION}*

0 commit comments

Comments
 (0)