Skip to content

Commit e2ac5f9

Browse files
committed
Refactor cross compilation scripts
1 parent 38ed3a6 commit e2ac5f9

File tree

4 files changed

+121
-28
lines changed

4 files changed

+121
-28
lines changed

.ci/install_cross_compiler.sh

-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,4 @@ case "$1" in
55
aarch64)
66
sudo apt install -y g++-aarch64-linux-gnu
77
;;
8-
armv7)
9-
sudo apt install -y g++-arm-linux-gnueabihf
108
esac

.ci/prepare_cross_build.sh

+41-25
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,52 @@
11
#!/bin/bash
22

3+
sudo apt install -y lsb-release
4+
35
target_arch="$1"
6+
root_path="$(pwd)"
7+
sysroot_path="${root_path}/sysroot"
8+
sysroot_ubuntu_version="$(lsb_release -rs).1"
9+
sysroot_ubuntu_codename="$(lsb_release -cs)"
10+
host_prefix="${root_path}/qt-host"
11+
cross_prefix="${root_path}/qt-cross"
12+
target_prefix="/usr/local/qt"
13+
toolchain_config="${root_path}/.ci/qt6-toolchain.cmake"
414

515
case "$target_arch" in
616
aarch64)
7-
toolchain_prefix="aarch64-linux-gnu-"
8-
echo "APPIMAGE_ARCH=aarch64" >> "${GITHUB_ENV}"
9-
;;
10-
armv7)
11-
toolchain_prefix="arm-linux-gnueabihf-"
12-
echo "APPIMAGE_ARCH=armhf" >> "${GITHUB_ENV}"
17+
target_arch_name="armv8-a"
18+
target_arch_debian_name="arm64"
19+
toolchain_name="aarch64-linux-gnu"
20+
target_platform="linux-aarch64-gnu-g++"
1321
;;
1422
esac
1523

16-
echo "$(pwd)/qt-cross/bin:$(pwd)/qt-host/libexec" >> $GITHUB_PATH
17-
echo "LD_LIBRARY_PATH=$(pwd)/qt-cross/lib:$(pwd)/qt-host/lib" >> "${GITHUB_ENV}"
18-
.ci/install-cross-compiler.sh "$target_arch"
19-
.ci/qt6-dependencies.sh
20-
if [[ "$target_arch" == "armv7" ]]; then
21-
echo "QMAKE_CC=arm-linux-gnueabihf-gcc
22-
QMAKE_CXX=arm-linux-gnueabihf-g++
23-
QMAKE_LINK=arm-linux-gnueabihf-g++
24-
QMAKE_LINK_SHLIB=arm-linux-gnueabihf-g++
25-
QMAKE_AR=arm-linux-gnueabihf-ar cqs
26-
QMAKE_OBJCOPY=arm-linux-gnueabihf-objcopy
27-
QMAKE_NM=arm-linux-gnueabihf-nm -P
28-
QMAKE_STRIP=arm-linux-gnueabihf-strip" >> .qmake.conf
29-
fi
24+
toolchain_prefix="${toolchain_name}-"
25+
26+
echo "Target architecture: ${target_arch} (${target_arch_name})"
27+
28+
# Install dependencies
29+
${root_path}/.ci/install_cross_compiler.sh "${target_arch}" || exit 1
30+
sudo apt install -y qemu-user-static || exit 1
31+
sudo apt install -y symlinks || exit 1
32+
33+
# Prepare sysroot
34+
echo "Preparing sysroot..."
35+
curl "https://cdimage.ubuntu.com/ubuntu-base/releases/${sysroot_ubuntu_codename}/release/ubuntu-base-${sysroot_ubuntu_version}-base-${target_arch_debian_name}.tar.gz" > ./ubuntu-base.tar.gz || exit 1
36+
mkdir -p "$sysroot_path"
37+
sudo tar -xvzf ubuntu-base.tar.gz -C "$sysroot_path" || exit 1
38+
sudo update-binfmts --enable qemu-arm || exit 1
39+
sudo mount -o bind /dev "${sysroot_path}/dev" || exit 1
40+
sudo cp /etc/resolv.conf "${sysroot_path}/etc" || exit 1
41+
sudo chmod 1777 "${sysroot_path}/tmp" || exit 1
42+
sudo cp "${root_path}/.ci/qt6_deps.sh" "${sysroot_path}/"
43+
sudo chroot "$sysroot_path" /bin/bash -c "/qt6_deps.sh" || exit 1
44+
sudo chroot "$sysroot_path" /bin/bash -c "apt update && apt install -y symlinks libssl-dev && symlinks -rc /" || exit 1
45+
sudo umount "${sysroot_path}/dev" || exit 1
3046

3147
# Prepare cross-tools for linuxdeploy
32-
sudo cp /usr/bin/${toolchain_prefix}strip strip
33-
sudo mv /usr/bin/ldd /usr/bin/ldd-amd64
34-
sudo cp .ci/bin/xldd /usr/bin/${toolchain_prefix}ldd
35-
sudo ln -s /usr/bin/${toolchain_prefix}ldd /usr/bin/ldd
36-
echo "CT_XLDD_ROOT=$(pwd)/sysroot" >> "${GITHUB_ENV}"
48+
#sudo cp /usr/bin/${toolchain_prefix}strip strip
49+
#sudo mv /usr/bin/ldd /usr/bin/ldd-amd64
50+
#sudo cp .ci/bin/xldd /usr/bin/${toolchain_prefix}ldd
51+
#sudo ln -s /usr/bin/${toolchain_prefix}ldd /usr/bin/ldd
52+
#echo "CT_XLDD_ROOT=$(pwd)/sysroot" >> "${GITHUB_ENV}"

