From e742c1bd001c2f8841f028003e7942e186f70526 Mon Sep 17 00:00:00 2001 From: Vasilito Date: Thu, 7 May 2026 09:11:15 +0100 Subject: [PATCH] fix: make Qt Redox CMake imports relocatable --- local/recipes/qt/redox-toolchain.cmake | 12 ++++++++---- recipes/wip/qt/qt5compat/recipe.toml | 16 ++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/local/recipes/qt/redox-toolchain.cmake b/local/recipes/qt/redox-toolchain.cmake index 34cf95b72..1ee4dbb1e 100644 --- a/local/recipes/qt/redox-toolchain.cmake +++ b/local/recipes/qt/redox-toolchain.cmake @@ -42,9 +42,9 @@ set(CMAKE_SYSTEM_VERSION 1) # Redox userspace currently must not emit CET/IBT entry instructions (endbr64), # because they trap as invalid opcode in the current runtime stack. -set(CMAKE_C_FLAGS "-fcf-protection=none -march=x86-64 -fpermissive -include strings.h" CACHE STRING "" FORCE) +set(CMAKE_C_FLAGS "-fcf-protection=none -march=x86-64 -include strings.h" CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS "-fcf-protection=none -march=x86-64 -fpermissive -include strings.h -I${COOKBOOK_SYSROOT}/usr/include/QtQml -I${COOKBOOK_SYSROOT}/usr/include/QtQuick" CACHE STRING "" FORCE) -set(CMAKE_C_FLAGS_RELEASE "-fcf-protection=none -march=x86-64 -fpermissive -include strings.h" CACHE STRING "" FORCE) +set(CMAKE_C_FLAGS_RELEASE "-fcf-protection=none -march=x86-64 -include strings.h" CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS_RELEASE "-fcf-protection=none -march=x86-64 -fpermissive -include strings.h" CACHE STRING "" FORCE) # Flag for redox.patch: enables REDOX-specific CMake code paths (mkspec, QPA plugin). @@ -65,10 +65,14 @@ set(CMAKE_CROSSCOMPILING TRUE) # COOKBOOK_HOST_SYSROOT is set to $(ROOT)/$(PREFIX_INSTALL) = prefix/x86_64-unknown-redox/sysroot # by mk/repo.mk and mk/prefix.mk. Fallback to hardcoded path if unset. if(NOT DEFINED COOKBOOK_HOST_SYSROOT OR COOKBOOK_HOST_SYSROOT STREQUAL "") - if(EXISTS "$ENV{HOME}/.redoxer/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcc") + get_filename_component(_redbear_repo_root "${CMAKE_CURRENT_LIST_DIR}/../../.." ABSOLUTE) + set(_redbear_prefix_sysroot "${_redbear_repo_root}/prefix/x86_64-unknown-redox/sysroot") + if(EXISTS "${_redbear_prefix_sysroot}/bin/x86_64-unknown-redox-gcc") + set(COOKBOOK_HOST_SYSROOT "${_redbear_prefix_sysroot}") + elseif(EXISTS "$ENV{HOME}/.redoxer/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcc") set(COOKBOOK_HOST_SYSROOT "$ENV{HOME}/.redoxer/x86_64-unknown-redox/toolchain") else() - set(COOKBOOK_HOST_SYSROOT "/mnt/data/homes/kellito/Builds/rbos/prefix/x86_64-unknown-redox/sysroot") + set(COOKBOOK_HOST_SYSROOT "${_redbear_prefix_sysroot}") endif() endif() diff --git a/recipes/wip/qt/qt5compat/recipe.toml b/recipes/wip/qt/qt5compat/recipe.toml index e5496b952..5b0bb0ab9 100644 --- a/recipes/wip/qt/qt5compat/recipe.toml +++ b/recipes/wip/qt/qt5compat/recipe.toml @@ -39,6 +39,7 @@ rm -f CMakeCache.txt rm -rf CMakeFiles cmake "${COOKBOOK_SOURCE}" \ + -G Ninja \ -DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \ -DQT_HOST_PATH="${HOST_BUILD}" \ -DCMAKE_INSTALL_PREFIX=/usr \ @@ -100,6 +101,21 @@ SYSROOT="${COOKBOOK_SYSROOT}" if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake" ]; then find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \ "s|/usr/include|${SYSROOT}/include|g" {} + 2>/dev/null || true + python3 - <<'PY' "${COOKBOOK_STAGE}/usr/lib/cmake" "${SYSROOT}" +from pathlib import Path +import sys + +cmake_dir = Path(sys.argv[1]) +sysroot = sys.argv[2] +for path in cmake_dir.rglob('*.cmake'): + text = path.read_text() + text = text.replace('${_IMPORT_PREFIX}/lib/', '${PACKAGE_PREFIX_DIR}/lib/') + text = text.replace(f'{sysroot}/lib/', '${PACKAGE_PREFIX_DIR}/lib/') + text = text.replace(f'{sysroot}/include', '${PACKAGE_PREFIX_DIR}/include') + text = text.replace('"/usr/lib/libQt6', '"${PACKAGE_PREFIX_DIR}/lib/libQt6') + text = text.replace('"/usr/include', '"${PACKAGE_PREFIX_DIR}/include') + path.write_text(text) +PY fi if [ -d "${COOKBOOK_STAGE}/usr/include" ]; then mkdir -p "${SYSROOT}/include"