Skip to content

Commit 5dd7158

Browse files
authored
Add mold linker to build images (#49)
This change adds https://github.com/rui314/mold/ to build images. It will help us to build `rippled` faster.
1 parent 03dcded commit 5dd7158

File tree

9 files changed

+57
-0
lines changed

9 files changed

+57
-0
lines changed

.github/workflows/debian.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ env:
2222
CONAN_VERSION: 2.19.1
2323
GCOVR_VERSION: 8.3
2424
CMAKE_VERSION: 3.31.6
25+
MOLD_VERSION: 2.40.4
2526
FALLBACK_GCC: 12
2627
FALLBACK_CLANG: 16
2728

@@ -155,6 +156,7 @@ jobs:
155156
GCC_VERSION=${{ matrix.os.compiler_name == 'gcc' && matrix.os.compiler_version || env.FALLBACK_GCC }}
156157
GCOVR_VERSION=${{ env.GCOVR_VERSION }}
157158
CMAKE_VERSION=${{ env.CMAKE_VERSION }}
159+
MOLD_VERSION=${{ env.MOLD_VERSION }}
158160
DEBIAN_VERSION=${{ matrix.os.release }}
159161
BASE_IMAGE=${{ env.CONTAINER_IMAGE_GCC && format('{0}@{1}', env.CONTAINER_IMAGE_GCC, steps.build-gcc.outputs.digest) || format('gcc:{0}-{1}', matrix.os.compiler_version, matrix.os.release) }}
160162
context: .

.github/workflows/rhel.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ env:
2323
CONAN_VERSION: 2.19.1
2424
GCOVR_VERSION: 8.3
2525
CMAKE_VERSION: 3.31.6
26+
MOLD_VERSION: 2.40.4
2627

2728
jobs:
2829
# Build the Docker image for Red Hat Enterprise Linux using different versions
@@ -115,6 +116,7 @@ jobs:
115116
GCC_VERSION=${{ matrix.os.compiler_version }}
116117
GCOVR_VERSION=${{ env.GCOVR_VERSION }}
117118
CMAKE_VERSION=${{ env.CMAKE_VERSION }}
119+
MOLD_VERSION=${{ env.MOLD_VERSION }}
118120
RHEL_VERSION=${{ matrix.os.release }}
119121
context: .
120122
file: docker/rhel/Dockerfile

.github/workflows/ubuntu.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ env:
2222
CONAN_VERSION: 2.19.1
2323
GCOVR_VERSION: 8.3
2424
CMAKE_VERSION: 3.31.6
25+
MOLD_VERSION: 2.40.4
2526
FALLBACK_GCC: 12
2627
FALLBACK_CLANG: 16
2728

@@ -111,6 +112,7 @@ jobs:
111112
GCC_VERSION=${{ matrix.os.compiler_name == 'gcc' && matrix.os.compiler_version || env.FALLBACK_GCC }}
112113
GCOVR_VERSION=${{ env.GCOVR_VERSION }}
113114
CMAKE_VERSION=${{ env.CMAKE_VERSION }}
115+
MOLD_VERSION=${{ env.MOLD_VERSION }}
114116
UBUNTU_VERSION=${{ matrix.os.release }}
115117
context: .
116118
file: docker/ubuntu/Dockerfile

docker/debian/Dockerfile

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ pkgs+=(git) # Required build tool.
4646
pkgs+=(gpg) # Dependency for tools requiring signing or encrypting/decrypting.
4747
pkgs+=(gpg-agent) # Dependency for tools requiring signing or encrypting/decrypting.
4848
pkgs+=(jq) # JSON manipulation.
49+
pkgs+=(libatomic1) # Required by mold linker.
4950
pkgs+=(libc6-dev) # Required build tool.
5051
pkgs+=(ninja-build) # Required build tool.
5152
pkgs+=(python3-venv) # Python environment management tool.
@@ -71,6 +72,17 @@ RUN pip install --no-cache \
7172
gcovr==${GCOVR_VERSION} \
7273
cmake==${CMAKE_VERSION}
7374

75+
# Install mold https://github.com/rui314/mold
76+
ARG MOLD_VERSION
77+
78+
RUN <<EOF
79+
ARCH=$(uname -m)
80+
wget -O mold.tar.gz https://github.com/rui314/mold/releases/download/v${MOLD_VERSION}/mold-${MOLD_VERSION}-${ARCH}-linux.tar.gz
81+
tar -xzf mold.tar.gz --strip-components=1 -C /usr/local
82+
rm mold.tar.gz
83+
mold --version
84+
EOF
85+
7486
# ====================== GCC IMAGE ======================
7587
FROM base AS gcc
7688

docker/debian/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ GCC_VERSION=12
6969
CONAN_VERSION=2.19.1
7070
GCOVR_VERSION=8.3
7171
CMAKE_VERSION=3.31.6
72+
MOLD_VERSION=2.40.4
7273
CONTAINER_IMAGE=xrplf/ci/debian-${DEBIAN_VERSION}:gcc-${GCC_VERSION}
7374

7475
docker buildx build . \
@@ -81,6 +82,7 @@ docker buildx build . \
8182
--build-arg GCC_VERSION=${GCC_VERSION} \
8283
--build-arg GCOVR_VERSION=${GCOVR_VERSION} \
8384
--build-arg CMAKE_VERSION=${CMAKE_VERSION} \
85+
--build-arg MOLD_VERSION=${MOLD_VERSION} \
8486
--tag ${CONTAINER_REGISTRY}/${CONTAINER_IMAGE}
8587
```
8688

@@ -93,6 +95,7 @@ GCC_VERSION=12
9395
CONAN_VERSION=2.19.1
9496
GCOVR_VERSION=8.3
9597
CMAKE_VERSION=3.31.6
98+
MOLD_VERSION=2.40.4
9699
BASE_IMAGE=localhost.localdomain/gcc:12-bullseye
97100
CONTAINER_IMAGE=xrplf/ci/debian-${DEBIAN_VERSION}:gcc-${GCC_VERSION}
98101

@@ -106,6 +109,7 @@ docker buildx build . \
106109
--build-arg GCC_VERSION=${GCC_VERSION} \
107110
--build-arg GCOVR_VERSION=${GCOVR_VERSION} \
108111
--build-arg CMAKE_VERSION=${CMAKE_VERSION} \
112+
--build-arg MOLD_VERSION=${MOLD_VERSION} \
109113
--build-arg BASE_IMAGE=${BASE_IMAGE} \
110114
--tag ${CONTAINER_REGISTRY}/${CONTAINER_IMAGE}
111115
```
@@ -121,6 +125,7 @@ CLANG_VERSION=17
121125
CONAN_VERSION=2.19.1
122126
GCOVR_VERSION=8.3
123127
CMAKE_VERSION=3.31.6
128+
MOLD_VERSION=2.40.4
124129
CONTAINER_IMAGE=xrplf/ci/debian-${DEBIAN_VERSION}:clang-${CLANG_VERSION}
125130

126131
docker buildx build . \
@@ -133,6 +138,7 @@ docker buildx build . \
133138
--build-arg DEBIAN_VERSION=${DEBIAN_VERSION} \
134139
--build-arg GCOVR_VERSION=${GCOVR_VERSION} \
135140
--build-arg CMAKE_VERSION=${CMAKE_VERSION} \
141+
--build-arg MOLD_VERSION=${MOLD_VERSION} \
136142
--tag ${CONTAINER_REGISTRY}/${CONTAINER_IMAGE}
137143
```
138144

docker/rhel/Dockerfile

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# ====================== BASE IMAGE ======================
22
ARG RHEL_VERSION
3+
34
FROM registry.redhat.io/ubi${RHEL_VERSION%.*}/ubi:${RHEL_VERSION} AS base
45

56
# Use Bash as the default shell for RUN commands, using the options
@@ -16,6 +17,7 @@ pkgs+=(git) # Required build tool.
1617
pkgs+=(gpg) # Dependency for tools requiring signing or encrypting/decrypting.
1718
pkgs+=(gnupg2) # Dependency for tools requiring signing or encrypting/decrypting.
1819
pkgs+=(jq) # JSON manipulation.
20+
pkgs+=(libatomic) # Required by mold linker.
1921
pkgs+=(libstdc++-static) # Required to statically link libraries into rippled.
2022
pkgs+=(ninja-build) # Required build tool.
2123
pkgs+=(perl-FindBin) # Required to compile OpenSSL.
@@ -63,6 +65,17 @@ RUN pip install --no-cache \
6365
gcovr==${GCOVR_VERSION} \
6466
cmake==${CMAKE_VERSION}
6567

68+
# Install mold https://github.com/rui314/mold
69+
ARG MOLD_VERSION
70+
71+
RUN <<EOF
72+
ARCH=$(uname -m)
73+
wget -O mold.tar.gz https://github.com/rui314/mold/releases/download/v${MOLD_VERSION}/mold-${MOLD_VERSION}-${ARCH}-linux.tar.gz
74+
tar -xzf mold.tar.gz --strip-components=1 -C /usr/local
75+
rm mold.tar.gz
76+
mold --version
77+
EOF
78+
6679
# ====================== GCC IMAGE ======================
6780
FROM base AS gcc
6881

docker/rhel/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ GCC_VERSION=13
6565
CONAN_VERSION=2.19.1
6666
GCOVR_VERSION=8.3
6767
CMAKE_VERSION=3.31.6
68+
MOLD_VERSION=2.40.4
6869
CONTAINER_IMAGE=xrplf/ci/rhel-${RHEL_VERSION}:gcc-${GCC_VERSION}
6970

7071
docker buildx build . \
@@ -76,6 +77,7 @@ docker buildx build . \
7677
--build-arg GCC_VERSION=${GCC_VERSION} \
7778
--build-arg GCOVR_VERSION=${GCOVR_VERSION} \
7879
--build-arg CMAKE_VERSION=${CMAKE_VERSION} \
80+
--build-arg MOLD_VERSION=${MOLD_VERSION} \
7981
--build-arg RHEL_VERSION=${RHEL_VERSION} \
8082
--tag ${CONTAINER_REGISTRY}/${CONTAINER_IMAGE}
8183
```
@@ -90,6 +92,7 @@ RHEL_VERSION=9.6
9092
CONAN_VERSION=2.19.1
9193
GCOVR_VERSION=8.3
9294
CMAKE_VERSION=3.31.6
95+
MOLD_VERSION=2.40.4
9396
CONTAINER_IMAGE=xrplf/ci/rhel-${RHEL_VERSION}:clang-any
9497

9598
docker buildx build . \
@@ -100,6 +103,7 @@ docker buildx build . \
100103
--build-arg CONAN_VERSION=${CONAN_VERSION} \
101104
--build-arg GCOVR_VERSION=${GCOVR_VERSION} \
102105
--build-arg CMAKE_VERSION=${CMAKE_VERSION} \
106+
--build-arg MOLD_VERSION=${MOLD_VERSION} \
103107
--build-arg RHEL_VERSION=${RHEL_VERSION} \
104108
--tag ${CONTAINER_REGISTRY}/${CONTAINER_IMAGE}
105109
```

docker/ubuntu/Dockerfile

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ pkgs+=(git) # Required build tool.
3333
pkgs+=(gpg) # Dependency for tools requiring signing or encrypting/decrypting.
3434
pkgs+=(gpg-agent) # Dependency for tools requiring signing or encrypting/decrypting.
3535
pkgs+=(jq) # JSON manipulation.
36+
pkgs+=(libatomic1) # Required by mold linker.
3637
pkgs+=(libc6-dev) # Required build tool.
3738
pkgs+=(ninja-build) # Required build tool.
3839
pkgs+=(python3-venv) # Python environment management tool.
@@ -58,6 +59,17 @@ RUN pip install --no-cache \
5859
gcovr==${GCOVR_VERSION} \
5960
cmake==${CMAKE_VERSION}
6061

62+
# Install mold https://github.com/rui314/mold
63+
ARG MOLD_VERSION
64+
65+
RUN <<EOF
66+
ARCH=$(uname -m)
67+
wget -O mold.tar.gz https://github.com/rui314/mold/releases/download/v${MOLD_VERSION}/mold-${MOLD_VERSION}-${ARCH}-linux.tar.gz
68+
tar -xzf mold.tar.gz --strip-components=1 -C /usr/local
69+
rm mold.tar.gz
70+
mold --version
71+
EOF
72+
6173
# ====================== GCC IMAGE ======================
6274
FROM base AS gcc
6375

docker/ubuntu/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ GCC_VERSION=14
4545
CONAN_VERSION=2.19.1
4646
GCOVR_VERSION=8.3
4747
CMAKE_VERSION=3.31.6
48+
MOLD_VERSION=2.40.4
4849
CONTAINER_IMAGE=xrplf/ci/ubuntu-${UBUNTU_VERSION}:gcc-${GCC_VERSION}
4950

5051
docker buildx build . \
@@ -56,6 +57,7 @@ docker buildx build . \
5657
--build-arg GCC_VERSION=${GCC_VERSION} \
5758
--build-arg GCOVR_VERSION=${GCOVR_VERSION} \
5859
--build-arg CMAKE_VERSION=${CMAKE_VERSION} \
60+
--build-arg MOLD_VERSION=${MOLD_VERSION} \
5961
--build-arg UBUNTU_VERSION=${UBUNTU_VERSION} \
6062
--tag ${CONTAINER_REGISTRY}/${CONTAINER_IMAGE}
6163
```
@@ -71,6 +73,7 @@ CLANG_VERSION=18
7173
CONAN_VERSION=2.19.1
7274
GCOVR_VERSION=8.3
7375
CMAKE_VERSION=3.31.6
76+
MOLD_VERSION=2.40.4
7477
CONTAINER_IMAGE=xrplf/ci/ubuntu-${UBUNTU_VERSION}:clang-${CLANG_VERSION}
7578

7679
docker buildx build . \
@@ -82,6 +85,7 @@ docker buildx build . \
8285
--build-arg CONAN_VERSION=${CONAN_VERSION} \
8386
--build-arg GCOVR_VERSION=${GCOVR_VERSION} \
8487
--build-arg CMAKE_VERSION=${CMAKE_VERSION} \
88+
--build-arg MOLD_VERSION=${MOLD_VERSION} \
8589
--build-arg UBUNTU_VERSION=${UBUNTU_VERSION} \
8690
--tag ${CONTAINER_REGISTRY}/${CONTAINER_IMAGE}
8791
```

0 commit comments

Comments
 (0)