Skip to content

Commit 798a480

Browse files
committed
Update Docker build image to Ubuntu Noble with GCC 15
1 parent ba746c3 commit 798a480

File tree

9 files changed

+108
-161
lines changed

9 files changed

+108
-161
lines changed

linux-build.sh

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
: ${BUILD_ARCHITECTURE:=x64}
66
: ${BUILD_CONFIG:=release}
77
: ${PREMAKE_FILE:=premake5.lua}
8+
: ${GCC_PREFIX:=}
9+
: ${AR:=ar}
10+
: ${CC:=gcc}
11+
: ${CXX:=g++}
812

913
# Find premake binary location
1014
if [ "$(uname)" == "Darwin" ]; then
@@ -16,10 +20,6 @@ fi
1620
# Number of cores
1721
if [ "$(uname)" == "Darwin" ]; then
1822
NUM_CORES=$(sysctl -n hw.ncpu)
19-
: ${GCC_PREFIX:=}
20-
: ${AR:=ar}
21-
: ${CC:=gcc}
22-
: ${CXX:=g++}
2323
else
2424
NUM_CORES=$(grep -c ^processor /proc/cpuinfo)
2525
fi
@@ -55,31 +55,15 @@ esac
5555
case $BUILD_ARCHITECTURE in
5656
32|x86)
5757
CONFIG=${BUILD_CONFIG}_x86
58-
: ${GCC_PREFIX:=i386-linux-gnu-}
59-
: ${AR:=x86_64-linux-gnu-gcc-ar-10}
60-
: ${CC:=x86_64-linux-gnu-gcc-10}
61-
: ${CXX:=x86_64-linux-gnu-g++-10}
6258
;;
6359
64|x64)
6460
CONFIG=${BUILD_CONFIG}_x64
65-
: ${GCC_PREFIX:=x86_64-linux-gnu-}
66-
: ${AR:=x86_64-linux-gnu-gcc-ar-10}
67-
: ${CC:=x86_64-linux-gnu-gcc-10}
68-
: ${CXX:=x86_64-linux-gnu-g++-10}
6961
;;
7062
arm)
7163
CONFIG=${BUILD_CONFIG}_${BUILD_ARCHITECTURE}
72-
: ${GCC_PREFIX:=arm-linux-gnueabihf-}
73-
: ${AR:=arm-linux-gnueabihf-ar}
74-
: ${CC:=arm-linux-gnueabihf-gcc-10}
75-
: ${CXX:=arm-linux-gnueabihf-g++-10}
7664
;;
7765
arm64)
7866
CONFIG=${BUILD_CONFIG}_${BUILD_ARCHITECTURE}
79-
: ${GCC_PREFIX:=aarch64-linux-gnu-}
80-
: ${AR:=aarch64-linux-gnu-gcc-ar-10}
81-
: ${CC:=aarch64-linux-gnu-gcc-10}
82-
: ${CXX:=aarch64-linux-gnu-g++-10}
8367
;;
8468
*)
8569
echo "Error: Invalid build architecture" >&2

utils/docker/Dockerfile

Lines changed: 38 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,64 @@
1-
FROM ubuntu:focal
1+
FROM ghcr.io/multitheftauto/mtasa-blue-gcc:15-noble
22

3-
ENV LC_ALL=C.UTF-8 \
4-
LANG=C.UTF-8 \
5-
LANGUAGE=C.UTF-8 \
6-
GLIBC_COMPAT=true
3+
ARG GLIBC_COMPAT=true
74

8-
# Trust the signing key for "PPA for Ubuntu Toolchain Uploads".
9-
# Source: https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x2c277a0a352154e5
10-
COPY ubuntu-toolchain-r-ubuntu-test.asc /etc/apt/trusted.gpg.d/
11-
12-
# Use a combined APT sources list for amd64, i386, armhf, arm64, and PPA for Ubuntu Toolchain Uploads.
13-
COPY sources.list /etc/apt/sources.list
5+
# Use a combined APT sources list for amd64, i386, armhf and arm64.
6+
COPY ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources
147