.ci/qt6-toolchain.cmake

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
cmake_minimum_required(VERSION 3.18)
2+
include_guard(GLOBAL)
3+
4+
set(CMAKE_SYSTEM_NAME Linux)
5+
set(CMAKE_SYSTEM_PROCESSOR arm)
6+
7+
set(TARGET_SYSROOT $ENV{BUILD_SYSROOT_PATH})
8+
set(CMAKE_SYSROOT ${TARGET_SYSROOT})
9+
10+
set(ENV{PKG_CONFIG_PATH} $PKG_CONFIG_PATH:/usr/lib/$ENV{BUILD_TOOLCHAIN_NAME}/pkgconfig)
11+
set(ENV{PKG_CONFIG_LIBDIR} /usr/lib/pkgconfig:/usr/share/pkgconfig/:${TARGET_SYSROOT}/usr/lib/$ENV{BUILD_TOOLCHAIN_NAME}/pkgconfig:${TARGET_SYSROOT}/usr/lib/pkgconfig)
12+
set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT})
13+
14+
set(CMAKE_C_COMPILER /usr/bin/$ENV{BUILD_TOOLCHAIN_PREFIX}gcc)
15+
set(CMAKE_CXX_COMPILER /usr/bin/$ENV{BUILD_TOOLCHAIN_PREFIX}g++)
16+
17+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I${TARGET_SYSROOT}/usr/include")
18+
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}")
19+
20+
set(QT_COMPILER_FLAGS "-march=$ENV{BUILD_ARCH_NAME}")
21+
set(QT_COMPILER_FLAGS_RELEASE "-O2 -pipe")
22+
set(QT_LINKER_FLAGS "-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed")
23+
24+
#set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
25+
#set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
26+
#set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
27+
#set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
28+
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
29+
set(CMAKE_BUILD_RPATH ${TARGET_SYSROOT})
30+
31+
32+
include(CMakeInitializeConfigs)
33+
34+
function(cmake_initialize_per_config_variable _PREFIX _DOCSTRING)
35+
if (_PREFIX MATCHES "CMAKE_(C|CXX|ASM)_FLAGS")
36+
set(CMAKE_${CMAKE_MATCH_1}_FLAGS_INIT "${QT_COMPILER_FLAGS}")
37+
38+
foreach (config DEBUG RELEASE MINSIZEREL RELWITHDEBINFO)
39+
if (DEFINED QT_COMPILER_FLAGS_${config})
40+
set(CMAKE_${CMAKE_MATCH_1}_FLAGS_${config}_INIT "${QT_COMPILER_FLAGS_${config}}")
41+
endif()
42+
endforeach()
43+
endif()
44+
45+
46+
if (_PREFIX MATCHES "CMAKE_(SHARED|MODULE|EXE)_LINKER_FLAGS")
47+
foreach (config SHARED MODULE EXE)
48+
set(CMAKE_${config}_LINKER_FLAGS_INIT "${QT_LINKER_FLAGS}")
49+
endforeach()
50+
endif()
51+
52+
_cmake_initialize_per_config_variable(${ARGV})
53+
endfunction()
54+
55+
set(XCB_PATH_VARIABLE ${TARGET_SYSROOT})
56+
57+
set(GL_INC_DIR ${TARGET_SYSROOT}/usr/include)
58+
set(GL_LIB_DIR ${TARGET_SYSROOT}:${TARGET_SYSROOT}/usr/lib/$ENV{BUILD_TOOLCHAIN_NAME}/:${TARGET_SYSROOT}/usr:${TARGET_SYSROOT}/usr/lib)
59+
60+
set(EGL_INCLUDE_DIR ${GL_INC_DIR})
61+
set(EGL_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/$ENV{BUILD_TOOLCHAIN_NAME}/libEGL.so)
62+
63+
set(OPENGL_INCLUDE_DIR ${GL_INC_DIR})
64+
set(OPENGL_opengl_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/$ENV{BUILD_TOOLCHAIN_NAME}/libOpenGL.so)
65+
66+
set(GLESv2_INCLUDE_DIR ${GL_INC_DIR})
67+
set(GLIB_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/$ENV{BUILD_TOOLCHAIN_NAME}/libGLESv2.so)
68+
69+
set(GLESv2_INCLUDE_DIR ${GL_INC_DIR})
70+
set(GLESv2_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/$ENV{BUILD_TOOLCHAIN_NAME}/libGLESv2.so)
71+
72+
set(gbm_INCLUDE_DIR ${GL_INC_DIR})
73+
set(gbm_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/$ENV{BUILD_TOOLCHAIN_NAME}/libgbm.so)
74+
75+
set(Libdrm_INCLUDE_DIR ${GL_INC_DIR})
76+
set(Libdrm_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/$ENV{BUILD_TOOLCHAIN_NAME}/libdrm.so)
77+
78+
set(XCB_XCB_INCLUDE_DIR ${GL_INC_DIR})
79+
set(XCB_XCB_LIBRARY ${XCB_PATH_VARIABLE}/usr/lib/$ENV{BUILD_TOOLCHAIN_NAME}/libxcb.so)

.ci/qt6_deps.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,6 @@ sudo apt install -y libboost-all-dev libudev-dev libinput-dev libts-dev \
3333
libxcb-glx0-dev libxi-dev libdrm-dev libxcb-xinerama0 libxcb-xinerama0-dev \
3434
libatspi2.0-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxss-dev \
3535
libxtst-dev libpci-dev libcap-dev libxrandr-dev libdirectfb-dev libaudio-dev \
36-
libxkbcommon-x11-dev libclang-dev libclang-12-dev || exit 1
36+
libxkbcommon-x11-dev libclang-dev libclang-*-dev || exit 1
3737

3838
#sudo apt install -y gstreamer1.0-omx || exit 1

0 commit comments

Comments
 (0)