Advance KDE Plasma and Qt integration
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
#TODO: Qt6 Qt5Compat — cross-compiled for Redox. The core5 compatibility library is expected to build now; QtQuick-backed imports remain optional until the wider QML runtime stack is validated.
|
||||
# Provides: libQt6Core5Compat (and QML imports only when QtQuick is already present in the sysroot).
|
||||
|
||||
[source]
|
||||
tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qt5compat-everywhere-src-6.11.0.tar.xz"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
dependencies = [
|
||||
"qtbase",
|
||||
"libiconv",
|
||||
]
|
||||
script = """
|
||||
DYNAMIC_INIT
|
||||
|
||||
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
||||
|
||||
python - <<'PY'
|
||||
import os
|
||||
from pathlib import Path
|
||||
path = Path(os.environ["COOKBOOK_SOURCE"]) / "cmake/FindWrapIconv.cmake"
|
||||
text = path.read_text()
|
||||
text = text.replace('set(CMAKE_REQUIRE_LIBRARIES "iconv")', 'set(CMAKE_REQUIRE_LIBRARIES "iconv;libiconv")')
|
||||
text = text.replace('target_link_libraries(WrapIconv::WrapIconv INTERFACE iconv)', 'target_link_libraries(WrapIconv::WrapIconv INTERFACE iconv libiconv)')
|
||||
text = text.replace('set(WrapIconv_FOUND 1)', 'if(HAVE_ICONV OR HAVE_ICONV_WITH_LIB)\\n set(WrapIconv_FOUND ON)\\nelse()\\n set(WrapIconv_FOUND OFF)\\nendif()')
|
||||
path.write_text(text)
|
||||
PY
|
||||
|
||||
# Sysroot path fix: the cookbook only symlinks sysroot/{bin,include,lib,share} -> usr/
|
||||
# but Qt6 cmake targets reference ${_IMPORT_PREFIX}/{plugins,mkspecs,metatypes,modules}.
|
||||
for qtdir in plugins mkspecs metatypes modules; do
|
||||
if [ -d "${COOKBOOK_SYSROOT}/usr/${qtdir}" ] && [ ! -e "${COOKBOOK_SYSROOT}/${qtdir}" ]; then
|
||||
ln -s "usr/${qtdir}" "${COOKBOOK_SYSROOT}/${qtdir}"
|
||||
fi
|
||||
done
|
||||
|
||||
rm -f CMakeCache.txt
|
||||
rm -rf CMakeFiles
|
||||
|
||||
cmake "${COOKBOOK_SOURCE}" \
|
||||
-DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \
|
||||
-DQT_HOST_PATH="${HOST_BUILD}" \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}" \
|
||||
-DQT_BUILD_EXAMPLES=OFF \
|
||||
-DQT_BUILD_TESTS=OFF \
|
||||
-DQT_GENERATE_SBOM=OFF \
|
||||
-Wno-dev
|
||||
|
||||
cmake --build . -j"${COOKBOOK_MAKE_JOBS}"
|
||||
|
||||
cmake --install . --prefix "${COOKBOOK_STAGE}/usr"
|
||||
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib"
|
||||
for lib in lib/libQt6*.so*; do
|
||||
[ -f "${lib}" ] && cp -an "${lib}" "${COOKBOOK_STAGE}/usr/lib/"
|
||||
done
|
||||
for lib in lib/libQt6*.a; do
|
||||
[ -f "${lib}" ] && cp -an "${lib}" "${COOKBOOK_STAGE}/usr/lib/"
|
||||
done
|
||||
|
||||
if [ -d "lib/cmake" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib/cmake"
|
||||
cp -a lib/cmake/Qt6* "${COOKBOOK_STAGE}/usr/lib/cmake/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "lib/pkgconfig" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib/pkgconfig"
|
||||
cp -a lib/pkgconfig/*.pc "${COOKBOOK_STAGE}/usr/lib/pkgconfig/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "include" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/include"
|
||||
cp -a include/* "${COOKBOOK_STAGE}/usr/include/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "plugins" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/plugins"
|
||||
cp -a plugins/* "${COOKBOOK_STAGE}/usr/plugins/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "qml" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/qml"
|
||||
cp -a qml/* "${COOKBOOK_STAGE}/usr/qml/" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
for lib in "${COOKBOOK_STAGE}/usr/lib/libQt6"*.so.*; do
|
||||
[ -f "${lib}" ] || continue
|
||||
patchelf --remove-rpath "${lib}" 2>/dev/null || true
|
||||
done
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/plugins" ]; then
|
||||
find "${COOKBOOK_STAGE}/usr/plugins" -name '*.so' -exec patchelf --remove-rpath {} + 2>/dev/null || true
|
||||
fi
|
||||
|
||||
BUILD_DIR="${COOKBOOK_BUILD}"
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake" ]; then
|
||||
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||
"s|${BUILD_DIR}|/usr|g" {} + 2>/dev/null || true
|
||||
fi
|
||||
|
||||
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
|
||||
fi
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/include" ]; then
|
||||
mkdir -p "${SYSROOT}/include"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/include/"* "${SYSROOT}/include/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake" ]; then
|
||||
mkdir -p "${SYSROOT}/lib/cmake"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/lib/cmake/Qt6"* "${SYSROOT}/lib/cmake/" 2>/dev/null || true
|
||||
fi
|
||||
mkdir -p "${SYSROOT}/lib"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/lib/libQt6"* "${SYSROOT}/lib/" 2>/dev/null || true
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/plugins" ]; then
|
||||
mkdir -p "${SYSROOT}/plugins"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/plugins/"* "${SYSROOT}/plugins/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/qml" ]; then
|
||||
mkdir -p "${SYSROOT}/qml"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/qml/"* "${SYSROOT}/qml/" 2>/dev/null || true
|
||||
fi
|
||||
"""
|
||||
@@ -1,5 +1,5 @@
|
||||
#TODO: Qt6 base — qtbase compiled with Core+Concurrent+Xml+Gui+Widgets+DBus. Runtime validation pending.
|
||||
# Scope: software rendering (no EGL/OpenGL), no Network/SQL/PrintSupport/TestLib.
|
||||
#TODO: Qt6 base — qtbase compiled with Core+Concurrent+Xml+Gui+Widgets+DBus+OpenGL+EGL. Runtime validation pending.
|
||||
# OpenGL/EGL enabled (software via Mesa/LLVMpipe; hardware acceleration requires kernel DMA-BUF).
|
||||
# Re-enable path: see local/docs/QT6-PORT-STATUS.md
|
||||
# Redox platform detection and syscall adaptations in redox.patch
|
||||
[source]
|
||||
@@ -59,19 +59,28 @@ done
|
||||
# with these tools during the target build.
|
||||
# ============================================================
|
||||
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
||||
if [ ! -f "${HOST_BUILD}/bin/moc" ]; then
|
||||
HOST_PROFILE="qtbase-host-6.11.0-gui-xml-wayland-no-qdbus-tools"
|
||||
HOST_STAMP="${HOST_BUILD}/.redbear-host-profile"
|
||||
HOST_PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl"
|
||||
python - <<'PY'
|
||||
import os
|
||||
from pathlib import Path
|
||||
path = Path(os.environ["COOKBOOK_SOURCE"]) / "src/tools/CMakeLists.txt"
|
||||
text = path.read_text()
|
||||
old = " add_subdirectory(qdbuscpp2xml)\\n add_subdirectory(qdbusxml2cpp)\\n"
|
||||
new = " # add_subdirectory(qdbuscpp2xml) # disabled for Redox Qt Wave 1\\n # add_subdirectory(qdbusxml2cpp) # disabled for Redox Qt Wave 1\\n"
|
||||
text = text.replace(old, new)
|
||||
path.write_text(text)
|
||||
PY
|
||||
if [ -d "${HOST_BUILD}" ] && { [ ! -f "${HOST_STAMP}" ] || [ "$(cat "${HOST_STAMP}" 2>/dev/null)" != "${HOST_PROFILE}" ]; }; then
|
||||
rm -rf "${HOST_BUILD}"
|
||||
fi
|
||||
if [ ! -f "${HOST_BUILD}/bin/moc" ] || [ ! -f "${HOST_STAMP}" ]; then
|
||||
echo "=== Building Qt host tools ==="
|
||||
mkdir -p "${HOST_BUILD}"
|
||||
env \
|
||||
-u CPPFLAGS \
|
||||
-u LDFLAGS \
|
||||
-u PKG_CONFIG_ALLOW_CROSS \
|
||||
-u PKG_CONFIG_PATH \
|
||||
-u PKG_CONFIG_LIBDIR \
|
||||
-u PKG_CONFIG_SYSROOT_DIR \
|
||||
-u CFLAGS_x86_64_unknown_redox \
|
||||
-u CXXFLAGS_x86_64_unknown_redox \
|
||||
-u LDFLAGS_x86_64_unknown_redox \
|
||||
env -i \
|
||||
HOME="${HOME}" \
|
||||
PATH="${HOST_PATH}" \
|
||||
cmake -S "${COOKBOOK_SOURCE}" -B "${HOST_BUILD}" \
|
||||
-DCMAKE_C_COMPILER=/usr/bin/cc \
|
||||
-DCMAKE_CXX_COMPILER=/usr/bin/c++ \
|
||||
@@ -84,7 +93,7 @@ if [ ! -f "${HOST_BUILD}/bin/moc" ]; then
|
||||
-DQT_BUILD_EXAMPLES=OFF \
|
||||
-DQT_BUILD_TESTS=OFF \
|
||||
-DFEATURE_glib=OFF \
|
||||
-DFEATURE_gui=OFF \
|
||||
-DFEATURE_gui=ON \
|
||||
-DFEATURE_widgets=OFF \
|
||||
-DFEATURE_opengl=OFF \
|
||||
-DFEATURE_network=OFF \
|
||||
@@ -92,21 +101,17 @@ if [ ! -f "${HOST_BUILD}/bin/moc" ]; then
|
||||
-DFEATURE_openssl=OFF \
|
||||
-DFEATURE_sql=OFF \
|
||||
-DFEATURE_testlib=OFF \
|
||||
-DFEATURE_xml=OFF \
|
||||
-DFEATURE_wayland=ON \
|
||||
-DFEATURE_qtwaylandscanner=ON \
|
||||
-Wno-dev
|
||||
env \
|
||||
-u CPPFLAGS \
|
||||
-u LDFLAGS \
|
||||
-u PKG_CONFIG_ALLOW_CROSS \
|
||||
-u PKG_CONFIG_PATH \
|
||||
-u PKG_CONFIG_LIBDIR \
|
||||
-u PKG_CONFIG_SYSROOT_DIR \
|
||||
-u CFLAGS_x86_64_unknown_redox \
|
||||
-u CXXFLAGS_x86_64_unknown_redox \
|
||||
-u LDFLAGS_x86_64_unknown_redox \
|
||||
-DFEATURE_xml=ON \
|
||||
-DFEATURE_wayland=ON \
|
||||
-DFEATURE_qtwaylandscanner=ON \
|
||||
-Wno-dev
|
||||
env -i \
|
||||
HOME="${HOME}" \
|
||||
PATH="${HOST_PATH}" \
|
||||
cmake --build "${HOST_BUILD}" --target host_tools -j"${COOKBOOK_MAKE_JOBS}"
|
||||
mkdir -p "${HOST_BUILD}/include/QtGui/6.11.0/QtGui"
|
||||
mkdir -p "${HOST_BUILD}/include/QtDBus/6.11.0/QtDBus"
|
||||
printf '%s\n' "${HOST_PROFILE}" > "${HOST_STAMP}"
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
|
||||
@@ -323,7 +323,7 @@ diff -ruwN source-old/src/corelib/plugin/qelfparser_p.cpp source/src/corelib/plu
|
||||
diff -ruwN source-old/src/corelib/plugin/qlibrary.cpp source/src/corelib/plugin/qlibrary.cpp
|
||||
--- source-old/src/corelib/plugin/qlibrary.cpp 2024-12-02 05:39:06.000000000 +0000
|
||||
+++ source/src/corelib/plugin/qlibrary.cpp 2026-04-16 00:00:00.000000000 +0000
|
||||
@@ -232,24 +232,35 @@
|
||||
@@ -232,24 +232,37 @@
|
||||
qsizetype fdlen = qMin(file.size(), MaxMemoryMapSize);
|
||||
- const char *filedata = reinterpret_cast<char *>(file.map(0, fdlen));
|
||||
+ const char *filedata = nullptr;
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
#TODO: Qt6 image format plugins — cross-compiled for Redox. Runtime validation of staged imageformat plugins is still pending.
|
||||
# Provides: Qt imageformat plugins (jpeg, webp, tiff, icns, tga, wbmp, etc.) for QtGui/QImageReader.
|
||||
[source]
|
||||
tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qtimageformats-everywhere-src-6.11.0.tar.xz"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
dependencies = [
|
||||
"qtbase",
|
||||
]
|
||||
script = """
|
||||
DYNAMIC_INIT
|
||||
|
||||
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
||||
|
||||
# Sysroot path fix: same as qtsvg/qtdeclarative — cookbook only symlinks
|
||||
# sysroot/{bin,include,lib,share} but Qt6 cmake targets reference
|
||||
# ${_IMPORT_PREFIX}/{plugins,mkspecs,metatypes,modules}.
|
||||
for qtdir in plugins mkspecs metatypes modules; do
|
||||
if [ -d "${COOKBOOK_SYSROOT}/usr/${qtdir}" ] && [ ! -e "${COOKBOOK_SYSROOT}/${qtdir}" ]; then
|
||||
ln -s "usr/${qtdir}" "${COOKBOOK_SYSROOT}/${qtdir}"
|
||||
fi
|
||||
done
|
||||
|
||||
rm -f CMakeCache.txt
|
||||
rm -rf CMakeFiles
|
||||
|
||||
cmake "${COOKBOOK_SOURCE}" \
|
||||
-DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \
|
||||
-DQT_HOST_PATH="${HOST_BUILD}" \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}" \
|
||||
-DQT_BUILD_EXAMPLES=OFF \
|
||||
-DQT_BUILD_TESTS=OFF \
|
||||
-DQT_GENERATE_SBOM=OFF \
|
||||
-Wno-dev
|
||||
|
||||
cmake --build . -j${COOKBOOK_MAKE_JOBS}
|
||||
|
||||
cmake --install . --prefix "${COOKBOOK_STAGE}/usr"
|
||||
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib"
|
||||
for lib in lib/libQt6*.so*; do
|
||||
[ -f "${lib}" ] && cp -an "${lib}" "${COOKBOOK_STAGE}/usr/lib/"
|
||||
done
|
||||
for lib in lib/libQt6*.a; do
|
||||
[ -f "${lib}" ] && cp -an "${lib}" "${COOKBOOK_STAGE}/usr/lib/"
|
||||
done
|
||||
|
||||
if [ -d "lib/cmake" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib/cmake"
|
||||
cp -a lib/cmake/Qt6* "${COOKBOOK_STAGE}/usr/lib/cmake/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "lib/pkgconfig" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib/pkgconfig"
|
||||
cp -a lib/pkgconfig/*.pc "${COOKBOOK_STAGE}/usr/lib/pkgconfig/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "include" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/include"
|
||||
cp -a include/* "${COOKBOOK_STAGE}/usr/include/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "plugins" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/plugins"
|
||||
cp -a plugins/* "${COOKBOOK_STAGE}/usr/plugins/" 2>/dev/null || true
|
||||
mkdir -p "${COOKBOOK_STAGE}/plugins"
|
||||
cp -a plugins/* "${COOKBOOK_STAGE}/plugins/" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
for lib in "${COOKBOOK_STAGE}/usr/lib/libQt6"*.so.*; do
|
||||
[ -f "${lib}" ] || continue
|
||||
patchelf --remove-rpath "${lib}" 2>/dev/null || true
|
||||
done
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/plugins" ]; then
|
||||
find "${COOKBOOK_STAGE}/usr/plugins" -name '*.so' -exec patchelf --remove-rpath {} + 2>/dev/null || true
|
||||
fi
|
||||
|
||||
BUILD_DIR="${COOKBOOK_BUILD}"
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake" ]; then
|
||||
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||
"s|${BUILD_DIR}|/usr|g" {} + 2>/dev/null || true
|
||||
fi
|
||||
|
||||
SYSROOT="${COOKBOOK_SYSROOT}"
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/include" ]; then
|
||||
mkdir -p "${SYSROOT}/include"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/include/"* "${SYSROOT}/include/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/plugins" ]; then
|
||||
mkdir -p "${SYSROOT}/plugins"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/plugins/"* "${SYSROOT}/plugins/" 2>/dev/null || true
|
||||
fi
|
||||
mkdir -p "${SYSROOT}/lib"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/lib/libQt6"* "${SYSROOT}/lib/" 2>/dev/null || true
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake/Qt6ImageFormats" ]; then
|
||||
mkdir -p "${SYSROOT}/lib/cmake/Qt6ImageFormats"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/lib/cmake/Qt6ImageFormats/"* "${SYSROOT}/lib/cmake/Qt6ImageFormats/" 2>/dev/null || true
|
||||
fi
|
||||
"""
|
||||
@@ -0,0 +1,131 @@
|
||||
#TODO: Qt6 SCXML/StateMachine — cross-build recipe for the 6.11 Redox Qt stack. Runtime validation is still pending, and the optional QML/Quick-facing slice only builds when those Qt modules are present in the sysroot.
|
||||
|
||||
[source]
|
||||
tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qtscxml-everywhere-src-6.11.0.tar.xz"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
dependencies = [
|
||||
"qtbase",
|
||||
]
|
||||
script = """
|
||||
DYNAMIC_INIT
|
||||
|
||||
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
||||
|
||||
# Sysroot path fix: the cookbook only symlinks sysroot/{bin,include,lib,share} → usr/
|
||||
# but Qt6 cmake targets reference ${_IMPORT_PREFIX}/{plugins,mkspecs,metatypes,modules}.
|
||||
for qtdir in plugins mkspecs metatypes modules; do
|
||||
if [ -d "${COOKBOOK_SYSROOT}/usr/${qtdir}" ] && [ ! -e "${COOKBOOK_SYSROOT}/${qtdir}" ]; then
|
||||
ln -s "usr/${qtdir}" "${COOKBOOK_SYSROOT}/${qtdir}"
|
||||
fi
|
||||
done
|
||||
|
||||
rm -f CMakeCache.txt
|
||||
rm -rf CMakeFiles
|
||||
|
||||
cmake "${COOKBOOK_SOURCE}" \
|
||||
-DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \
|
||||
-DQT_HOST_PATH="${HOST_BUILD}" \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}" \
|
||||
-DQT_BUILD_EXAMPLES=OFF \
|
||||
-DQT_BUILD_TESTS=OFF \
|
||||
-DQT_GENERATE_SBOM=OFF \
|
||||
-Wno-dev
|
||||
|
||||
cmake --build . -j"${COOKBOOK_MAKE_JOBS}"
|
||||
|
||||
cmake --install . --prefix "${COOKBOOK_STAGE}/usr"
|
||||
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib"
|
||||
for lib in lib/libQt6*.so*; do
|
||||
[ -f "${lib}" ] && cp -an "${lib}" "${COOKBOOK_STAGE}/usr/lib/"
|
||||
done
|
||||
for lib in lib/libQt6*.a; do
|
||||
[ -f "${lib}" ] && cp -an "${lib}" "${COOKBOOK_STAGE}/usr/lib/"
|
||||
done
|
||||
|
||||
if [ -d "bin" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/bin"
|
||||
cp -a bin/* "${COOKBOOK_STAGE}/usr/bin/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "libexec" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/libexec"
|
||||
cp -a libexec/* "${COOKBOOK_STAGE}/usr/libexec/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "lib/cmake" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib/cmake"
|
||||
cp -a lib/cmake/Qt6* "${COOKBOOK_STAGE}/usr/lib/cmake/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "lib/pkgconfig" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib/pkgconfig"
|
||||
cp -a lib/pkgconfig/*.pc "${COOKBOOK_STAGE}/usr/lib/pkgconfig/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "include" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/include"
|
||||
cp -a include/* "${COOKBOOK_STAGE}/usr/include/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "plugins" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/plugins"
|
||||
cp -a plugins/* "${COOKBOOK_STAGE}/usr/plugins/" 2>/dev/null || true
|
||||
mkdir -p "${COOKBOOK_STAGE}/plugins"
|
||||
cp -a plugins/* "${COOKBOOK_STAGE}/plugins/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "qml" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/qml"
|
||||
cp -a qml/* "${COOKBOOK_STAGE}/usr/qml/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "translations" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/translations"
|
||||
cp -a translations/* "${COOKBOOK_STAGE}/usr/translations/" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
for lib in "${COOKBOOK_STAGE}/usr/lib/libQt6"*.so.*; do
|
||||
[ -f "${lib}" ] || continue
|
||||
patchelf --remove-rpath "${lib}" 2>/dev/null || true
|
||||
done
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/plugins" ]; then
|
||||
find "${COOKBOOK_STAGE}/usr/plugins" -name '*.so' -exec patchelf --remove-rpath {} + 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/qml" ]; then
|
||||
find "${COOKBOOK_STAGE}/usr/qml" -name '*.so' -exec patchelf --remove-rpath {} + 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/bin" ]; then
|
||||
find "${COOKBOOK_STAGE}/usr/bin" -type f -exec patchelf --remove-rpath {} + 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/libexec" ]; then
|
||||
find "${COOKBOOK_STAGE}/usr/libexec" -type f -exec patchelf --remove-rpath {} + 2>/dev/null || true
|
||||
fi
|
||||
|
||||
BUILD_DIR="${COOKBOOK_BUILD}"
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake" ]; then
|
||||
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||
"s|${BUILD_DIR}|/usr|g" {} + 2>/dev/null || true
|
||||
fi
|
||||
|
||||
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
|
||||
fi
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/include" ]; then
|
||||
mkdir -p "${SYSROOT}/include"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/include/"* "${SYSROOT}/include/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake" ]; then
|
||||
mkdir -p "${SYSROOT}/lib/cmake"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/lib/cmake/Qt6"* "${SYSROOT}/lib/cmake/" 2>/dev/null || true
|
||||
fi
|
||||
mkdir -p "${SYSROOT}/lib"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/lib/libQt6"* "${SYSROOT}/lib/" 2>/dev/null || true
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/plugins" ]; then
|
||||
mkdir -p "${SYSROOT}/plugins"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/plugins/"* "${SYSROOT}/plugins/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/qml" ]; then
|
||||
mkdir -p "${SYSROOT}/qml"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/qml/"* "${SYSROOT}/qml/" 2>/dev/null || true
|
||||
fi
|
||||
"""
|
||||
@@ -0,0 +1,89 @@
|
||||
#TODO: Qt6 SerialPort module — cross-compiled for Redox, but runtime validation against real serial devices is still pending.
|
||||
# Provides: libQt6SerialPort and CMake/pkg-config metadata for downstream Qt serial consumers.
|
||||
|
||||
[source]
|
||||
tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qtserialport-everywhere-src-6.11.0.tar.xz"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
dependencies = [
|
||||
"qtbase",
|
||||
]
|
||||
script = """
|
||||
DYNAMIC_INIT
|
||||
|
||||
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
||||
|
||||
# Sysroot path fix: same as other Qt6 modules — cookbook only symlinks
|
||||
# sysroot/{bin,include,lib,share} but Qt6 cmake targets reference
|
||||
# ${_IMPORT_PREFIX}/{plugins,mkspecs,metatypes,modules}.
|
||||
for qtdir in plugins mkspecs metatypes modules; do
|
||||
if [ -d "${COOKBOOK_SYSROOT}/usr/${qtdir}" ] && [ ! -e "${COOKBOOK_SYSROOT}/${qtdir}" ]; then
|
||||
ln -s "usr/${qtdir}" "${COOKBOOK_SYSROOT}/${qtdir}"
|
||||
fi
|
||||
done
|
||||
|
||||
rm -f CMakeCache.txt
|
||||
rm -rf CMakeFiles
|
||||
|
||||
cmake "${COOKBOOK_SOURCE}" \
|
||||
-DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \
|
||||
-DQT_HOST_PATH="${HOST_BUILD}" \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}" \
|
||||
-DQT_BUILD_EXAMPLES=OFF \
|
||||
-DQT_BUILD_TESTS=OFF \
|
||||
-DQT_GENERATE_SBOM=OFF \
|
||||
-Wno-dev
|
||||
|
||||
cmake --build . -j${COOKBOOK_MAKE_JOBS}
|
||||
|
||||
cmake --install . --prefix "${COOKBOOK_STAGE}/usr"
|
||||
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib"
|
||||
for lib in lib/libQt6*.so*; do
|
||||
[ -f "${lib}" ] && cp -an "${lib}" "${COOKBOOK_STAGE}/usr/lib/"
|
||||
done
|
||||
for lib in lib/libQt6*.a; do
|
||||
[ -f "${lib}" ] && cp -an "${lib}" "${COOKBOOK_STAGE}/usr/lib/"
|
||||
done
|
||||
|
||||
if [ -d "lib/cmake" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib/cmake"
|
||||
cp -a lib/cmake/Qt6* "${COOKBOOK_STAGE}/usr/lib/cmake/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "lib/pkgconfig" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib/pkgconfig"
|
||||
cp -a lib/pkgconfig/*.pc "${COOKBOOK_STAGE}/usr/lib/pkgconfig/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "include" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/include"
|
||||
cp -a include/* "${COOKBOOK_STAGE}/usr/include/" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
for lib in "${COOKBOOK_STAGE}/usr/lib/libQt6"*.so.*; do
|
||||
[ -f "${lib}" ] || continue
|
||||
patchelf --remove-rpath "${lib}" 2>/dev/null || true
|
||||
done
|
||||
|
||||
BUILD_DIR="${COOKBOOK_BUILD}"
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake" ]; then
|
||||
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||
"s|${BUILD_DIR}|/usr|g" {} + 2>/dev/null || true
|
||||
fi
|
||||
|
||||
SYSROOT="${COOKBOOK_SYSROOT}"
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/include" ]; then
|
||||
mkdir -p "${SYSROOT}/include"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/include/"* "${SYSROOT}/include/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake/Qt6SerialPort" ]; then
|
||||
find "${COOKBOOK_STAGE}/usr/lib/cmake/Qt6SerialPort" -name '*.cmake' -exec sed -i \
|
||||
"s|/usr/include|${SYSROOT}/include|g" {} + 2>/dev/null || true
|
||||
mkdir -p "${SYSROOT}/lib/cmake/Qt6SerialPort"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/lib/cmake/Qt6SerialPort/"* "${SYSROOT}/lib/cmake/Qt6SerialPort/" 2>/dev/null || true
|
||||
fi
|
||||
mkdir -p "${SYSROOT}/lib"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/lib/libQt6"* "${SYSROOT}/lib/" 2>/dev/null || true
|
||||
"""
|
||||
@@ -0,0 +1,267 @@
|
||||
#TODO: Qt6 shader tools — provides libQt6ShaderTools and the qsb host tool used by
|
||||
# Qt Quick for runtime shader compilation. Host-side Qt6ShaderToolsTools metadata and qsb
|
||||
# must be propagated into the shared QT_HOST_PATH for downstream modules to configure cleanly.
|
||||
# Depends on qtbase being built first.
|
||||
[build]
|
||||
template = "custom"
|
||||
dependencies = [
|
||||
"qtbase",
|
||||
]
|
||||
script = """
|
||||
DYNAMIC_INIT
|
||||
|
||||
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
||||
SHADER_HOST="${COOKBOOK_ROOT}/build/qt-shadertools-host"
|
||||
|
||||
mkdir -p "${HOST_BUILD}/include/QtGui/6.11.0/QtGui"
|
||||
|
||||
QTBASE_STAGE="${COOKBOOK_ROOT}/recipes/wip/qt/qtbase/target/${TARGET}/stage/usr"
|
||||
if [ -d "${QTBASE_STAGE}/include/QtGui" ] && [ ! -d "${COOKBOOK_SYSROOT}/include/QtGui" ]; then
|
||||
mkdir -p "${COOKBOOK_SYSROOT}/include"
|
||||
cp -a "${QTBASE_STAGE}/include/QtGui" "${COOKBOOK_SYSROOT}/include/"
|
||||
fi
|
||||
if [ -d "${QTBASE_STAGE}/lib" ]; then
|
||||
mkdir -p "${HOST_BUILD}/lib"
|
||||
cp -a "${QTBASE_STAGE}/lib/libQt6Gui.so"* "${HOST_BUILD}/lib/" 2>/dev/null || true
|
||||
cp -a "${QTBASE_STAGE}/lib/libQt6Gui.prl" "${HOST_BUILD}/lib/" 2>/dev/null || true
|
||||
fi
|
||||
QTBASE_BUILD_INCLUDE="${COOKBOOK_ROOT}/recipes/wip/qt/qtbase/target/${TARGET}/build/include/QtGui"
|
||||
if [ -d "${QTBASE_BUILD_INCLUDE}/6.11.0/QtGui/rhi" ]; then
|
||||
mkdir -p "${COOKBOOK_SYSROOT}/include/QtGui/6.11.0"
|
||||
cp -a "${QTBASE_BUILD_INCLUDE}/6.11.0/QtGui" "${COOKBOOK_SYSROOT}/include/QtGui/6.11.0/"
|
||||
mkdir -p "${COOKBOOK_SYSROOT}/include"
|
||||
cp -a "${QTBASE_BUILD_INCLUDE}/6.11.0/QtGui/rhi" "${COOKBOOK_SYSROOT}/include/"
|
||||
fi
|
||||
export CPPFLAGS="${CPPFLAGS} -I${COOKBOOK_SYSROOT}/include -I${COOKBOOK_SYSROOT}/include/QtGui/6.11.0/QtGui"
|
||||
export CFLAGS="${CFLAGS} -I${COOKBOOK_SYSROOT}/include -I${COOKBOOK_SYSROOT}/include/QtGui/6.11.0/QtGui"
|
||||
export CXXFLAGS="${CXXFLAGS} -I${COOKBOOK_SYSROOT}/include -I${COOKBOOK_SYSROOT}/include/QtGui/6.11.0/QtGui"
|
||||
|
||||
python - <<'PY'
|
||||
import os
|
||||
from pathlib import Path
|
||||
root = Path(os.environ["COOKBOOK_ROOT"])
|
||||
sysroot = Path(os.environ["COOKBOOK_SYSROOT"])
|
||||
src = Path(os.environ["COOKBOOK_SOURCE"]) / "src/shadertools"
|
||||
shim_dir = src / "redbear_rhi"
|
||||
shim_dir.mkdir(exist_ok=True)
|
||||
|
||||
qshader_src = (root / "recipes/wip/qt/qtbase/source/src/gui/rhi/qshader.h").read_text()
|
||||
qguiglobal_src = (sysroot / "include/QtGui/qtguiglobal.h").read_text()
|
||||
qguiglobal_src = qguiglobal_src.replace('#include <QtCore/qglobal.h>', f'#include "{sysroot / "include/QtCore/qglobal.h"}"')
|
||||
qguiglobal_src = qguiglobal_src.replace('#include <QtGui/qtgui-config.h>', f'#include "{sysroot / "include/QtGui/qtgui-config.h"}"')
|
||||
qguiglobal_src = qguiglobal_src.replace('#include <QtGui/qtguiexports.h>', f'#include "{sysroot / "include/QtGui/qtguiexports.h"}"')
|
||||
(shim_dir / 'qtguiglobal_redbear.h').write_text(qguiglobal_src)
|
||||
|
||||
qshader_src = qshader_src.replace('#include <QtGui/qtguiglobal.h>', '#include "qtguiglobal_redbear.h"')
|
||||
qshader_src = qshader_src.replace('#include <QtCore/qhash.h>', f'#include "{sysroot / "include/QtCore/qhash.h"}"')
|
||||
qshader_src = qshader_src.replace('#include <QtCore/qmap.h>', f'#include "{sysroot / "include/QtCore/qmap.h"}"')
|
||||
qshader_src = qshader_src.replace('#include <rhi/qshaderdescription.h>', '#include "qshaderdescription_redbear.h"')
|
||||
(shim_dir / 'qshader_redbear.h').write_text(qshader_src)
|
||||
|
||||
qshaderdesc_src = (root / "recipes/wip/qt/qtbase/source/src/gui/rhi/qshaderdescription.h").read_text()
|
||||
qshaderdesc_src = qshaderdesc_src.replace('#include <QtGui/qtguiglobal.h>', '#include "qtguiglobal_redbear.h"')
|
||||
qshaderdesc_src = qshaderdesc_src.replace('#include <QtCore/qstring.h>', f'#include "{sysroot / "include/QtCore/qstring.h"}"')
|
||||
qshaderdesc_src = qshaderdesc_src.replace('#include <QtCore/qlist.h>', f'#include "{sysroot / "include/QtCore/qlist.h"}"')
|
||||
(shim_dir / 'qshaderdescription_redbear.h').write_text(qshaderdesc_src)
|
||||
|
||||
qshaderdesc_p_src = (root / "recipes/wip/qt/qtbase/source/src/gui/rhi/qshaderdescription_p.h").read_text()
|
||||
qshaderdesc_p_src = qshaderdesc_p_src.replace('#include <rhi/qshaderdescription.h>', '#include "qshaderdescription_redbear.h"')
|
||||
qshaderdesc_p_src = qshaderdesc_p_src.replace('#include <QtCore/QList>', f'#include "{sysroot / "include/QtCore/QList"}"')
|
||||
qshaderdesc_p_src = qshaderdesc_p_src.replace('#include <QtCore/QAtomicInt>', f'#include "{sysroot / "include/QtCore/QAtomicInt"}"')
|
||||
qshaderdesc_p_src = qshaderdesc_p_src.replace('#include <QtCore/QJsonDocument>', f'#include "{sysroot / "include/QtCore/QJsonDocument"}"')
|
||||
(shim_dir / 'qshaderdescription_p_redbear.h').write_text(qshaderdesc_p_src)
|
||||
|
||||
qshader_p_src = (root / "recipes/wip/qt/qtbase/source/src/gui/rhi/qshader_p.h").read_text()
|
||||
qtguiglobal_p_src = (root / "recipes/wip/qt/qtbase/source/src/gui/kernel/qtguiglobal_p.h").read_text()
|
||||
qglobal_p_src = (root / "recipes/wip/qt/qtbase/source/src/corelib/global/qglobal_p.h").read_text()
|
||||
qtcoreglobal_p_src = (root / "recipes/wip/qt/qtbase/source/src/corelib/global/qtcoreglobal_p.h").read_text()
|
||||
qtcoreglobal_p_src = qtcoreglobal_p_src.replace('#include <QtCore/qglobal.h>', f'#include "{sysroot / "include/QtCore/qglobal.h"}"')
|
||||
qtcoreglobal_p_src = qtcoreglobal_p_src.replace('#include <QtCore/private/qconfig_p.h>', f'#include "{root / "recipes/wip/qt/qtbase/target" / os.environ["TARGET"] / "stage/usr/include/QtCore/6.11.0/QtCore/private/qconfig_p.h"}"')
|
||||
(shim_dir / 'qtcoreglobal_p_redbear.h').write_text(qtcoreglobal_p_src)
|
||||
|
||||
qglobal_p_src = qglobal_p_src.replace('#include "qglobal.h"', f'#include "{sysroot / "include/QtCore/qglobal.h"}"')
|
||||
qglobal_p_src = qglobal_p_src.replace('#include "qglobal_p.h" // include self to avoid syncqt warning - no-op', '// self-include removed for Red Bear shim')
|
||||
qglobal_p_src = qglobal_p_src.replace('#include <QtCore/private/qtcoreglobal_p.h>', '#include "qtcoreglobal_p_redbear.h"')
|
||||
(shim_dir / 'qglobal_p_redbear.h').write_text(qglobal_p_src)
|
||||
|
||||
qtguiglobal_p_src = qtguiglobal_p_src.replace('#include <QtGui/qtguiglobal.h>', '#include "qtguiglobal_redbear.h"')
|
||||
qtguiglobal_p_src = qtguiglobal_p_src.replace('#include <QtGui/private/qtgui-config_p.h>', f'#include "{root / "recipes/wip/qt/qtbase/target" / os.environ["TARGET"] / "stage/usr/include/QtGui/6.11.0/QtGui/private/qtgui-config_p.h"}"')
|
||||
qtguiglobal_p_src = qtguiglobal_p_src.replace('#include <QtCore/private/qglobal_p.h>', '#include "qglobal_p_redbear.h"')
|
||||
(shim_dir / 'qtguiglobal_p_redbear.h').write_text(qtguiglobal_p_src)
|
||||
|
||||
qshader_p_src = qshader_p_src.replace('#include <QtGui/private/qtguiglobal_p.h>', '#include "qtguiglobal_p_redbear.h"')
|
||||
qshader_p_src = qshader_p_src.replace('#include <rhi/qshader.h>', '#include "qshader_redbear.h"')
|
||||
qshader_p_src = qshader_p_src.replace('#include <QtCore/QAtomicInt>', f'#include "{sysroot / "include/QtCore/QAtomicInt"}"')
|
||||
qshader_p_src = qshader_p_src.replace('#include <QtCore/QMap>', f'#include "{sysroot / "include/QtCore/QMap"}"')
|
||||
(shim_dir / 'qshader_p_redbear.h').write_text(qshader_p_src)
|
||||
|
||||
target = shim_dir / 'qshader_redbear.h'
|
||||
for rel in ["qshaderbaker.h", "qspirvcompiler_p.h", "qspirvshader_p.h"]:
|
||||
path = src / rel
|
||||
text = path.read_text()
|
||||
text = text.replace('#include <QtGui/6.11.0/QtGui/rhi/qshader.h>', f'#include "{target}"')
|
||||
text = text.replace('#include <rhi/qshader.h>', f'#include "{target}"')
|
||||
text = text.replace(f'#include "{root / "recipes/wip/qt/qtbase/source/src/gui/rhi/qshader.h"}"', f'#include "{target}"')
|
||||
path.write_text(text)
|
||||
|
||||
qspirvshader_cpp = src / 'qspirvshader.cpp'
|
||||
text = qspirvshader_cpp.read_text()
|
||||
text = text.replace('#include <private/qshaderdescription_p.h>', '#include "redbear_rhi/qshaderdescription_p_redbear.h"')
|
||||
text = text.replace('#include <private/qshader_p.h>', '#include "redbear_rhi/qshader_p_redbear.h"')
|
||||
text = text.replace(f'#include "{root / "recipes/wip/qt/qtbase/source/src/gui/rhi/private/qshaderdescription_p.h"}"', '#include "redbear_rhi/qshaderdescription_p_redbear.h"')
|
||||
text = text.replace(f'#include "{root / "recipes/wip/qt/qtbase/source/src/gui/rhi/private/qshader_p.h"}"', '#include "redbear_rhi/qshader_p_redbear.h"')
|
||||
text = text.replace(f'#include "{root / "recipes/wip/qt/qtbase/source/src/gui/rhi/qshaderdescription_p.h"}"', '#include "redbear_rhi/qshaderdescription_p_redbear.h"')
|
||||
text = text.replace(f'#include "{root / "recipes/wip/qt/qtbase/source/src/gui/rhi/qshader_p.h"}"', '#include "redbear_rhi/qshader_p_redbear.h"')
|
||||
qspirvshader_cpp.write_text(text)
|
||||
|
||||
qsb_cpp = Path(os.environ["COOKBOOK_SOURCE"]) / "tools/qsb/qsb.cpp"
|
||||
text = qsb_cpp.read_text()
|
||||
text = text.replace('#include <QtGui/private/qshader_p.h>', '#include "../../src/shadertools/redbear_rhi/qshader_p_redbear.h"')
|
||||
qsb_cpp.write_text(text)
|
||||
|
||||
tools_cmake = Path(os.environ["COOKBOOK_SOURCE"]) / "tools/CMakeLists.txt"
|
||||
text = tools_cmake.read_text()
|
||||
text = text.replace('add_subdirectory(qsb)', '# add_subdirectory(qsb) # disabled in Red Bear target build; host qsb is built separately')
|
||||
tools_cmake.write_text(text)
|
||||
PY
|
||||
|
||||
# ============================================================
|
||||
# Step 1: Build host qsb from the module top-level so Qt's repo macros resolve.
|
||||
# ============================================================
|
||||
if [ ! -f "${HOST_BUILD}/bin/qsb" ]; then
|
||||
echo "=== Building qsb host tool ==="
|
||||
rm -rf "${SHADER_HOST}"
|
||||
mkdir -p "${SHADER_HOST}"
|
||||
env \
|
||||
-u CPPFLAGS \
|
||||
-u LDFLAGS \
|
||||
-u PKG_CONFIG_ALLOW_CROSS \
|
||||
-u PKG_CONFIG_PATH \
|
||||
-u PKG_CONFIG_LIBDIR \
|
||||
-u PKG_CONFIG_SYSROOT_DIR \
|
||||
-u CFLAGS \
|
||||
-u CXXFLAGS \
|
||||
-u CFLAGS_x86_64_unknown_redox \
|
||||
-u CXXFLAGS_x86_64_unknown_redox \
|
||||
-u LDFLAGS_x86_64_unknown_redox \
|
||||
cmake -S "${COOKBOOK_SOURCE}" -B "${SHADER_HOST}" \
|
||||
-DCMAKE_C_COMPILER=/usr/bin/cc \
|
||||
-DCMAKE_CXX_COMPILER=/usr/bin/c++ \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX="${HOST_BUILD}" \
|
||||
-DCMAKE_PREFIX_PATH="${HOST_BUILD}" \
|
||||
-DQT_BUILD_EXAMPLES=OFF \
|
||||
-DQT_BUILD_TESTS=OFF \
|
||||
-DQT_GENERATE_SBOM=OFF \
|
||||
-Wno-dev
|
||||
cmake --build "${SHADER_HOST}" -j"${COOKBOOK_MAKE_JOBS}"
|
||||
|
||||
mkdir -p "${HOST_BUILD}/lib/cmake"
|
||||
cp -a "${SHADER_HOST}/lib/cmake/Qt6ShaderTools" "${HOST_BUILD}/lib/cmake/" 2>/dev/null || true
|
||||
cp -a "${SHADER_HOST}/lib/cmake/Qt6ShaderToolsPrivate" "${HOST_BUILD}/lib/cmake/" 2>/dev/null || true
|
||||
cp -a "${SHADER_HOST}/lib/cmake/Qt6ShaderToolsTools" "${HOST_BUILD}/lib/cmake/" 2>/dev/null || true
|
||||
if [ -d "${SHADER_HOST}/libexec" ]; then
|
||||
mkdir -p "${HOST_BUILD}/libexec"
|
||||
cp -a "${SHADER_HOST}/libexec/." "${HOST_BUILD}/libexec/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -f "${SHADER_HOST}/bin/qsb" ]; then
|
||||
mkdir -p "${HOST_BUILD}/bin"
|
||||
cp -a "${SHADER_HOST}/bin/qsb" "${HOST_BUILD}/bin/"
|
||||
elif [ -f "${SHADER_HOST}/libexec/qsb" ]; then
|
||||
mkdir -p "${HOST_BUILD}/bin" "${HOST_BUILD}/libexec"
|
||||
cp -a "${SHADER_HOST}/libexec/qsb" "${HOST_BUILD}/libexec/"
|
||||
cp -a "${SHADER_HOST}/libexec/qsb" "${HOST_BUILD}/bin/qsb"
|
||||
fi
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Step 2: Cross-compile libQt6ShaderTools for Redox
|
||||
# ============================================================
|
||||
for qtdir in plugins mkspecs metatypes modules; do
|
||||
if [ -d "${COOKBOOK_SYSROOT}/usr/${qtdir}" ] && [ ! -e "${COOKBOOK_SYSROOT}/${qtdir}" ]; then
|
||||
ln -s "usr/${qtdir}" "${COOKBOOK_SYSROOT}/${qtdir}"
|
||||
fi
|
||||
done
|
||||
|
||||
rm -f CMakeCache.txt
|
||||
rm -rf CMakeFiles
|
||||
|
||||
cmake "${COOKBOOK_SOURCE}" \
|
||||
-DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \
|
||||
-DQT_HOST_PATH="${HOST_BUILD}" \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}" \
|
||||
-DCMAKE_C_STANDARD_INCLUDE_DIRECTORIES="${COOKBOOK_SYSROOT}/include;${COOKBOOK_SYSROOT}/include/QtGui/6.11.0/QtGui" \
|
||||
-DCMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES="${COOKBOOK_SYSROOT}/include;${COOKBOOK_SYSROOT}/include/QtGui/6.11.0/QtGui" \
|
||||
-DCMAKE_C_FLAGS="${CFLAGS}" \
|
||||
-DCMAKE_CXX_FLAGS="${CXXFLAGS} -I${COOKBOOK_SYSROOT}/include" \
|
||||
-DQT_BUILD_EXAMPLES=OFF \
|
||||
-DQT_BUILD_TESTS=OFF \
|
||||
-DQT_GENERATE_SBOM=OFF \
|
||||
-Wno-dev
|
||||
|
||||
cmake --build . -j${COOKBOOK_MAKE_JOBS}
|
||||
|
||||
cmake --install . --prefix "${COOKBOOK_STAGE}/usr"
|
||||
|
||||
# ============================================================
|
||||
# Step 3: Stage artifacts
|
||||
# ============================================================
|
||||
for lib in lib/libQt6*.so*; do
|
||||
[ -f "${lib}" ] && cp -a "${lib}" "${COOKBOOK_STAGE}/usr/lib/"
|
||||
done
|
||||
for lib in lib/libQt6*.a; do
|
||||
[ -f "${lib}" ] && cp -a "${lib}" "${COOKBOOK_STAGE}/usr/lib/"
|
||||
done
|
||||
|
||||
if [ -d "lib/cmake" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib/cmake"
|
||||
cp -a lib/cmake/Qt6* "${COOKBOOK_STAGE}/usr/lib/cmake/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "lib/pkgconfig" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib/pkgconfig"
|
||||
cp -a lib/pkgconfig/*.pc "${COOKBOOK_STAGE}/usr/lib/pkgconfig/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "include" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/include"
|
||||
cp -a include/* "${COOKBOOK_STAGE}/usr/include/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "plugins" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/plugins"
|
||||
cp -a plugins/* "${COOKBOOK_STAGE}/usr/plugins/" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# RPATH cleanup
|
||||
for lib in "${COOKBOOK_STAGE}/usr/lib/libQt6"*.so.*; do
|
||||
[ -f "${lib}" ] || continue
|
||||
patchelf --remove-rpath "${lib}" 2>/dev/null || true
|
||||
done
|
||||
find "${COOKBOOK_STAGE}/usr/plugins" -name '*.so' -exec patchelf --remove-rpath {} + 2>/dev/null || true
|
||||
|
||||
# CMake export fixup: replace build-tree paths with /usr
|
||||
BUILD_DIR="${COOKBOOK_BUILD}"
|
||||
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||
"s|${BUILD_DIR}|/usr|g" {} + 2>/dev/null || true
|
||||
|
||||
# Sysroot propagation for downstream Qt modules
|
||||
SYSROOT="${COOKBOOK_SYSROOT}"
|
||||
find "${COOKBOOK_STAGE}/usr/lib/cmake/Qt6ShaderTools" -name '*.cmake' -exec sed -i \
|
||||
"s|/usr/include|${SYSROOT}/include|g" {} + 2>/dev/null || true
|
||||
mkdir -p "${SYSROOT}/include"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/include/"* "${SYSROOT}/include/" 2>/dev/null || true
|
||||
mkdir -p "${SYSROOT}/lib/cmake/Qt6ShaderTools"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/lib/cmake/Qt6ShaderTools/"* "${SYSROOT}/lib/cmake/Qt6ShaderTools/" 2>/dev/null || true
|
||||
mkdir -p "${SYSROOT}/lib"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/lib/libQt6"* "${SYSROOT}/lib/" 2>/dev/null || true
|
||||
|
||||
# Ensure qsb is staged for downstream consumers.
|
||||
if [ -f "${HOST_BUILD}/bin/qsb" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/bin"
|
||||
cp -a "${HOST_BUILD}/bin/qsb" "${COOKBOOK_STAGE}/usr/bin/"
|
||||
patchelf --remove-rpath "${COOKBOOK_STAGE}/usr/bin/qsb" 2>/dev/null || true
|
||||
fi
|
||||
"""
|
||||
|
||||
[source]
|
||||
tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qtshadertools-everywhere-src-6.11.0.tar.xz"
|
||||
@@ -0,0 +1,166 @@
|
||||
#TODO: Qt6 tools — cross-compiled against the current Redox Qt 6.11 stack.
|
||||
# The qtbase-backed slice is intended to build for Wave 1; Assistant/Designer/QDoc remain
|
||||
# constrained by broader Qt dependency/runtime gaps and still need real runtime validation.
|
||||
|
||||
[source]
|
||||
tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qttools-everywhere-src-6.11.0.tar.xz"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
dependencies = [
|
||||
"qtbase",
|
||||
]
|
||||
script = """
|
||||
DYNAMIC_INIT
|
||||
|
||||
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
||||
TOOLS_HOST="${COOKBOOK_ROOT}/build/qt-tools-host"
|
||||
|
||||
mkdir -p "${HOST_BUILD}/include/QtDBus/6.11.0/QtDBus"
|
||||
|
||||
python - <<'PY'
|
||||
import os
|
||||
from pathlib import Path
|
||||
path = Path(os.environ["COOKBOOK_SOURCE"]) / "src/CMakeLists.txt"
|
||||
text = path.read_text()
|
||||
replacements = {
|
||||
'if(QT_FEATURE_designer)\\n add_subdirectory(designer)\\nendif()': 'if(QT_FEATURE_designer)\\n # add_subdirectory(designer) # disabled for Redox Wave 1\\nendif()',
|
||||
'if(QT_FEATURE_assistant)\\n add_subdirectory(assistant)\\nendif()': 'if(QT_FEATURE_assistant)\\n # add_subdirectory(assistant) # disabled for Redox Wave 1\\nendif()',
|
||||
'if(QT_FEATURE_qtattributionsscanner)\\n add_subdirectory(qtattributionsscanner)\\nendif()': 'if(QT_FEATURE_qtattributionsscanner)\\n # add_subdirectory(qtattributionsscanner) # disabled for Redox Wave 1\\nendif()',
|
||||
'add_subdirectory(qdoc)': '# add_subdirectory(qdoc) # disabled for Redox Wave 1',
|
||||
}
|
||||
for old, new in replacements.items():
|
||||
text = text.replace(old, new)
|
||||
path.write_text(text)
|
||||
PY
|
||||
|
||||
if [ ! -d "${HOST_BUILD}/lib/cmake/Qt6LinguistTools" ]; then
|
||||
rm -rf "${TOOLS_HOST}"
|
||||
mkdir -p "${TOOLS_HOST}"
|
||||
env \
|
||||
-u CPPFLAGS \
|
||||
-u LDFLAGS \
|
||||
-u PKG_CONFIG_ALLOW_CROSS \
|
||||
-u PKG_CONFIG_PATH \
|
||||
-u PKG_CONFIG_LIBDIR \
|
||||
-u PKG_CONFIG_SYSROOT_DIR \
|
||||
-u CFLAGS_x86_64_unknown_redox \
|
||||
-u CXXFLAGS_x86_64_unknown_redox \
|
||||
-u LDFLAGS_x86_64_unknown_redox \
|
||||
cmake -S "${COOKBOOK_SOURCE}" -B "${TOOLS_HOST}" \
|
||||
-DCMAKE_C_COMPILER=/usr/bin/cc \
|
||||
-DCMAKE_CXX_COMPILER=/usr/bin/c++ \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX="${HOST_BUILD}" \
|
||||
-DCMAKE_PREFIX_PATH="${HOST_BUILD}" \
|
||||
-DQT_BUILD_EXAMPLES=OFF \
|
||||
-DQT_BUILD_TESTS=OFF \
|
||||
-DQT_GENERATE_SBOM=OFF \
|
||||
-DQT_INSTALL_XDG_DESKTOP_ENTRIES=OFF \
|
||||
-DQT_FEATURE_qdoc=OFF \
|
||||
-Wno-dev
|
||||
cmake --build "${TOOLS_HOST}" --target lrelease lupdate lconvert -j"${COOKBOOK_MAKE_JOBS}"
|
||||
mkdir -p "${HOST_BUILD}/bin"
|
||||
cp -a "${TOOLS_HOST}/bin/lrelease" "${HOST_BUILD}/bin/"
|
||||
cp -a "${TOOLS_HOST}/bin/lupdate" "${HOST_BUILD}/bin/"
|
||||
cp -a "${TOOLS_HOST}/bin/lconvert" "${HOST_BUILD}/bin/"
|
||||
mkdir -p "${HOST_BUILD}/lib/cmake"
|
||||
cp -a "${TOOLS_HOST}/lib/cmake/Qt6LinguistTools" "${HOST_BUILD}/lib/cmake/"
|
||||
fi
|
||||
|
||||
# Sysroot path fix: the cookbook only symlinks sysroot/{bin,include,lib,share} → usr/
|
||||
# but Qt6 cmake targets reference ${_IMPORT_PREFIX}/{plugins,mkspecs,metatypes,modules}
|
||||
# which resolve to sysroot/{plugins,mkspecs,metatypes,modules}.
|
||||
for qtdir in plugins mkspecs metatypes modules; do
|
||||
if [ -d "${COOKBOOK_SYSROOT}/usr/${qtdir}" ] && [ ! -e "${COOKBOOK_SYSROOT}/${qtdir}" ]; then
|
||||
ln -s "usr/${qtdir}" "${COOKBOOK_SYSROOT}/${qtdir}"
|
||||
fi
|
||||
done
|
||||
|
||||
rm -f CMakeCache.txt
|
||||
rm -rf CMakeFiles
|
||||
|
||||
cmake "${COOKBOOK_SOURCE}" \
|
||||
-DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \
|
||||
-DQT_HOST_PATH="${HOST_BUILD}" \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}" \
|
||||
-DQT_BUILD_EXAMPLES=OFF \
|
||||
-DQT_BUILD_TESTS=OFF \
|
||||
-DQT_GENERATE_SBOM=OFF \
|
||||
-DQT_INSTALL_XDG_DESKTOP_ENTRIES=OFF \
|
||||
-DQT_FEATURE_qdoc=OFF \
|
||||
-Wno-dev
|
||||
|
||||
cmake --build . -j"${COOKBOOK_MAKE_JOBS}"
|
||||
|
||||
cmake --install . --prefix "${COOKBOOK_STAGE}/usr"
|
||||
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib"
|
||||
for lib in lib/libQt6*.so*; do
|
||||
[ -f "${lib}" ] && cp -an "${lib}" "${COOKBOOK_STAGE}/usr/lib/"
|
||||
done
|
||||
for lib in lib/libQt6*.a; do
|
||||
[ -f "${lib}" ] && cp -an "${lib}" "${COOKBOOK_STAGE}/usr/lib/"
|
||||
done
|
||||
|
||||
if [ -d "bin" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/bin"
|
||||
cp -a bin/* "${COOKBOOK_STAGE}/usr/bin/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "libexec" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/libexec"
|
||||
cp -a libexec/* "${COOKBOOK_STAGE}/usr/libexec/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "lib/cmake" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib/cmake"
|
||||
cp -a lib/cmake/Qt6* "${COOKBOOK_STAGE}/usr/lib/cmake/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "lib/pkgconfig" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib/pkgconfig"
|
||||
cp -a lib/pkgconfig/*.pc "${COOKBOOK_STAGE}/usr/lib/pkgconfig/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "include" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/include"
|
||||
cp -a include/* "${COOKBOOK_STAGE}/usr/include/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "plugins" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/plugins"
|
||||
cp -a plugins/* "${COOKBOOK_STAGE}/usr/plugins/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/plugins" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/plugins"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/plugins/"* "${COOKBOOK_STAGE}/plugins/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "share" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/share"
|
||||
cp -a share/* "${COOKBOOK_STAGE}/usr/share/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "translations" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/translations"
|
||||
cp -a translations/* "${COOKBOOK_STAGE}/usr/translations/" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
for lib in "${COOKBOOK_STAGE}/usr/lib/libQt6"*.so.*; do
|
||||
[ -f "${lib}" ] || continue
|
||||
patchelf --remove-rpath "${lib}" 2>/dev/null || true
|
||||
done
|
||||
find "${COOKBOOK_STAGE}/usr/plugins" -name '*.so' -exec patchelf --remove-rpath {} + 2>/dev/null || true
|
||||
find "${COOKBOOK_STAGE}/usr/bin" -type f -exec patchelf --remove-rpath {} + 2>/dev/null || true
|
||||
find "${COOKBOOK_STAGE}/usr/libexec" -type f -exec patchelf --remove-rpath {} + 2>/dev/null || true
|
||||
|
||||
BUILD_DIR="${COOKBOOK_BUILD}"
|
||||
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||
"s|${BUILD_DIR}|/usr|g" {} + 2>/dev/null || true
|
||||
|
||||
SYSROOT="${COOKBOOK_SYSROOT}"
|
||||
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||
"s|/usr/include|${SYSROOT}/include|g" {} + 2>/dev/null || true
|
||||
mkdir -p "${SYSROOT}/include"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/include/"* "${SYSROOT}/include/" 2>/dev/null || true
|
||||
mkdir -p "${SYSROOT}/lib/cmake"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/lib/cmake/Qt6"* "${SYSROOT}/lib/cmake/" 2>/dev/null || true
|
||||
mkdir -p "${SYSROOT}/lib"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/lib/libQt6"* "${SYSROOT}/lib/" 2>/dev/null || true
|
||||
"""
|
||||
@@ -0,0 +1,122 @@
|
||||
#TODO: Qt6 translations — cross-built for Redox with host-side Qt Linguist tools. Runtime validation of the staged .qm catalogs and translation lookup paths is still pending.
|
||||
# Provides: Qt translation catalogs under /usr/translations plus the generated catalogs.json manifest.
|
||||
|
||||
[source]
|
||||
tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qttranslations-everywhere-src-6.11.0.tar.xz"
|
||||
|
||||
[build]
|
||||
template = "custom"
|
||||
dependencies = [
|
||||
"qtbase",
|
||||
"qttools",
|
||||
]
|
||||
script = """
|
||||
DYNAMIC_INIT
|
||||
|
||||
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
||||
QTTOOLS_SOURCE="${COOKBOOK_ROOT}/recipes/wip/qt/qttools/source"
|
||||
LINGUIST_HOST="${COOKBOOK_ROOT}/build/qt-linguist-host"
|
||||
|
||||
if [ ! -d "${QTTOOLS_SOURCE}" ]; then
|
||||
printf 'qttranslations: expected qttools source at %s\n' "${QTTOOLS_SOURCE}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# qttranslations only builds when the Qt Linguist component exists. Build the host-side
|
||||
# lrelease/lupdate/lconvert tools into the shared Qt host prefix so cross CMake can find them.
|
||||
if [ ! -f "${HOST_BUILD}/bin/lrelease" ] || [ ! -f "${HOST_BUILD}/bin/lupdate" ] || [ ! -f "${HOST_BUILD}/bin/lconvert" ]; then
|
||||
mkdir -p "${LINGUIST_HOST}"
|
||||
env \
|
||||
-u CPPFLAGS \
|
||||
-u LDFLAGS \
|
||||
-u PKG_CONFIG_ALLOW_CROSS \
|
||||
-u PKG_CONFIG_PATH \
|
||||
-u PKG_CONFIG_LIBDIR \
|
||||
-u PKG_CONFIG_SYSROOT_DIR \
|
||||
-u CFLAGS_x86_64_unknown_redox \
|
||||
-u CXXFLAGS_x86_64_unknown_redox \
|
||||
-u LDFLAGS_x86_64_unknown_redox \
|
||||
cmake -S "${QTTOOLS_SOURCE}" -B "${LINGUIST_HOST}" \
|
||||
-DCMAKE_C_COMPILER=/usr/bin/cc \
|
||||
-DCMAKE_CXX_COMPILER=/usr/bin/c++ \
|
||||
-DCMAKE_ASM_COMPILER=/usr/bin/cc \
|
||||
-DCMAKE_AR=/usr/bin/ar \
|
||||
-DCMAKE_RANLIB=/usr/bin/ranlib \
|
||||
-DPKG_CONFIG_EXECUTABLE=/usr/bin/pkg-config \
|
||||
-DCMAKE_STRIP=/usr/bin/strip \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_INSTALL_PREFIX="${HOST_BUILD}" \
|
||||
-DCMAKE_PREFIX_PATH="${HOST_BUILD}" \
|
||||
-DQT_BUILD_EXAMPLES=OFF \
|
||||
-DQT_BUILD_TESTS=OFF \
|
||||
-DQT_BUILD_TOOLS_BY_DEFAULT=OFF \
|
||||
-DQT_GENERATE_SBOM=OFF \
|
||||
-DQT_INSTALL_XDG_DESKTOP_ENTRIES=OFF \
|
||||
-DQT_FEATURE_qdoc=OFF \
|
||||
-Wno-dev
|
||||
env \
|
||||
-u CPPFLAGS \
|
||||
-u LDFLAGS \
|
||||
-u PKG_CONFIG_ALLOW_CROSS \
|
||||
-u PKG_CONFIG_PATH \
|
||||
-u PKG_CONFIG_LIBDIR \
|
||||
-u PKG_CONFIG_SYSROOT_DIR \
|
||||
-u CFLAGS_x86_64_unknown_redox \
|
||||
-u CXXFLAGS_x86_64_unknown_redox \
|
||||
-u LDFLAGS_x86_64_unknown_redox \
|
||||
cmake --build "${LINGUIST_HOST}" --target lrelease lupdate lconvert -j"${COOKBOOK_MAKE_JOBS}"
|
||||
mkdir -p "${HOST_BUILD}/bin"
|
||||
cp -a "${LINGUIST_HOST}/bin/." "${HOST_BUILD}/bin/" 2>/dev/null || true
|
||||
if [ -d "${LINGUIST_HOST}/libexec" ]; then
|
||||
mkdir -p "${HOST_BUILD}/libexec"
|
||||
cp -a "${LINGUIST_HOST}/libexec/." "${HOST_BUILD}/libexec/" 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
|
||||
# Sysroot path fix: the cookbook only symlinks sysroot/{bin,include,lib,share} -> usr/
|
||||
# but Qt6 cmake targets reference ${_IMPORT_PREFIX}/{plugins,mkspecs,metatypes,modules}.
|
||||
for qtdir in plugins mkspecs metatypes modules; do
|
||||
if [ -d "${COOKBOOK_SYSROOT}/usr/${qtdir}" ] && [ ! -e "${COOKBOOK_SYSROOT}/${qtdir}" ]; then
|
||||
ln -s "usr/${qtdir}" "${COOKBOOK_SYSROOT}/${qtdir}"
|
||||
fi
|
||||
done
|
||||
|
||||
rm -f CMakeCache.txt
|
||||
rm -rf CMakeFiles
|
||||
|
||||
cmake "${COOKBOOK_SOURCE}" \
|
||||
-DCMAKE_TOOLCHAIN_FILE="${COOKBOOK_ROOT}/local/recipes/qt/redox-toolchain.cmake" \
|
||||
-DQT_HOST_PATH="${HOST_BUILD}" \
|
||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}" \
|
||||
-DQT_BUILD_EXAMPLES=OFF \
|
||||
-DQT_BUILD_TESTS=OFF \
|
||||
-DQT_GENERATE_SBOM=OFF \
|
||||
-Wno-dev
|
||||
|
||||
cmake --build . -j"${COOKBOOK_MAKE_JOBS}"
|
||||
|
||||
cmake --install . --prefix "${COOKBOOK_STAGE}/usr"
|
||||
|
||||
if [ -d "translations" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/translations"
|
||||
cp -a translations/* "${COOKBOOK_STAGE}/usr/translations/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "lib/cmake" ]; then
|
||||
mkdir -p "${COOKBOOK_STAGE}/usr/lib/cmake"
|
||||
cp -a lib/cmake/Qt6* "${COOKBOOK_STAGE}/usr/lib/cmake/" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
BUILD_DIR="${COOKBOOK_BUILD}"
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/lib/cmake" ]; then
|
||||
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||
"s|${BUILD_DIR}|/usr|g" {} + 2>/dev/null || true
|
||||
mkdir -p "${COOKBOOK_SYSROOT}/lib/cmake"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/lib/cmake/Qt6"* "${COOKBOOK_SYSROOT}/lib/cmake/" 2>/dev/null || true
|
||||
fi
|
||||
if [ -d "${COOKBOOK_STAGE}/usr/translations" ]; then
|
||||
mkdir -p "${COOKBOOK_SYSROOT}/translations"
|
||||
cp -a "${COOKBOOK_STAGE}/usr/translations/"* "${COOKBOOK_SYSROOT}/translations/" 2>/dev/null || true
|
||||
fi
|
||||
"""
|
||||
Reference in New Issue
Block a user