Skip to content

Commit 0d6bc66

Browse files
committed
Update Docker files
1 parent 7acdbe7 commit 0d6bc66

16 files changed

+110
-205
lines changed

.github/workflows/dockerimage.yaml

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,7 @@ on:
88
paths:
99
- '.github/workflows/build.yaml'
1010
- '.github/workflows/dockerimage.yaml'
11-
- 'utils/compat/**'
12-
- 'Dockerfile'
13-
- 'Dockerfile.i386'
14-
- 'Dockerfile.armhf'
15-
- 'Dockerfile.arm64'
11+
- '/utils/docker/**'
1612

1713
jobs:
1814
build:
@@ -40,5 +36,5 @@ jobs:
4036
- uses: docker/build-push-action@v5
4137
with:
4238
push: true
43-
file: ./${{ matrix.dockerfile }}
44-
tags: ghcr.io/multitheftauto/mtasa-blue-build:${{ matrix.tag }}
39+
file: ./utils/docker/Dockerfile
40+
tags: ghcr.io/multitheftauto/mtasa-blue-build:latest

Dockerfile

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

Dockerfile.arm64

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

Dockerfile.armhf

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

Dockerfile.i386

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

linux-build.sh

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
: ${BUILD_OS:=linux}
55
: ${BUILD_ARCHITECTURE:=x64}
66
: ${BUILD_CONFIG:=release}
7+
: ${PREMAKE_FILE:=premake5.lua}
78

89
# Find premake binary location
910
if [ "$(uname)" == "Darwin" ]; then
@@ -25,6 +26,8 @@ while [ $# -gt 0 ]; do
2526
--os=*) BUILD_OS="${1#*=}" ;;
2627
--arch=*) BUILD_ARCHITECTURE="${1#*=}" ;;
2728
--config=*) BUILD_CONFIG="${1#*=}" ;;
29+
--cores=*) NUM_CORES="${1#*=}" ;;
30+
--file=*) PREMAKE_FILE="${1#*=}" ;;
2831
*)
2932
echo "Error: Invalid argument: $1" >&2
3033
exit 1
@@ -48,12 +51,31 @@ esac
4851
case $BUILD_ARCHITECTURE in
4952
32|x86)
5053
CONFIG=${BUILD_CONFIG}_x86
54+
: ${GCC_PREFIX:=i386-linux-gnu-}
55+
: ${AR:=x86_64-linux-gnu-gcc-ar-10}
56+
: ${CC:=x86_64-linux-gnu-gcc-10}
57+
: ${CXX:=x86_64-linux-gnu-g++-10}
5158
;;
5259
64|x64)
5360
CONFIG=${BUILD_CONFIG}_x64
61+
: ${GCC_PREFIX:=x86_64-linux-gnu-}
62+
: ${AR:=x86_64-linux-gnu-gcc-ar-10}
63+
: ${CC:=x86_64-linux-gnu-gcc-10}
64+
: ${CXX:=x86_64-linux-gnu-g++-10}
5465
;;
55-
arm64|arm)
66+
arm)
5667
CONFIG=${BUILD_CONFIG}_${BUILD_ARCHITECTURE}
68+
: ${GCC_PREFIX:=arm-linux-gnueabihf-}
69+
: ${AR:=arm-linux-gnueabihf-ar}
70+
: ${CC:=arm-linux-gnueabihf-gcc-10}
71+
: ${CXX:=arm-linux-gnueabihf-g++-10}
72+
;;
73+
arm64)
74+
CONFIG=${BUILD_CONFIG}_${BUILD_ARCHITECTURE}
75+
: ${GCC_PREFIX:=aarch64-linux-gnu-}
76+
: ${AR:=aarch64-linux-gnu-gcc-ar-10}
77+
: ${CC:=aarch64-linux-gnu-gcc-10}
78+
: ${CXX:=aarch64-linux-gnu-g++-10}
5779
;;
5880
*)
5981
echo "Error: Invalid build architecture" >&2
@@ -62,19 +84,19 @@ esac
6284

6385
echo " OS = $BUILD_OS"
6486
echo " CONFIG = $CONFIG"
65-
echo " AR = ${AR:=ar}"
66-
echo " CC = ${CC:=gcc}"
67-
echo " CXX = ${CXX:=g++}"
87+
echo " AR = $AR"
88+
echo " CC = $CC"
89+
echo " CXX = $CXX"
6890

6991
# Clean old build files
7092
rm -Rf Build/
7193
rm -Rf Bin/
7294

7395
# Generate Makefiles
7496
if [[ -n "$GCC_PREFIX" ]]; then
75-
$PREMAKE5 --gccprefix="$GCC_PREFIX" --os="$BUILD_OS" gmake
97+
$PREMAKE5 --gccprefix="$GCC_PREFIX" --os="$BUILD_OS" --file=$PREMAKE_FILE gmake
7698
else
77-
$PREMAKE5 --os="$BUILD_OS" gmake
99+
$PREMAKE5 --os="$BUILD_OS" --file=$PREMAKE_FILE gmake
78100
fi
79101

80102
# Build!

utils/arm-cross-compile-sources.list

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

utils/docker-entrypoint-arm.sh

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

utils/docker-entrypoint.sh

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

utils/docker/Dockerfile

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
FROM ubuntu:focal
2+
3+
ENV LC_ALL=C.UTF-8 \
4+
LANG=C.UTF-8 \
5+
LANGUAGE=C.UTF-8 \
6+
GLIBC_COMPAT=true
7+
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
14+
15+
# 1. Add the supported architectures.
16+
# 2. Install all compilers and build-time dependencies (libncurses, libmysqlclient) for every architecture.
17+
# 3. Manually download, modify, and install libmysqlclient-dev, because it can't be installed in parallel.
18+
# 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 \
31+
libmysqlclient-dev:armhf \
32+
libmysqlclient-dev:arm64 \
33+
libmysqlclient-dev:i386 \
34+
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 \
40+
libmysqlclient-dev-amd64/DEBIAN/control \
41+
libmysqlclient-dev-i386/DEBIAN/control \
42+
libmysqlclient-dev-armhf/DEBIAN/control \
43+
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 \
49+
libmysqlclient-dev-armhf.deb \
50+
libmysqlclient-dev-arm64.deb \
51+
libmysqlclient-dev-i386.deb \
52+
libmysqlclient-dev-amd64.deb \
53+
&& rm -rf /tmp/* /var/lib/apt/lists/*
54+
55+
# Downgrade glibc symbols for backwards compatibility.
56+
COPY compat /compat
57+
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
63+
64+
VOLUME /build
65+
WORKDIR /build
66+
67+
COPY docker-entrypoint.sh /docker-entrypoint.sh
68+
69+
RUN chmod +x /docker-entrypoint.sh
70+
71+
ENTRYPOINT bash /docker-entrypoint.sh

0 commit comments

Comments
 (0)