cross: get qtwebengine to cross compile from x86_64 -> aarch64
the resulting product isn't *necessarily* correct. i can build jellyfin, but it exits immediately.
This commit is contained in:
parent
05f10f0115
commit
95c9b5d6a2
|
@ -0,0 +1,31 @@
|
|||
diff --git a/pkgs/development/libraries/qt-6/modules/qtwebengine.nix b/pkgs/development/libraries/qt-6/modules/qtwebengine.nix
|
||||
index fadbc5d2bfa..e4f2aec5a32 100644
|
||||
--- a/pkgs/development/libraries/qt-6/modules/qtwebengine.nix
|
||||
+++ b/pkgs/development/libraries/qt-6/modules/qtwebengine.nix
|
||||
@@ -97,6 +97,9 @@
|
||||
, xnu
|
||||
}:
|
||||
|
||||
+let
|
||||
+ buildPython = buildPackages.python3.withPackages (ps: with ps; [ html5lib ]);
|
||||
+in
|
||||
qtModule {
|
||||
pname = "qtwebengine";
|
||||
qtInputs = [ qtdeclarative qtwebchannel qtwebsockets qtpositioning ];
|
||||
@@ -108,7 +111,7 @@ qtModule {
|
||||
gperf
|
||||
ninja
|
||||
pkg-config
|
||||
- (python3.withPackages (ps: with ps; [ html5lib ]))
|
||||
+ buildPython
|
||||
which
|
||||
gn
|
||||
nodejs
|
||||
@@ -304,6 +307,7 @@ qtModule {
|
||||
|
||||
preConfigure = ''
|
||||
export NINJAFLAGS="-j$NIX_BUILD_CORES"
|
||||
+ export CMAKE_PREFIX_PATH="${buildPython}/bin:$CMAKE_PREFIX_PATH"
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
|
@ -153,6 +153,9 @@ in [
|
|||
# make alsa-project members overridable
|
||||
./2023-05-31-toplevel-alsa.patch
|
||||
|
||||
# qt6 qtwebengine: specify `python` as buildPackages
|
||||
./2023-06-02-qt6-qtwebengine-cross.patch
|
||||
|
||||
# for raspberry pi: allow building u-boot for rpi 4{,00}
|
||||
# TODO: remove after upstreamed: https://github.com/NixOS/nixpkgs/pull/176018
|
||||
# (it's a dupe of https://github.com/NixOS/nixpkgs/pull/112677 )
|
||||
|
|
|
@ -971,34 +971,100 @@ in {
|
|||
# inherit (emulated.qt5) qtModule;
|
||||
# };
|
||||
# });
|
||||
# qt6 = prev.qt6.overrideScope' (self: super: {
|
||||
# # inherit (emulated.qt6) qtModule;
|
||||
# qtbase = super.qtbase.overrideAttrs (upstream: {
|
||||
# # cmakeFlags = upstream.cmakeFlags ++ lib.optionals (final.stdenv.buildPlatform != final.stdenv.hostPlatform) [
|
||||
# cmakeFlags = upstream.cmakeFlags ++ lib.optionals (final.stdenv.buildPlatform != final.stdenv.hostPlatform) [
|
||||
# # "-DCMAKE_CROSSCOMPILING=True" # fails to solve QT_HOST_PATH error
|
||||
# "-DQT_HOST_PATH=${final.buildPackages.qt6.full}"
|
||||
# ];
|
||||
# });
|
||||
# qtModule = args: (super.qtModule args).overrideAttrs (upstream: {
|
||||
# # the nixpkgs comment about libexec seems to be outdated:
|
||||
# # it's just that cross-compiled syncqt.pl doesn't get its #!/usr/bin/env shebang replaced.
|
||||
# preConfigure = lib.replaceStrings
|
||||
# ["${lib.getDev self.qtbase}/libexec/syncqt.pl"]
|
||||
# ["perl ${lib.getDev self.qtbase}/libexec/syncqt.pl"]
|
||||
# upstream.preConfigure;
|
||||
# });
|
||||
# # qtwayland = super.qtwayland.overrideAttrs (upstream: {
|
||||
# # preConfigure = "fixQtBuiltinPaths . '*.pr?'";
|
||||
# # });
|
||||
# # qtwayland = super.qtwayland.override {
|
||||
# # inherit (self) qtbase;
|
||||
# # };
|
||||
# # qtbase = super.qtbase.override {
|
||||
# # # fixes: "You need to set QT_HOST_PATH to cross compile Qt."
|
||||
# # inherit (emulated) stdenv;
|
||||
# # };
|
||||
# });
|
||||
qt6 = prev.qt6.overrideScope' (self: super: {
|
||||
# # inherit (emulated.qt6) qtModule;
|
||||
# qtbase = super.qtbase.overrideAttrs (upstream: {
|
||||
# # cmakeFlags = upstream.cmakeFlags ++ lib.optionals (final.stdenv.buildPlatform != final.stdenv.hostPlatform) [
|
||||
# cmakeFlags = upstream.cmakeFlags ++ lib.optionals (final.stdenv.buildPlatform != final.stdenv.hostPlatform) [
|
||||
# # "-DCMAKE_CROSSCOMPILING=True" # fails to solve QT_HOST_PATH error
|
||||
# "-DQT_HOST_PATH=${final.buildPackages.qt6.full}"
|
||||
# ];
|
||||
# });
|
||||
# qtModule = args: (super.qtModule args).overrideAttrs (upstream: {
|
||||
# # the nixpkgs comment about libexec seems to be outdated:
|
||||
# # it's just that cross-compiled syncqt.pl doesn't get its #!/usr/bin/env shebang replaced.
|
||||
# preConfigure = lib.replaceStrings
|
||||
# ["${lib.getDev self.qtbase}/libexec/syncqt.pl"]
|
||||
# ["perl ${lib.getDev self.qtbase}/libexec/syncqt.pl"]
|
||||
# upstream.preConfigure;
|
||||
# });
|
||||
# # qtwayland = super.qtwayland.overrideAttrs (upstream: {
|
||||
# # preConfigure = "fixQtBuiltinPaths . '*.pr?'";
|
||||
# # });
|
||||
# # qtwayland = super.qtwayland.override {
|
||||
# # inherit (self) qtbase;
|
||||
# # };
|
||||
# # qtbase = super.qtbase.override {
|
||||
# # # fixes: "You need to set QT_HOST_PATH to cross compile Qt."
|
||||
# # inherit (emulated) stdenv;
|
||||
# # };
|
||||
|
||||
qtwebengine = super.qtwebengine.overrideAttrs (upstream: {
|
||||
# depsBuildBuild = upstream.depsBuildBuild or [] ++ [ final.pkg-config ];
|
||||
# XXX: qt seems to use its own terminology for "host" and "target":
|
||||
# - <https://www.qt.io/blog/qt6-development-hosts-and-targets>
|
||||
# - "host" = machine invoking the compiler
|
||||
# - "target" = machine on which the resulting qtwebengine.so binaries will run
|
||||
# XXX: NIX_CFLAGS_COMPILE_<machine> is how we get the `-isystem <dir>` flags.
|
||||
# probably we shouldn't blindly copy these from host machine to build machine,
|
||||
# as the headers could reasonably make different assumptions.
|
||||
preConfigure = upstream.preConfigure + ''
|
||||
# export PKG_CONFIG_HOST="$PKG_CONFIG"
|
||||
export PKG_CONFIG_HOST="$PKG_CONFIG_FOR_BUILD"
|
||||
# expose -isystem <zlib> to x86 builds
|
||||
export NIX_CFLAGS_COMPILE_x86_64_unknown_linux_gnu="$NIX_CFLAGS_COMPILE"
|
||||
export NIX_LDFLAGS_x86_64_unknown_linux_gnu="-L${final.buildPackages.zlib}/lib"
|
||||
'';
|
||||
patches = upstream.patches or [] ++ [
|
||||
# ./qtwebengine-host-pkg-config.patch
|
||||
# alternatively, look at dlopenBuildInputs
|
||||
./qtwebengine-host-cc.patch
|
||||
];
|
||||
# patch the qt pkg-config script to show us more debug info
|
||||
postPatch = upstream.postPatch or "" + ''
|
||||
sed -i s/options.debug/True/g src/3rdparty/chromium/build/config/linux/pkg-config.py
|
||||
'';
|
||||
nativeBuildInputs = upstream.nativeBuildInputs ++ [
|
||||
final.bintools-unwrapped # for readelf
|
||||
final.buildPackages.cups # for cups-config
|
||||
final.buildPackages.fontconfig
|
||||
final.buildPackages.glib
|
||||
final.buildPackages.harfbuzz
|
||||
final.buildPackages.icu
|
||||
final.buildPackages.libjpeg
|
||||
final.buildPackages.libpng
|
||||
final.buildPackages.libwebp
|
||||
final.buildPackages.nss
|
||||
# final.gcc-unwrapped.libgcc # for libgcc_s.so
|
||||
final.buildPackages.zlib
|
||||
];
|
||||
depsBuildBuild = upstream.depsBuildBuild or [] ++ [ final.pkg-config ];
|
||||
# buildInputs = upstream.buildInputs ++ [
|
||||
# final.gcc-unwrapped.libgcc # for libgcc_s.so. this gets loaded during build, suggesting i surely messed something up
|
||||
# ];
|
||||
# buildInputs = upstream.buildInputs ++ [
|
||||
# final.gcc-unwrapped.libgcc
|
||||
# ];
|
||||
# nativeBuildInputs = upstream.nativeBuildInputs ++ [
|
||||
# final.icu
|
||||
# ];
|
||||
# buildInputs = upstream.buildInputs ++ [
|
||||
# final.icu
|
||||
# ];
|
||||
# env.NIX_DEBUG="1";
|
||||
# env.NIX_DEBUG="7";
|
||||
# cmakeFlags = lib.remove "-DQT_FEATURE_webengine_system_icu=ON" upstream.cmakeFlags;
|
||||
cmakeFlags = upstream.cmakeFlags ++ lib.optionals (final.stdenv.hostPlatform != final.stdenv.buildPlatform) [
|
||||
# "--host-cc=${final.buildPackages.stdenv.cc}/bin/cc"
|
||||
# "--host-cxx=${final.buildPackages.stdenv.cc}/bin/c++"
|
||||
# these are my own vars, used by my own patch
|
||||
"-DCMAKE_HOST_C_COMPILER=${final.buildPackages.stdenv.cc}/bin/gcc"
|
||||
"-DCMAKE_HOST_CXX_COMPILER=${final.buildPackages.stdenv.cc}/bin/g++"
|
||||
"-DCMAKE_HOST_AR=${final.buildPackages.stdenv.cc}/bin/ar"
|
||||
"-DCMAKE_HOST_NM=${final.buildPackages.stdenv.cc}/bin/nm"
|
||||
];
|
||||
});
|
||||
});
|
||||
|
||||
rmlint = prev.rmlint.override {
|
||||
# fixes "Checking whether the C compiler works... no"
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
||||
index 771446ece..c20da0d56 100644
|
||||
--- a/src/CMakeLists.txt
|
||||
+++ b/src/CMakeLists.txt
|
||||
@@ -172,7 +172,11 @@ if(CMAKE_CROSSCOMPILING AND NOT IOS AND NOT MACOS)
|
||||
CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${QT_HOST_PATH}/lib/cmake/Qt6/qt.toolchain.cmake
|
||||
-DWEBENGINE_ROOT_BUILD_DIR=${PROJECT_BINARY_DIR}
|
||||
-DWEBENGINE_ROOT_SOURCE_DIR=${WEBENGINE_ROOT_SOURCE_DIR}
|
||||
- -DGN_TARGET_CPU=${TEST_architecture_arch}
|
||||
+ -DGN_TARGET_CPU=${CMAKE_HOST_SYSTEM_PROCESSOR}
|
||||
+ -DCMAKE_C_COMPILER=${CMAKE_HOST_C_COMPILER}
|
||||
+ -DCMAKE_CXX_COMPILER=${CMAKE_HOST_CXX_COMPILER}
|
||||
+ -DCMAKE_AR=${CMAKE_HOST_AR}
|
||||
+ -DCMAKE_NM=${CMAKE_HOST_NM}
|
||||
-DCMAKE_C_FLAGS=
|
||||
-DCMAKE_CXX_FLAGS=
|
||||
-DQT_FEATURE_qtwebengine_build=${QT_FEATURE_qtwebengine_build}
|
||||
diff --git a/src/host/CMakeLists.txt b/src/host/CMakeLists.txt
|
||||
index 2b92ebe85..e2ff58b35 100644
|
||||
--- a/src/host/CMakeLists.txt
|
||||
+++ b/src/host/CMakeLists.txt
|
||||
@@ -22,11 +22,11 @@ project(QtWebEngineConfigure
|
||||
find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core)
|
||||
|
||||
set(buildDir ${CMAKE_CURRENT_BINARY_DIR})
|
||||
-configure_gn_toolchain(host ${TEST_architecture_arch} ${TEST_architecture_arch}
|
||||
+configure_gn_toolchain(host ${CMAKE_HOST_SYSTEM_PROCESSOR} ${CMAKE_HOST_SYSTEM_PROCESSOR}
|
||||
${WEBENGINE_ROOT_SOURCE_DIR}/src/host/BUILD.toolchain.gn.in
|
||||
${buildDir}/host_toolchain
|
||||
)
|
||||
-get_v8_arch(GN_V8_HOST_CPU ${GN_TARGET_CPU} ${TEST_architecture_arch})
|
||||
+get_v8_arch(GN_V8_HOST_CPU ${GN_TARGET_CPU} ${CMAKE_HOST_SYSTEM_PROCESSOR})
|
||||
configure_gn_toolchain(v8 ${GN_V8_HOST_CPU} ${GN_TARGET_CPU}
|
||||
${WEBENGINE_ROOT_SOURCE_DIR}/src/host/BUILD.toolchain.gn.in
|
||||
${buildDir}/v8_toolchain)
|
|
@ -0,0 +1,14 @@
|
|||
diff --git a/cmake/Functions.cmake b/cmake/Functions.cmake
|
||||
index 03d19992f..5ce54ca9d 100644
|
||||
--- a/cmake/Functions.cmake
|
||||
+++ b/cmake/Functions.cmake
|
||||
@@ -720,9 +720,6 @@ endfunction()
|
||||
function(create_pkg_config_wrapper wrapperName wrapperCmd)
|
||||
file(WRITE ${wrapperName}
|
||||
"#!/bin/sh\n"
|
||||
- "unset PKG_CONFIG_LIBDIR\n"
|
||||
- "unset PKG_CONFIG_PATH\n"
|
||||
- "unset PKG_CONFIG_SYSROOT_DIR\n"
|
||||
"exec ${wrapperCmd} \"$@\""
|
||||
)
|
||||
file(CHMOD ${wrapperName} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE)
|
Loading…
Reference in New Issue