Skip to content

Commit a6478d5

Browse files
committed
Enable LTO
1 parent 56f981d commit a6478d5

4 files changed

Lines changed: 62 additions & 3 deletions

File tree

alpine/Dockerfile

Lines changed: 18 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

alpine/Dockerfile.j2

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ ARG REDISJSON_VERSION
2424
ARG REDISBLOOM_VERSION
2525
ARG REDISTIMESERIES_VERSION
2626
{% endif -%}
27+
# 0 = off, 1 = enable link-time optimization for bundled modules (e.g. RediSearch). docker build --build-arg LTO=1
28+
ARG LTO=0
2729

2830
RUN set -eux; \
2931
\
@@ -58,10 +60,12 @@ RUN set -eux; \
5860
curl \
5961
g++ \
6062
git \
63+
grep \
6164
libffi-dev \
6265
libgcc \
6366
libtool \
6467
llvm21-dev \
68+
lld21 \
6569
ncurses-dev \
6670
openssh \
6771
openssl \
@@ -122,7 +126,18 @@ RUN set -eux; \
122126
export RUST_DYN_CRT=1; \
123127
export PATH="/usr/lib/llvm21/bin:$PATH"; \
124128
export BUILD_TLS=yes; \
129+
if [ "$BUILD_WITH_MODULES" = "yes" ] && [ "${LTO}" = "1" ]; then \
130+
mkdir -p /usr/local/bin; \
131+
ln -sf /usr/lib/llvm21/bin/clang-21 /usr/local/bin/clang-21; \
132+
ln -sf /usr/lib/llvm21/bin/clang++-21 /usr/local/bin/clang++-21; \
133+
ln -sf /usr/lib/llvm21/bin/lld /usr/local/bin/lld; \
134+
[ -x /usr/lib/llvm21/bin/lld-21 ] && ln -sf /usr/lib/llvm21/bin/lld-21 /usr/local/bin/lld-21; \
135+
fi; \
125136
if [ "$BUILD_WITH_MODULES" = "yes" ]; then \
137+
export LTO=${LTO}; \
138+
if [ "${LTO}" = "1" ]; then \
139+
unset CC CXX LD 2>/dev/null || true; \
140+
fi; \
126141

127142
{%- if custom_build %}
128143

debian/Dockerfile

Lines changed: 15 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

debian/Dockerfile.j2

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ ARG REDISJSON_VERSION
2424
ARG REDISBLOOM_VERSION
2525
ARG REDISTIMESERIES_VERSION
2626
{% endif %}
27+
# 0 = off, 1 = enable link-time optimization for bundled modules (e.g. RediSearch). docker build --build-arg LTO=1
28+
ARG LTO=0
2729

2830
RUN set -eux; \
2931
\
@@ -57,10 +59,19 @@ RUN set -eux; \
5759
unzip \
5860
rsync \
5961
clang \
62+
lld \
6063
automake \
6164
autoconf \
6265
libtool \
6366
g++; \
67+
if [ "${LTO}" = "1" ]; then \
68+
apt-get install -y --no-install-recommends wget gnupg lsb-release ca-certificates; \
69+
wget -qO /tmp/llvm.sh https://apt.llvm.org/llvm.sh; \
70+
chmod +x /tmp/llvm.sh; \
71+
DEBIAN_FRONTEND=noninteractive /tmp/llvm.sh 21 all; \
72+
rm -f /tmp/llvm.sh; \
73+
export PATH="/usr/lib/llvm-21/bin:$PATH"; \
74+
fi; \
6475
fi; \
6576
\
6677
rm -rf /var/lib/apt/lists/*; \
@@ -121,6 +132,9 @@ RUN set -eux; \
121132
grep -F "cd jemalloc && ./configure $extraJemallocConfigureFlags " /usr/src/redis/deps/Makefile; \
122133
\
123134
export BUILD_TLS=yes; \
135+
if [ "$BUILD_WITH_MODULES" = "yes" ]; then \
136+
export LTO=${LTO}; \
137+
fi; \
124138
make -C /usr/src/redis -j "$(nproc)" all; \
125139
make -C /usr/src/redis install; \
126140
make -C /usr/src/redis distclean; \

0 commit comments

Comments
 (0)