fix: make Qt Redox CMake imports relocatable
This commit is contained in:
@@ -42,9 +42,9 @@ set(CMAKE_SYSTEM_VERSION 1)
|
|||||||
|
|
||||||
# Redox userspace currently must not emit CET/IBT entry instructions (endbr64),
|
# Redox userspace currently must not emit CET/IBT entry instructions (endbr64),
|
||||||
# because they trap as invalid opcode in the current runtime stack.
|
# 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_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)
|
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).
|
# 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
|
# 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.
|
# 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(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")
|
set(COOKBOOK_HOST_SYSROOT "$ENV{HOME}/.redoxer/x86_64-unknown-redox/toolchain")
|
||||||
else()
|
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()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ rm -f CMakeCache.txt
|
|||||||
rm -rf CMakeFiles
|
rm -rf CMakeFiles
|
||||||
|
|
||||||
cmake "${COOKBOOK_SOURCE}" \
|
cmake "${COOKBOOK_SOURCE}" \
|
||||||
|
-G Ninja \
|
||||||
-DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \
|
-DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \
|
||||||
-DQT_HOST_PATH="${HOST_BUILD}" \
|
-DQT_HOST_PATH="${HOST_BUILD}" \
|
||||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||||
@@ -100,6 +101,21 @@ SYSROOT="${COOKBOOK_SYSROOT}"
|
|||||||
if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake" ]; then
|
if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake" ]; then
|
||||||
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
"s|/usr/include|${SYSROOT}/include|g" {} + 2>/dev/null || true
|
"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
|
fi
|
||||||
if [ -d "${COOKBOOK_STAGE}/usr/include" ]; then
|
if [ -d "${COOKBOOK_STAGE}/usr/include" ]; then
|
||||||
mkdir -p "${SYSROOT}/include"
|
mkdir -p "${SYSROOT}/include"
|
||||||
|
|||||||
Reference in New Issue
Block a user