158
# 1. Add the supported architectures.
169
# 2. Install all compilers and build-time dependencies (libncurses, libmysqlclient) for every architecture.
1710
# 3. Manually download, modify, and install libmysqlclient-dev, because it can't be installed in parallel.
1811
# 4. Remove cache and temporary files.
19-
RUN dpkg --add-architecture i386 \
20-
&& dpkg --add-architecture armhf \
21-
&& dpkg --add-architecture arm64 \
22-
&& apt-get update \
23-
&& apt-get install -y --no-install-recommends make \
24-
libncurses-dev:arm64 libmysqlclient21:arm64 zlib1g-dev:arm64 libssl-dev:arm64 g++-10-arm-linux-gnueabihf \
25-
libncurses-dev:armhf libmysqlclient21:armhf zlib1g-dev:armhf libssl-dev:armhf g++-10-aarch64-linux-gnu \
26-
libncurses-dev:i386 libmysqlclient21:i386 zlib1g-dev:i386 libssl-dev:i386 g++-10-multilib \
27-
libncurses-dev libmysqlclient21 zlib1g-dev libssl-dev \
28-
&& apt-get upgrade -y \
29-
&& cd /tmp \
30-
&& apt-get download \
12+
RUN set -ex ;\
13+
dpkg --add-architecture i386 ;\
14+
dpkg --add-architecture armhf ;\
15+
dpkg --add-architecture arm64 ;\
16+
apt-get update ;\
17+
DEBIAN_FRONTEND=noninteractive apt-get install -y make binutils \
18+
libncurses-dev:arm64 libmysqlclient21:arm64 zlib1g-dev:arm64 libzstd-dev:arm64 libssl-dev:arm64 \
19+
libncurses-dev:armhf libmysqlclient21:armhf zlib1g-dev:armhf libzstd-dev:armhf libssl-dev:armhf \
20+
libncurses-dev:i386 libmysqlclient21:i386 zlib1g-dev:i386 libzstd-dev:i386 libssl-dev:i386 \
21+
libncurses-dev libmysqlclient21 zlib1g-dev libzstd-dev libssl-dev \
22+
;\
23+
apt-get upgrade -y ;\
24+
cd /tmp ;\
25+
apt-get download \
3126
libmysqlclient-dev:armhf \
3227
libmysqlclient-dev:arm64 \
3328
libmysqlclient-dev:i386 \
3429
libmysqlclient-dev \
35-
&& dpkg-deb -R libmysqlclient-dev_*_armhf.deb libmysqlclient-dev-armhf \
36-
&& dpkg-deb -R libmysqlclient-dev_*_arm64.deb libmysqlclient-dev-arm64 \
37-
&& dpkg-deb -R libmysqlclient-dev_*_i386.deb libmysqlclient-dev-i386 \
38-
&& dpkg-deb -R libmysqlclient-dev_*_amd64.deb libmysqlclient-dev-amd64 \
39-
&& echo 'Multi-Arch: same' | tee -a \
30+
;\
31+
dpkg-deb -R libmysqlclient-dev_*_armhf.deb libmysqlclient-dev-armhf ;\
32+
dpkg-deb -R libmysqlclient-dev_*_arm64.deb libmysqlclient-dev-arm64 ;\
33+
dpkg-deb -R libmysqlclient-dev_*_i386.deb libmysqlclient-dev-i386 ;\
34+
dpkg-deb -R libmysqlclient-dev_*_amd64.deb libmysqlclient-dev-amd64 ;\
35+
echo 'Multi-Arch: same' | tee -a \
4036
libmysqlclient-dev-amd64/DEBIAN/control \
4137
libmysqlclient-dev-i386/DEBIAN/control \
4238
libmysqlclient-dev-armhf/DEBIAN/control \
4339
libmysqlclient-dev-arm64/DEBIAN/control \
44-
&& dpkg-deb -b libmysqlclient-dev-amd64 libmysqlclient-dev-amd64.deb \
45-
&& dpkg-deb -b libmysqlclient-dev-i386 libmysqlclient-dev-i386.deb \
46-
&& dpkg-deb -b libmysqlclient-dev-armhf libmysqlclient-dev-armhf.deb \
47-
&& dpkg-deb -b libmysqlclient-dev-arm64 libmysqlclient-dev-arm64.deb \
48-
&& dpkg -i --force-overwrite \
40+
;\
41+
dpkg-deb -b libmysqlclient-dev-amd64 libmysqlclient-dev-amd64.deb ;\
42+
dpkg-deb -b libmysqlclient-dev-i386 libmysqlclient-dev-i386.deb ;\
43+
dpkg-deb -b libmysqlclient-dev-armhf libmysqlclient-dev-armhf.deb ;\
44+
dpkg-deb -b libmysqlclient-dev-arm64 libmysqlclient-dev-arm64.deb ;\
45+
dpkg -i --force-overwrite \
4946
libmysqlclient-dev-armhf.deb \
5047
libmysqlclient-dev-arm64.deb \
5148
libmysqlclient-dev-i386.deb \
5249
libmysqlclient-dev-amd64.deb \
53-
&& rm -rf /tmp/* /var/lib/apt/lists/*
50+
;\
51+
rm -rf /tmp/* /var/lib/apt/lists/*
5452

5553
# Downgrade glibc symbols for backwards compatibility.
5654
COPY compat /compat
5755

58-
RUN mkdir -p /compat/x64 /compat/x86 \
59-
&& objcopy --redefine-syms=/compat/glibc_version_x64.redef "$(gcc-10 --print-file-name=libstdc++.a)" /compat/x64/libstdc++.a \
60-
&& objcopy --redefine-syms=/compat/glibc_version_x64.redef /usr/lib/x86_64-linux-gnu/libmysqlclient.a /compat/x64/libmysqlclient.a \
61-
&& objcopy --redefine-syms=/compat/glibc_version_x86.redef "$(gcc-10 -m32 --print-file-name=libstdc++.a)" /compat/x86/libstdc++.a \
62-
&& objcopy --redefine-syms=/compat/glibc_version_x86.redef /usr/lib/i386-linux-gnu/libmysqlclient.a /compat/x86/libmysqlclient.a
56+
RUN set -ex ;\
57+
mkdir -p /compat/x64 /compat/x86 ;\
58+
objcopy --redefine-syms=/compat/glibc_version_x64.redef "$(gcc --print-file-name=libstdc++.a)" /compat/x64/libstdc++.a ;\
59+
objcopy --redefine-syms=/compat/glibc_version_x86.redef "$(gcc -m32 --print-file-name=libstdc++.a)" /compat/x86/libstdc++.a ;\
60+
objcopy --redefine-syms=/compat/glibc_version_x64.redef "/usr/lib/x86_64-linux-gnu/libmysqlclient.a" /compat/x64/libmysqlclient.a ;\
61+
objcopy --redefine-syms=/compat/glibc_version_x86.redef "/usr/lib/i386-linux-gnu/libmysqlclient.a" /compat/x86/libmysqlclient.a
6362

6463
VOLUME /build
6564
WORKDIR /build

utils/docker/compat/glibc_version.h

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,45 +3,14 @@
33

44
#ifdef __x86_64__
55
#ifndef __ASSEMBLER__
6-
__asm__(".symver memcmp,memcmp@GLIBC_2.2.5");
7-
__asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
8-
__asm__(".symver powf,powf@GLIBC_2.2.5");
9-
__asm__(".symver log,log@GLIBC_2.2.5");
10-
__asm__(".symver log2,log2@GLIBC_2.2.5");
11-
__asm__(".symver pow,pow@GLIBC_2.2.5");
12-
__asm__(".symver exp,exp@GLIBC_2.2.5");
13-
__asm__(".symver fcntl64,fcntl@GLIBC_2.2.5");
6+
// __asm__(".symver memcmp,memcmp@GLIBC_2.2.5");
147
#else
15-
.symver memcmp,memcmp@GLIBC_2.2.5
16-
.symver memcpy,memcpy@GLIBC_2.2.5
17-
.symver powf,powf@GLIBC_2.2.5
18-
.symver log,log@GLIBC_2.2.5
19-
.symver log2,log2@GLIBC_2.2.5
20-
.symver pow,pow@GLIBC_2.2.5
21-
.symver exp,exp@GLIBC_2.2.5
22-
.symver fcntl64,fcntl@GLIBC_2.2.5
8+
// .symver memcmp,memcmp@GLIBC_2.2.5
239
#endif
2410
#else
2511
#ifndef __ASSEMBLER__
26-
__asm__(".symver memcmp,memcmp@GLIBC_2.0");
27-
__asm__(".symver memcpy,memcpy@GLIBC_2.0");
28-
__asm__(".symver powf,powf@GLIBC_2.0");
29-
__asm__(".symver log,log@GLIBC_2.0");
30-
__asm__(".symver log2,log2@GLIBC_2.1");
31-
__asm__(".symver pow,pow@GLIBC_2.0");
32-
__asm__(".symver exp,exp@GLIBC_2.0");
33-
__asm__(".symver fcntl64,fcntl@GLIBC_2.0");
34-
__asm__(".symver fcntl,fcntl@GLIBC_2.0");
12+
// __asm__(".symver memcmp,memcmp@GLIBC_2.0");
3513
#else
36-
.symver memcmp,memcmp@GLIBC_2.0
37-
.symver memcpy,memcpy@GLIBC_2.0
38-
.symver powf,powf@GLIBC_2.0
39-
.symver log,log@GLIBC_2.0
40-
.symver log2,log2@GLIBC_2.1
41-
.symver pow,pow@GLIBC_2.0
42-
.symver exp,exp@GLIBC_2.0
43-
.symver fcntl64,fcntl@GLIBC_2.0
44-
.symver fcntl,fcntl@GLIBC_2.0
14+
// .symver memcmp,memcmp@GLIBC_2.0
4515
#endif
46-
4716
#endif

utils/docker/compat/glibc_version_x64.redef

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,4 @@
44
# If you change this, remember to also change glibc_version.h
55
# See also: create_static_libraries.sh
66
#
7-
memcmp memcmp@GLIBC_2.2.5
8-
memcpy memcpy@GLIBC_2.2.5
9-
powf powf@GLIBC_2.2.5
10-
log log@GLIBC_2.2.5
11-
log2 log2@GLIBC_2.2.5
12-
pow pow@GLIBC_2.2.5
13-
exp exp@GLIBC_2.2.5
14-
fcntl64 fcntl@GLIBC_2.2.5
7+
# memcmp memcmp@GLIBC_2.2.5

utils/docker/compat/glibc_version_x86.redef

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,4 @@
44
# If you change this, remember to also change glibc_version.h
55
# See also: create_static_libraries.sh
66
#
7-
memcmp memcmp@GLIBC_2.0
8-
memcpy memcpy@GLIBC_2.0
9-
powf powf@GLIBC_2.0
10-
log log@GLIBC_2.0
11-
log2 log2@GLIBC_2.1
12-
pow pow@GLIBC_2.0
13-
exp exp@GLIBC_2.0
14-
fcntl fcntl@GLIBC_2.0
7+
# memcmp memcmp@GLIBC_2.0

utils/docker/docker-entrypoint.sh

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,45 @@
11
#!/bin/bash
22

3+
: ${arch_value:=x64}
4+
5+
for arg in "$@"; do
6+
case $arg in
7+
--arch=*)
8+
arch_value="${arg#--arch=}"
9+
break
10+
;;
11+
esac
12+
done
13+
14+
case $arch_value in
15+
32|x86)
16+
prefix=i386-linux-gnu-
17+
triplet=x86_64-linux-gnu-
18+
;;
19+
64|x64)
20+
prefix=x86_64-linux-gnu-
21+
triplet=$prefix
22+
;;
23+
arm)
24+
prefix=arm-linux-gnueabihf-
25+
triplet=$prefix
26+
;;
27+
arm64)
28+
prefix=aarch64-linux-gnu-
29+
triplet=$prefix
30+
;;
31+
*)
32+
echo "Error: Invalid build architecture" >&2
33+
exit 1
34+
esac
35+
36+
: ${GCC_PREFIX:=$prefix}
37+
: ${AR:=${triplet}gcc-ar-15}
38+
: ${CC:=${triplet}gcc-15}
39+
: ${CXX:=${triplet}g++-15}
40+
41+
export GCC_PREFIX AR CC CXX
42+
343
if [ -f ./linux-build.sh ]; then
444
chmod +x ./linux-build.sh
545
./linux-build.sh "$@"

utils/docker/sources.list

Lines changed: 0 additions & 20 deletions
This file was deleted.

utils/docker/ubuntu-toolchain-r-ubuntu-test.asc

Lines changed: 0 additions & 31 deletions
This file was deleted.

utils/docker/ubuntu.sources

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
Types: deb
2+
URIs: http://archive.ubuntu.com/ubuntu/
3+
Suites: noble noble-updates noble-backports
4+
Components: main universe restricted multiverse
5+
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
6+
Architectures: amd64 i386
7+
8+
Types: deb
9+
URIs: http://security.ubuntu.com/ubuntu/
10+
Suites: noble-security
11+
Components: main universe restricted multiverse
12+
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
13+
Architectures: amd64 i386
14+
15+
Types: deb
16+
URIs: http://ports.ubuntu.com/ubuntu-ports
17+
Suites: noble noble-updates noble-backports
18+
Components: main universe restricted multiverse
19+
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
20+
Architectures: arm64 armhf

0 commit comments

Comments
 (0)