Update Qt6 recipes and add remaining module stubs
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,141 @@
|
|||||||
|
#TODO: Qt6 3D module — cross-compiled for Redox on top of the verified Qt Quick/QML + shader substrate. Runtime validation of the renderer plugins and Qt3D QML imports is still pending.
|
||||||
|
# Provides: libQt63DAnimation, libQt63DCore, libQt63DExtras, libQt63DInput, libQt63DLogic,
|
||||||
|
# libQt63DQuick, libQt63DQuickAnimation, libQt63DQuickExtras, libQt63DQuickInput,
|
||||||
|
# libQt63DQuickRender, libQt63DRender, and the Qt3D QML/plugin surface.
|
||||||
|
|
||||||
|
[source]
|
||||||
|
tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qt3d-everywhere-src-6.11.0.tar.xz"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
template = "custom"
|
||||||
|
dependencies = [
|
||||||
|
"qtdeclarative",
|
||||||
|
]
|
||||||
|
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
|
||||||
|
|
||||||
|
if [ ! -d "${COOKBOOK_SYSROOT}/lib/cmake/Qt6Quick" ] \
|
||||||
|
&& [ ! -d "${COOKBOOK_SYSROOT}/usr/lib/cmake/Qt6Quick" ]; then
|
||||||
|
printf '%s\n' \
|
||||||
|
'qt3d requires a Qt Quick/QML-enabled qtdeclarative sysroot (missing Qt6Quick).' >&2
|
||||||
|
printf '%s\n' \
|
||||||
|
'Rebuild the verified Qt Quick/QML substrate before cooking qt3d.' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "${HOST_BUILD}/bin/qsb" ] \
|
||||||
|
&& [ ! -f "${HOST_BUILD}/libexec/qsb" ]; then
|
||||||
|
printf '%s\n' \
|
||||||
|
'qt3d requires the qsb host tool from qtshadertools in the shared QT_HOST_PATH.' >&2
|
||||||
|
printf '%s\n' \
|
||||||
|
'Rebuild the verified shader substrate before cooking qt3d.' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
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}" \
|
||||||
|
-DQt6ShaderToolsTools_DIR="${HOST_BUILD}/lib/cmake/Qt6ShaderToolsTools" \
|
||||||
|
-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
|
||||||
|
mkdir -p "${COOKBOOK_STAGE}/usr/metatypes"
|
||||||
|
find . -path '*/meta_types/*.json' -type f -exec cp -an {} "${COOKBOOK_STAGE}/usr/metatypes/" \\; 2>/dev/null || true
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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
|
||||||
|
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
|
"s|${COOKBOOK_SOURCE}/src/.*/meta_types/|${SYSROOT}/metatypes/|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/metatypes" ]; then
|
||||||
|
mkdir -p "${SYSROOT}/metatypes"
|
||||||
|
cp -a "${COOKBOOK_STAGE}/usr/metatypes/"* "${SYSROOT}/metatypes/" 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
|
||||||
|
if [ -d "${COOKBOOK_STAGE}/usr/qml" ]; then
|
||||||
|
mkdir -p "${SYSROOT}/qml"
|
||||||
|
cp -a "${COOKBOOK_STAGE}/usr/qml/"* "${SYSROOT}/qml/" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
"""
|
||||||
@@ -59,7 +59,8 @@ done
|
|||||||
# with these tools during the target build.
|
# with these tools during the target build.
|
||||||
# ============================================================
|
# ============================================================
|
||||||
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
||||||
HOST_PROFILE="qtbase-host-6.11.0-gui-xml-wayland-no-qdbus-tools"
|
HOST_QTBASE_BUILD="${COOKBOOK_ROOT}/build/qtbase-host-build"
|
||||||
|
HOST_PROFILE="qtbase-host-6.11.0-gui-xml-wayland-no-qdbus-host"
|
||||||
HOST_STAMP="${HOST_BUILD}/.redbear-host-profile"
|
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"
|
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'
|
python - <<'PY'
|
||||||
@@ -74,14 +75,17 @@ path.write_text(text)
|
|||||||
PY
|
PY
|
||||||
if [ -d "${HOST_BUILD}" ] && { [ ! -f "${HOST_STAMP}" ] || [ "$(cat "${HOST_STAMP}" 2>/dev/null)" != "${HOST_PROFILE}" ]; }; then
|
if [ -d "${HOST_BUILD}" ] && { [ ! -f "${HOST_STAMP}" ] || [ "$(cat "${HOST_STAMP}" 2>/dev/null)" != "${HOST_PROFILE}" ]; }; then
|
||||||
rm -rf "${HOST_BUILD}"
|
rm -rf "${HOST_BUILD}"
|
||||||
|
rm -rf "${HOST_QTBASE_BUILD}"
|
||||||
fi
|
fi
|
||||||
if [ ! -f "${HOST_BUILD}/bin/moc" ] || [ ! -f "${HOST_STAMP}" ]; then
|
if [ ! -f "${HOST_BUILD}/bin/moc" ] || [ ! -f "${HOST_STAMP}" ]; then
|
||||||
echo "=== Building Qt host tools ==="
|
echo "=== Building Qt host tools ==="
|
||||||
mkdir -p "${HOST_BUILD}"
|
mkdir -p "${HOST_BUILD}"
|
||||||
|
rm -rf "${HOST_QTBASE_BUILD}"
|
||||||
env -i \
|
env -i \
|
||||||
HOME="${HOME}" \
|
HOME="${HOME}" \
|
||||||
PATH="${HOST_PATH}" \
|
PATH="${HOST_PATH}" \
|
||||||
cmake -S "${COOKBOOK_SOURCE}" -B "${HOST_BUILD}" \
|
cmake -S "${COOKBOOK_SOURCE}" -B "${HOST_QTBASE_BUILD}" \
|
||||||
|
-GNinja \
|
||||||
-DCMAKE_C_COMPILER=/usr/bin/cc \
|
-DCMAKE_C_COMPILER=/usr/bin/cc \
|
||||||
-DCMAKE_CXX_COMPILER=/usr/bin/c++ \
|
-DCMAKE_CXX_COMPILER=/usr/bin/c++ \
|
||||||
-DCMAKE_ASM_COMPILER=/usr/bin/cc \
|
-DCMAKE_ASM_COMPILER=/usr/bin/cc \
|
||||||
@@ -97,7 +101,7 @@ if [ ! -f "${HOST_BUILD}/bin/moc" ] || [ ! -f "${HOST_STAMP}" ]; then
|
|||||||
-DFEATURE_widgets=OFF \
|
-DFEATURE_widgets=OFF \
|
||||||
-DFEATURE_opengl=OFF \
|
-DFEATURE_opengl=OFF \
|
||||||
-DFEATURE_network=OFF \
|
-DFEATURE_network=OFF \
|
||||||
-DFEATURE_dbus=ON \
|
-DFEATURE_dbus=OFF \
|
||||||
-DFEATURE_openssl=OFF \
|
-DFEATURE_openssl=OFF \
|
||||||
-DFEATURE_sql=OFF \
|
-DFEATURE_sql=OFF \
|
||||||
-DFEATURE_testlib=OFF \
|
-DFEATURE_testlib=OFF \
|
||||||
@@ -108,9 +112,11 @@ if [ ! -f "${HOST_BUILD}/bin/moc" ] || [ ! -f "${HOST_STAMP}" ]; then
|
|||||||
env -i \
|
env -i \
|
||||||
HOME="${HOME}" \
|
HOME="${HOME}" \
|
||||||
PATH="${HOST_PATH}" \
|
PATH="${HOST_PATH}" \
|
||||||
cmake --build "${HOST_BUILD}" --target host_tools -j"${COOKBOOK_MAKE_JOBS}"
|
cmake --build "${HOST_QTBASE_BUILD}" -j"${COOKBOOK_MAKE_JOBS}"
|
||||||
mkdir -p "${HOST_BUILD}/include/QtGui/6.11.0/QtGui"
|
env -i \
|
||||||
mkdir -p "${HOST_BUILD}/include/QtDBus/6.11.0/QtDBus"
|
HOME="${HOME}" \
|
||||||
|
PATH="${HOST_PATH}" \
|
||||||
|
cmake --install "${HOST_QTBASE_BUILD}" --prefix "${HOST_BUILD}"
|
||||||
printf '%s\n' "${HOST_PROFILE}" > "${HOST_STAMP}"
|
printf '%s\n' "${HOST_PROFILE}" > "${HOST_STAMP}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -195,9 +201,22 @@ mv "${HWI_CMAKE}.tmp" "${HWI_CMAKE}"
|
|||||||
# QtGui needs the float16 shims — copy to gui dir and append to first SOURCES line
|
# QtGui needs the float16 shims — copy to gui dir and append to first SOURCES line
|
||||||
cp "${COOKBOOK_SOURCE}/src/corelib/global/qt_float16_shims.c" \
|
cp "${COOKBOOK_SOURCE}/src/corelib/global/qt_float16_shims.c" \
|
||||||
"${COOKBOOK_SOURCE}/src/gui/painting/qt_float16_shims.c"
|
"${COOKBOOK_SOURCE}/src/gui/painting/qt_float16_shims.c"
|
||||||
awk '/^ SOURCES$/ && !done { print; print " painting/qt_float16_shims.c"; done=1; next } { print }' \
|
python - <<'PY'
|
||||||
"${COOKBOOK_SOURCE}/src/gui/CMakeLists.txt" > "${COOKBOOK_SOURCE}/src/gui/CMakeLists.txt.tmp"
|
import os
|
||||||
mv "${COOKBOOK_SOURCE}/src/gui/CMakeLists.txt.tmp" "${COOKBOOK_SOURCE}/src/gui/CMakeLists.txt"
|
from pathlib import Path
|
||||||
|
path = Path(os.environ["COOKBOOK_SOURCE"]) / "src/gui/CMakeLists.txt"
|
||||||
|
lines = path.read_text().splitlines()
|
||||||
|
out = []
|
||||||
|
inserted = False
|
||||||
|
for line in lines:
|
||||||
|
if line.strip() == "painting/qt_float16_shims.c":
|
||||||
|
continue
|
||||||
|
out.append(line)
|
||||||
|
if not inserted and line.strip() == "SOURCES":
|
||||||
|
out.append(" painting/qt_float16_shims.c")
|
||||||
|
inserted = True
|
||||||
|
path.write_text("\\n".join(out) + "\\n")
|
||||||
|
PY
|
||||||
|
|
||||||
# relibc's elf.h defines ELFMAG0-3 and SELFMAG but not ELFMAG string constant.
|
# relibc's elf.h defines ELFMAG0-3 and SELFMAG but not ELFMAG string constant.
|
||||||
# Patch qelfparser_p.cpp (the only file using ELFMAG) to define it.
|
# Patch qelfparser_p.cpp (the only file using ELFMAG) to define it.
|
||||||
@@ -379,6 +398,7 @@ path.write_text(text)
|
|||||||
PY
|
PY
|
||||||
|
|
||||||
cmake "${COOKBOOK_SOURCE}" \
|
cmake "${COOKBOOK_SOURCE}" \
|
||||||
|
-GNinja \
|
||||||
-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 \
|
||||||
|
|||||||
@@ -0,0 +1,112 @@
|
|||||||
|
#TODO: Qt6 Charts — cross-compiled for Redox against the Qt 6.11 base stack. The widgets-based charting library should be buildable now; the optional QML/QtQuick charts import only builds when that substrate is already present in the sysroot, and runtime validation is still pending.
|
||||||
|
# Provides: libQt6Charts and, when QtQuick is available, the Qt Charts QML module.
|
||||||
|
|
||||||
|
[source]
|
||||||
|
tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qtcharts-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 "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
|
||||||
|
if [ -d "${COOKBOOK_STAGE}/usr/qml" ]; then
|
||||||
|
find "${COOKBOOK_STAGE}/usr/qml" -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
|
||||||
|
"""
|
||||||
@@ -0,0 +1,139 @@
|
|||||||
|
#TODO: Qt6 Data Visualization module — cross-compiled for Redox on top of the verified Qt Quick/QML substrate. Runtime validation of the 3D graph rendering path and QtDataVisualization QML import is still pending.
|
||||||
|
# Provides: libQt6DataVisualization and the QtDataVisualization QML/plugin surface.
|
||||||
|
|
||||||
|
[source]
|
||||||
|
tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qtdatavis3d-everywhere-src-6.11.0.tar.xz"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
template = "custom"
|
||||||
|
dependencies = [
|
||||||
|
"qtdeclarative",
|
||||||
|
]
|
||||||
|
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
|
||||||
|
|
||||||
|
if [ ! -d "${COOKBOOK_SYSROOT}/lib/cmake/Qt6Quick" ] \
|
||||||
|
&& [ ! -d "${COOKBOOK_SYSROOT}/usr/lib/cmake/Qt6Quick" ]; then
|
||||||
|
printf '%s\n' \
|
||||||
|
'qtdatavis3d requires a Qt Quick/QML-enabled qtdeclarative sysroot (missing Qt6Quick).' >&2
|
||||||
|
printf '%s\n' \
|
||||||
|
'Rebuild the verified Qt Quick/QML substrate before cooking qtdatavis3d.' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "${HOST_BUILD}/bin/qsb" ] \
|
||||||
|
&& [ ! -f "${HOST_BUILD}/libexec/qsb" ]; then
|
||||||
|
printf '%s\n' \
|
||||||
|
'qtdatavis3d requires the qsb host tool from qtshadertools in the shared QT_HOST_PATH.' >&2
|
||||||
|
printf '%s\n' \
|
||||||
|
'Rebuild the verified shader substrate before cooking qtdatavis3d.' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
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}" \
|
||||||
|
-DQt6ShaderToolsTools_DIR="${HOST_BUILD}/lib/cmake/Qt6ShaderToolsTools" \
|
||||||
|
-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
|
||||||
|
mkdir -p "${COOKBOOK_STAGE}/usr/metatypes"
|
||||||
|
find . -path '*/meta_types/*.json' -type f -exec cp -an {} "${COOKBOOK_STAGE}/usr/metatypes/" \\; 2>/dev/null || true
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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
|
||||||
|
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
|
"s|${COOKBOOK_SOURCE}/src/.*/meta_types/|${SYSROOT}/metatypes/|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/metatypes" ]; then
|
||||||
|
mkdir -p "${SYSROOT}/metatypes"
|
||||||
|
cp -a "${COOKBOOK_STAGE}/usr/metatypes/"* "${SYSROOT}/metatypes/" 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
|
||||||
|
if [ -d "${COOKBOOK_STAGE}/usr/qml" ]; then
|
||||||
|
mkdir -p "${SYSROOT}/qml"
|
||||||
|
cp -a "${COOKBOOK_STAGE}/usr/qml/"* "${SYSROOT}/qml/" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
"""
|
||||||
@@ -8,6 +8,7 @@ tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qtdecl
|
|||||||
template = "custom"
|
template = "custom"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"qtbase",
|
"qtbase",
|
||||||
|
"qtshadertools",
|
||||||
]
|
]
|
||||||
script = """
|
script = """
|
||||||
DYNAMIC_INIT
|
DYNAMIC_INIT
|
||||||
@@ -16,12 +17,13 @@ HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
|||||||
DECL_HOST="${COOKBOOK_ROOT}/build/qt-declarative-host"
|
DECL_HOST="${COOKBOOK_ROOT}/build/qt-declarative-host"
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# Step 1: Build qtdeclarative host tools (qmlcachegen, qmllint)
|
# Step 1: Build only the qtdeclarative host tools actually needed for cross-builds.
|
||||||
# These link against qtbase's host Qt6Core.
|
# We intentionally avoid building the full host tool surface (`qml`, quicktooling, etc.)
|
||||||
# Install into the same prefix as qtbase host tools so
|
# because the shared host prefix is not a full host QtGui install.
|
||||||
|
# Install/copy the minimal host tools into the same prefix as qtbase host tools so
|
||||||
# QT_HOST_PATH finds both qtbase and qtdeclarative tools.
|
# QT_HOST_PATH finds both qtbase and qtdeclarative tools.
|
||||||
# ============================================================
|
# ============================================================
|
||||||
if [ ! -f "${HOST_BUILD}/bin/qmlcachegen" ]; then
|
if [ ! -f "${HOST_BUILD}/bin/qmlcachegen" ] || [ ! -f "${HOST_BUILD}/bin/qmlaotstats" ] || [ ! -d "${HOST_BUILD}/lib/cmake/Qt6QmlTools" ]; then
|
||||||
echo "=== Building qtdeclarative host tools ==="
|
echo "=== Building qtdeclarative host tools ==="
|
||||||
mkdir -p "${DECL_HOST}"
|
mkdir -p "${DECL_HOST}"
|
||||||
env \
|
env \
|
||||||
@@ -40,12 +42,24 @@ if [ ! -f "${HOST_BUILD}/bin/qmlcachegen" ]; then
|
|||||||
-DCMAKE_BUILD_TYPE=Release \
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
-DCMAKE_INSTALL_PREFIX="${HOST_BUILD}" \
|
-DCMAKE_INSTALL_PREFIX="${HOST_BUILD}" \
|
||||||
-DCMAKE_PREFIX_PATH="${HOST_BUILD}" \
|
-DCMAKE_PREFIX_PATH="${HOST_BUILD}" \
|
||||||
|
-DQt6ShaderToolsTools_DIR="${HOST_BUILD}/lib/cmake/Qt6ShaderToolsTools" \
|
||||||
-DQT_BUILD_EXAMPLES=OFF \
|
-DQT_BUILD_EXAMPLES=OFF \
|
||||||
-DQT_BUILD_TESTS=OFF \
|
-DQT_BUILD_TESTS=OFF \
|
||||||
-DQT_GENERATE_SBOM=OFF \
|
-DQT_GENERATE_SBOM=OFF \
|
||||||
-Wno-dev
|
-Wno-dev
|
||||||
cmake --build "${DECL_HOST}" -j"${COOKBOOK_MAKE_JOBS}"
|
cmake --build "${DECL_HOST}" --target qmlcachegen qmllint qmlimportscanner qmltyperegistrar qmlaotstats -j"${COOKBOOK_MAKE_JOBS}"
|
||||||
cmake --install "${DECL_HOST}" --prefix "${HOST_BUILD}"
|
|
||||||
|
mkdir -p "${HOST_BUILD}/bin" "${HOST_BUILD}/libexec" "${HOST_BUILD}/lib/cmake"
|
||||||
|
for tool in qmlcachegen qmllint qmlimportscanner qmltyperegistrar qmlaotstats; do
|
||||||
|
if [ -f "${DECL_HOST}/bin/${tool}" ]; then
|
||||||
|
cp -a "${DECL_HOST}/bin/${tool}" "${HOST_BUILD}/bin/"
|
||||||
|
elif [ -f "${DECL_HOST}/libexec/${tool}" ]; then
|
||||||
|
cp -a "${DECL_HOST}/libexec/${tool}" "${HOST_BUILD}/libexec/"
|
||||||
|
cp -a "${DECL_HOST}/libexec/${tool}" "${HOST_BUILD}/bin/${tool}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
cp -a "${DECL_HOST}/lib/cmake/Qt6QmlTools" "${HOST_BUILD}/lib/cmake/" 2>/dev/null || true
|
||||||
|
cp -a "${DECL_HOST}/lib/cmake/Qt6QmlCompiler" "${HOST_BUILD}/lib/cmake/" 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@@ -106,12 +120,22 @@ INSERT=$((LINE + 3))
|
|||||||
sed -i "${INSERT}r ${PATCHF}" "${CHECKED}"
|
sed -i "${INSERT}r ${PATCHF}" "${CHECKED}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
python - <<'PY'
|
||||||
|
import os
|
||||||
|
from pathlib import Path
|
||||||
|
path = Path(os.environ["COOKBOOK_SOURCE"]) / "src/CMakeLists.txt"
|
||||||
|
text = path.read_text()
|
||||||
|
text = text.replace('if(TARGET Qt::Gui AND TARGET Qt::qsb AND QT_FEATURE_qml_animation)', 'if(TARGET Qt::Gui AND QT_FEATURE_qml_animation)')
|
||||||
|
path.write_text(text)
|
||||||
|
PY
|
||||||
|
|
||||||
cmake "${COOKBOOK_SOURCE}" \
|
cmake "${COOKBOOK_SOURCE}" \
|
||||||
-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 \
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
-DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}" \
|
-DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}" \
|
||||||
|
-DQt6ShaderToolsTools_DIR="${HOST_BUILD}/lib/cmake/Qt6ShaderToolsTools" \
|
||||||
-DQT_BUILD_EXAMPLES=OFF \
|
-DQT_BUILD_EXAMPLES=OFF \
|
||||||
-DQT_BUILD_TESTS=OFF \
|
-DQT_BUILD_TESTS=OFF \
|
||||||
-DQT_GENERATE_SBOM=OFF \
|
-DQT_GENERATE_SBOM=OFF \
|
||||||
@@ -161,6 +185,8 @@ if [ -d "qml" ]; then
|
|||||||
mkdir -p "${COOKBOOK_STAGE}/usr/qml"
|
mkdir -p "${COOKBOOK_STAGE}/usr/qml"
|
||||||
cp -a qml/* "${COOKBOOK_STAGE}/usr/qml/" 2>/dev/null || true
|
cp -a qml/* "${COOKBOOK_STAGE}/usr/qml/" 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
|
mkdir -p "${COOKBOOK_STAGE}/usr/metatypes"
|
||||||
|
find . -path '*/meta_types/*.json' -type f -exec cp -an {} "${COOKBOOK_STAGE}/usr/metatypes/" \\; 2>/dev/null || true
|
||||||
|
|
||||||
# RPATH cleanup
|
# RPATH cleanup
|
||||||
for lib in "${COOKBOOK_STAGE}/usr/lib/libQt6"*.so.*; do
|
for lib in "${COOKBOOK_STAGE}/usr/lib/libQt6"*.so.*; do
|
||||||
@@ -173,4 +199,31 @@ find "${COOKBOOK_STAGE}/usr/plugins" -name '*.so' -exec patchelf --remove-rpath
|
|||||||
BUILD_DIR="${COOKBOOK_BUILD}"
|
BUILD_DIR="${COOKBOOK_BUILD}"
|
||||||
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
"s|${BUILD_DIR}|/usr|g" {} + 2>/dev/null || true
|
"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
|
||||||
|
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
|
"s|/usr/lib|${SYSROOT}/lib|g" {} + 2>/dev/null || true
|
||||||
|
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
|
"s|/usr/src|${COOKBOOK_SOURCE}/src|g" {} + 2>/dev/null || true
|
||||||
|
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
|
"s|${COOKBOOK_SOURCE}/src/.*/meta_types/|${SYSROOT}/metatypes/|g" {} + 2>/dev/null || true
|
||||||
|
|
||||||
|
mkdir -p "${SYSROOT}/include" "${SYSROOT}/lib/cmake" "${SYSROOT}/lib"
|
||||||
|
cp -a "${COOKBOOK_STAGE}/usr/include/"* "${SYSROOT}/include/" 2>/dev/null || true
|
||||||
|
cp -a "${COOKBOOK_STAGE}/usr/lib/cmake/Qt6"* "${SYSROOT}/lib/cmake/" 2>/dev/null || true
|
||||||
|
cp -a "${COOKBOOK_STAGE}/usr/lib/libQt6"* "${SYSROOT}/lib/" 2>/dev/null || true
|
||||||
|
if [ -d "${COOKBOOK_STAGE}/usr/metatypes" ]; then
|
||||||
|
mkdir -p "${SYSROOT}/metatypes"
|
||||||
|
cp -a "${COOKBOOK_STAGE}/usr/metatypes/"* "${SYSROOT}/metatypes/" 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
|
||||||
|
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,171 @@
|
|||||||
|
#TODO: Qt6 Graphs — cross-compiled for Redox against the Qt 6.11 Qt Quick/QML substrate. This recipe intentionally builds the validated 2D graphs surface first; the 3D graphs path stays disabled until the Qt Quick 3D substrate is ready in-tree.
|
||||||
|
# Provides: libQt6Graphs and the QtGraphs QML module for 2D graph types.
|
||||||
|
|
||||||
|
[source]
|
||||||
|
tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qtgraphs-everywhere-src-6.11.0.tar.xz"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
template = "custom"
|
||||||
|
dependencies = [
|
||||||
|
"qtdeclarative",
|
||||||
|
"qtshadertools",
|
||||||
|
]
|
||||||
|
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
|
||||||
|
|
||||||
|
if [ ! -d "${COOKBOOK_SYSROOT}/lib/cmake/Qt6Quick" ] \
|
||||||
|
&& [ ! -d "${COOKBOOK_SYSROOT}/usr/lib/cmake/Qt6Quick" ]; then
|
||||||
|
printf '%s\n' \
|
||||||
|
'qtgraphs requires a Qt Quick/QML-enabled qtdeclarative sysroot (missing Qt6Quick).' >&2
|
||||||
|
printf '%s\n' \
|
||||||
|
'Rebuild qtdeclarative before cooking qtgraphs.' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "${COOKBOOK_SYSROOT}/lib/cmake/Qt6QuickWidgets" ] \
|
||||||
|
&& [ ! -d "${COOKBOOK_SYSROOT}/usr/lib/cmake/Qt6QuickWidgets" ]; then
|
||||||
|
printf '%s\n' \
|
||||||
|
'qtgraphs requires Qt Quick Widgets from qtdeclarative (missing Qt6QuickWidgets).' >&2
|
||||||
|
printf '%s\n' \
|
||||||
|
'Rebuild qtdeclarative before cooking qtgraphs.' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "${HOST_BUILD}/bin/qsb" ] \
|
||||||
|
&& [ ! -f "${HOST_BUILD}/libexec/qsb" ]; then
|
||||||
|
printf '%s\n' \
|
||||||
|
'qtgraphs requires the qsb host tool from qtshadertools in the shared QT_HOST_PATH.' >&2
|
||||||
|
printf '%s\n' \
|
||||||
|
'Rebuild qtshadertools before cooking qtgraphs.' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "${HOST_BUILD}/lib/cmake/Qt6ShaderToolsTools" ]; then
|
||||||
|
printf '%s\n' \
|
||||||
|
'qtgraphs requires Qt6ShaderToolsTools metadata in the shared QT_HOST_PATH.' >&2
|
||||||
|
printf '%s\n' \
|
||||||
|
'Rebuild qtshadertools before cooking qtgraphs.' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
python - <<'PY'
|
||||||
|
import os
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
path = Path(os.environ["COOKBOOK_SOURCE"]) / "CMakeLists.txt"
|
||||||
|
text = path.read_text()
|
||||||
|
needle = "qt_internal_project_setup()\\n\\n"
|
||||||
|
insertion = "qt_internal_project_setup()\\n\\nfind_package(Qt6ShaderToolsTools CONFIG REQUIRED)\\n\\n"
|
||||||
|
if "find_package(Qt6ShaderToolsTools CONFIG REQUIRED)" not in text:
|
||||||
|
text = text.replace(needle, insertion, 1)
|
||||||
|
path.write_text(text)
|
||||||
|
PY
|
||||||
|
|
||||||
|
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}" \
|
||||||
|
-DQt6ShaderToolsTools_DIR="${HOST_BUILD}/lib/cmake/Qt6ShaderToolsTools" \
|
||||||
|
-DQT_BUILD_EXAMPLES=OFF \
|
||||||
|
-DQT_BUILD_TESTS=OFF \
|
||||||
|
-DQT_GENERATE_SBOM=OFF \
|
||||||
|
-DFEATURE_graphs_3d=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
|
||||||
|
mkdir -p "${COOKBOOK_STAGE}/usr/metatypes"
|
||||||
|
find . -path '*/meta_types/*.json' -type f -exec cp -an {} "${COOKBOOK_STAGE}/usr/metatypes/" \\; 2>/dev/null || true
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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
|
||||||
|
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
|
"s|${COOKBOOK_SOURCE}/src/.*/meta_types/|${SYSROOT}/metatypes/|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/metatypes" ]; then
|
||||||
|
mkdir -p "${SYSROOT}/metatypes"
|
||||||
|
cp -a "${COOKBOOK_STAGE}/usr/metatypes/"* "${SYSROOT}/metatypes/" 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
|
||||||
|
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,133 @@
|
|||||||
|
#TODO: Qt6 Lottie — cross-compiled for Redox on top of the verified QML/Qt Quick substrate. Runtime validation of the staged Lottie QML import is still pending.
|
||||||
|
# Provides: the Qt Lottie runtime library and QML import for Bodymovin/Lottie animations in Qt Quick.
|
||||||
|
|
||||||
|
[source]
|
||||||
|
tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qtlottie-everywhere-src-6.11.0.tar.xz"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
template = "custom"
|
||||||
|
dependencies = [
|
||||||
|
"qtdeclarative",
|
||||||
|
]
|
||||||
|
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
|
||||||
|
|
||||||
|
if [ ! -d "${COOKBOOK_SYSROOT}/lib/cmake/Qt6Quick" ] \
|
||||||
|
&& [ ! -d "${COOKBOOK_SYSROOT}/usr/lib/cmake/Qt6Quick" ]; then
|
||||||
|
printf '%s\n' \
|
||||||
|
'qtlottie requires a Qt Quick-enabled qtdeclarative sysroot (missing Qt6Quick).' >&2
|
||||||
|
printf '%s\n' \
|
||||||
|
'Rebuild the verified QtQuick/QML substrate before cooking qtlottie.' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
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
|
||||||
|
mkdir -p "${COOKBOOK_STAGE}/usr/metatypes"
|
||||||
|
find . -path '*/meta_types/*.json' -type f -exec cp -an {} "${COOKBOOK_STAGE}/usr/metatypes/" \\; 2>/dev/null || true
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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
|
||||||
|
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
|
"s|/usr/lib|${SYSROOT}/lib|g" {} + 2>/dev/null || true
|
||||||
|
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
|
"s|/usr/src/.*/meta_types/|${SYSROOT}/metatypes/|g" {} + 2>/dev/null || true
|
||||||
|
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
|
"s|${COOKBOOK_SOURCE}/src/.*/meta_types/|${SYSROOT}/metatypes/|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
|
||||||
|
if [ -d "${COOKBOOK_STAGE}/usr/metatypes" ]; then
|
||||||
|
mkdir -p "${SYSROOT}/metatypes"
|
||||||
|
cp -a "${COOKBOOK_STAGE}/usr/metatypes/"* "${SYSROOT}/metatypes/" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
"""
|
||||||
@@ -0,0 +1,194 @@
|
|||||||
|
#TODO: Qt6 Quick 3D module — cross-compiled for Redox on top of the verified Qt Quick/QML, shader, and timeline substrate. Runtime validation of the renderer plugins and QtQuick3D QML imports is still pending.
|
||||||
|
# Provides: libQt6Quick3D, libQt6Quick3DAssetImport, libQt6Quick3DAssetUtils, libQt6Quick3DEffects,
|
||||||
|
# libQt6Quick3DHelpers, libQt6Quick3DIblBaker, libQt6Quick3DParticleEffects, libQt6Quick3DParticles,
|
||||||
|
# libQt6Quick3DRuntimeRender, and the QtQuick3D QML/plugin surface.
|
||||||
|
|
||||||
|
[source]
|
||||||
|
tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qtquick3d-everywhere-src-6.11.0.tar.xz"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
template = "custom"
|
||||||
|
dependencies = [
|
||||||
|
"qtdeclarative",
|
||||||
|
"qtquicktimeline",
|
||||||
|
]
|
||||||
|
script = """
|
||||||
|
DYNAMIC_INIT
|
||||||
|
|
||||||
|
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
||||||
|
QUICK3D_HOST="${COOKBOOK_ROOT}/build/qt-quick3d-host"
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
if [ ! -d "${COOKBOOK_SYSROOT}/lib/cmake/Qt6Quick" ] \
|
||||||
|
&& [ ! -d "${COOKBOOK_SYSROOT}/usr/lib/cmake/Qt6Quick" ]; then
|
||||||
|
printf '%s\n' \
|
||||||
|
'qtquick3d requires a Qt Quick/QML-enabled qtdeclarative sysroot (missing Qt6Quick).' >&2
|
||||||
|
printf '%s\n' \
|
||||||
|
'Rebuild the verified Qt Quick/QML substrate before cooking qtquick3d.' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "${COOKBOOK_SYSROOT}/lib/cmake/Qt6QuickTimeline" ] \
|
||||||
|
&& [ ! -d "${COOKBOOK_SYSROOT}/usr/lib/cmake/Qt6QuickTimeline" ]; then
|
||||||
|
printf '%s\n' \
|
||||||
|
'qtquick3d requires the Qt Quick Timeline module in the sysroot (missing Qt6QuickTimeline).' >&2
|
||||||
|
printf '%s\n' \
|
||||||
|
'Rebuild qtquicktimeline before cooking qtquick3d.' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "${HOST_BUILD}/bin/qsb" ] \
|
||||||
|
&& [ ! -f "${HOST_BUILD}/libexec/qsb" ]; then
|
||||||
|
printf '%s\n' \
|
||||||
|
'qtquick3d requires the qsb host tool from qtshadertools in the shared QT_HOST_PATH.' >&2
|
||||||
|
printf '%s\n' \
|
||||||
|
'Rebuild the verified shader substrate before cooking qtquick3d.' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "${HOST_BUILD}/lib/cmake/Qt6Quick3DTools" ] \
|
||||||
|
|| [ ! -f "${HOST_BUILD}/bin/balsam" -a ! -f "${HOST_BUILD}/libexec/balsam" ]; then
|
||||||
|
rm -rf "${QUICK3D_HOST}"
|
||||||
|
mkdir -p "${QUICK3D_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 "${QUICK3D_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}" \
|
||||||
|
-DQt6ShaderToolsTools_DIR="${HOST_BUILD}/lib/cmake/Qt6ShaderToolsTools" \
|
||||||
|
-DQT_BUILD_EXAMPLES=OFF \
|
||||||
|
-DQT_BUILD_TESTS=OFF \
|
||||||
|
-DQT_GENERATE_SBOM=OFF \
|
||||||
|
-Wno-dev
|
||||||
|
cmake --build "${QUICK3D_HOST}" --target balsam -j"${COOKBOOK_MAKE_JOBS}"
|
||||||
|
|
||||||
|
mkdir -p "${HOST_BUILD}/bin" "${HOST_BUILD}/libexec" "${HOST_BUILD}/lib/cmake"
|
||||||
|
if [ -f "${QUICK3D_HOST}/bin/balsam" ]; then
|
||||||
|
cp -a "${QUICK3D_HOST}/bin/balsam" "${HOST_BUILD}/bin/"
|
||||||
|
elif [ -f "${QUICK3D_HOST}/libexec/balsam" ]; then
|
||||||
|
cp -a "${QUICK3D_HOST}/libexec/balsam" "${HOST_BUILD}/libexec/"
|
||||||
|
cp -a "${QUICK3D_HOST}/libexec/balsam" "${HOST_BUILD}/bin/balsam"
|
||||||
|
fi
|
||||||
|
cp -a "${QUICK3D_HOST}/lib/cmake/Qt6Quick3D" "${HOST_BUILD}/lib/cmake/" 2>/dev/null || true
|
||||||
|
cp -a "${QUICK3D_HOST}/lib/cmake/Qt6Quick3DPrivate" "${HOST_BUILD}/lib/cmake/" 2>/dev/null || true
|
||||||
|
cp -a "${QUICK3D_HOST}/lib/cmake/Qt6Quick3DTools" "${HOST_BUILD}/lib/cmake/" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
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}" \
|
||||||
|
-DQt6ShaderToolsTools_DIR="${HOST_BUILD}/lib/cmake/Qt6ShaderToolsTools" \
|
||||||
|
-DQt6Quick3DTools_DIR="${HOST_BUILD}/lib/cmake/Qt6Quick3DTools" \
|
||||||
|
-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
|
||||||
|
mkdir -p "${COOKBOOK_STAGE}/usr/metatypes"
|
||||||
|
find . -path '*/meta_types/*.json' -type f -exec cp -an {} "${COOKBOOK_STAGE}/usr/metatypes/" \\; 2>/dev/null || true
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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
|
||||||
|
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
|
"s|${COOKBOOK_SOURCE}/src/.*/meta_types/|${SYSROOT}/metatypes/|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/metatypes" ]; then
|
||||||
|
mkdir -p "${SYSROOT}/metatypes"
|
||||||
|
cp -a "${COOKBOOK_STAGE}/usr/metatypes/"* "${SYSROOT}/metatypes/" 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
|
||||||
|
if [ -d "${COOKBOOK_STAGE}/usr/qml" ]; then
|
||||||
|
mkdir -p "${SYSROOT}/qml"
|
||||||
|
cp -a "${COOKBOOK_STAGE}/usr/qml/"* "${SYSROOT}/qml/" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
"""
|
||||||
@@ -14,6 +14,177 @@ DYNAMIC_INIT
|
|||||||
|
|
||||||
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
||||||
|
|
||||||
|
python - <<'PY'
|
||||||
|
import os
|
||||||
|
from pathlib import Path
|
||||||
|
path = Path(os.environ["COOKBOOK_SOURCE"]) / "src/serialport/qserialport_unix.cpp"
|
||||||
|
text = path.read_text()
|
||||||
|
text = text.replace(
|
||||||
|
'''static inline void qt_set_flowcontrol(termios *tio, QSerialPort::FlowControl flowcontrol)
|
||||||
|
{
|
||||||
|
switch (flowcontrol) {
|
||||||
|
case QSerialPort::NoFlowControl:
|
||||||
|
tio->c_cflag &= ~CRTSCTS;
|
||||||
|
tio->c_iflag &= ~(IXON | IXOFF | IXANY);
|
||||||
|
break;
|
||||||
|
case QSerialPort::HardwareControl:
|
||||||
|
tio->c_cflag |= CRTSCTS;
|
||||||
|
tio->c_iflag &= ~(IXON | IXOFF | IXANY);
|
||||||
|
break;
|
||||||
|
case QSerialPort::SoftwareControl:
|
||||||
|
tio->c_cflag &= ~CRTSCTS;
|
||||||
|
tio->c_iflag |= IXON | IXOFF | IXANY;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
tio->c_cflag &= ~CRTSCTS;
|
||||||
|
tio->c_iflag &= ~(IXON | IXOFF | IXANY);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
''',
|
||||||
|
'''static inline void qt_set_flowcontrol(termios *tio, QSerialPort::FlowControl flowcontrol)
|
||||||
|
{
|
||||||
|
#ifdef CRTSCTS
|
||||||
|
switch (flowcontrol) {
|
||||||
|
case QSerialPort::NoFlowControl:
|
||||||
|
tio->c_cflag &= ~CRTSCTS;
|
||||||
|
tio->c_iflag &= ~(IXON | IXOFF | IXANY);
|
||||||
|
break;
|
||||||
|
case QSerialPort::HardwareControl:
|
||||||
|
tio->c_cflag |= CRTSCTS;
|
||||||
|
tio->c_iflag &= ~(IXON | IXOFF | IXANY);
|
||||||
|
break;
|
||||||
|
case QSerialPort::SoftwareControl:
|
||||||
|
tio->c_cflag &= ~CRTSCTS;
|
||||||
|
tio->c_iflag |= IXON | IXOFF | IXANY;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
tio->c_cflag &= ~CRTSCTS;
|
||||||
|
tio->c_iflag &= ~(IXON | IXOFF | IXANY);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
Q_UNUSED(flowcontrol);
|
||||||
|
tio->c_iflag &= ~(IXON | IXOFF | IXANY);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
''')
|
||||||
|
text = text.replace(
|
||||||
|
'''QSerialPort::PinoutSignals QSerialPortPrivate::pinoutSignals()
|
||||||
|
{
|
||||||
|
int arg = 0;
|
||||||
|
|
||||||
|
if (::ioctl(descriptor, TIOCMGET, &arg) == -1) {
|
||||||
|
setError(getSystemError());
|
||||||
|
return QSerialPort::NoSignal;
|
||||||
|
}
|
||||||
|
''',
|
||||||
|
'''QSerialPort::PinoutSignals QSerialPortPrivate::pinoutSignals()
|
||||||
|
{
|
||||||
|
#ifndef TIOCMGET
|
||||||
|
setError(QSerialPortErrorInfo(QSerialPort::UnsupportedOperationError,
|
||||||
|
QSerialPort::tr("Pinout signal query is not supported on this platform")));
|
||||||
|
return QSerialPort::NoSignal;
|
||||||
|
#else
|
||||||
|
int arg = 0;
|
||||||
|
|
||||||
|
if (::ioctl(descriptor, TIOCMGET, &arg) == -1) {
|
||||||
|
setError(getSystemError());
|
||||||
|
return QSerialPort::NoSignal;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
''')
|
||||||
|
text = text.replace(
|
||||||
|
'''bool QSerialPortPrivate::setDataTerminalReady(bool set)
|
||||||
|
{
|
||||||
|
int status = TIOCM_DTR;
|
||||||
|
if (::ioctl(descriptor, set ? TIOCMBIS : TIOCMBIC, &status) == -1) {
|
||||||
|
setError(getSystemError());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
''',
|
||||||
|
'''bool QSerialPortPrivate::setDataTerminalReady(bool set)
|
||||||
|
{
|
||||||
|
#if !defined(TIOCM_DTR) || !defined(TIOCMBIS) || !defined(TIOCMBIC)
|
||||||
|
Q_UNUSED(set);
|
||||||
|
setError(QSerialPortErrorInfo(QSerialPort::UnsupportedOperationError,
|
||||||
|
QSerialPort::tr("Data terminal ready is not supported on this platform")));
|
||||||
|
return false;
|
||||||
|
#else
|
||||||
|
int status = TIOCM_DTR;
|
||||||
|
if (::ioctl(descriptor, set ? TIOCMBIS : TIOCMBIC, &status) == -1) {
|
||||||
|
setError(getSystemError());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
''')
|
||||||
|
text = text.replace(
|
||||||
|
'''bool QSerialPortPrivate::setRequestToSend(bool set)
|
||||||
|
{
|
||||||
|
int status = TIOCM_RTS;
|
||||||
|
if (::ioctl(descriptor, set ? TIOCMBIS : TIOCMBIC, &status) == -1) {
|
||||||
|
setError(getSystemError());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
''',
|
||||||
|
'''bool QSerialPortPrivate::setRequestToSend(bool set)
|
||||||
|
{
|
||||||
|
#if !defined(TIOCM_RTS) || !defined(TIOCMBIS) || !defined(TIOCMBIC)
|
||||||
|
Q_UNUSED(set);
|
||||||
|
setError(QSerialPortErrorInfo(QSerialPort::UnsupportedOperationError,
|
||||||
|
QSerialPort::tr("Request-to-send is not supported on this platform")));
|
||||||
|
return false;
|
||||||
|
#else
|
||||||
|
int status = TIOCM_RTS;
|
||||||
|
if (::ioctl(descriptor, set ? TIOCMBIS : TIOCMBIC, &status) == -1) {
|
||||||
|
setError(getSystemError());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
''')
|
||||||
|
text = text.replace(
|
||||||
|
'''bool QSerialPortPrivate::setBreakEnabled(bool set)
|
||||||
|
{
|
||||||
|
if (::ioctl(descriptor, set ? TIOCSBRK : TIOCCBRK) == -1) {
|
||||||
|
setError(getSystemError());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
''',
|
||||||
|
'''bool QSerialPortPrivate::setBreakEnabled(bool set)
|
||||||
|
{
|
||||||
|
#if !defined(TIOCSBRK) || !defined(TIOCCBRK)
|
||||||
|
Q_UNUSED(set);
|
||||||
|
setError(QSerialPortErrorInfo(QSerialPort::UnsupportedOperationError,
|
||||||
|
QSerialPort::tr("Break signaling is not supported on this platform")));
|
||||||
|
return false;
|
||||||
|
#else
|
||||||
|
if (::ioctl(descriptor, set ? TIOCSBRK : TIOCCBRK) == -1) {
|
||||||
|
setError(getSystemError());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
''')
|
||||||
|
path.write_text(text)
|
||||||
|
PY
|
||||||
|
|
||||||
# Sysroot path fix: same as other Qt6 modules — cookbook only symlinks
|
# Sysroot path fix: same as other Qt6 modules — cookbook only symlinks
|
||||||
# sysroot/{bin,include,lib,share} but Qt6 cmake targets reference
|
# sysroot/{bin,include,lib,share} but Qt6 cmake targets reference
|
||||||
# ${_IMPORT_PREFIX}/{plugins,mkspecs,metatypes,modules}.
|
# ${_IMPORT_PREFIX}/{plugins,mkspecs,metatypes,modules}.
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ DYNAMIC_INIT
|
|||||||
|
|
||||||
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build"
|
||||||
SHADER_HOST="${COOKBOOK_ROOT}/build/qt-shadertools-host"
|
SHADER_HOST="${COOKBOOK_ROOT}/build/qt-shadertools-host"
|
||||||
|
SHADER_HOST_SRC="${COOKBOOK_ROOT}/build/qt-shadertools-host-src"
|
||||||
|
|
||||||
mkdir -p "${HOST_BUILD}/include/QtGui/6.11.0/QtGui"
|
mkdir -p "${HOST_BUILD}/include/QtGui/6.11.0/QtGui"
|
||||||
|
|
||||||
@@ -20,11 +21,6 @@ if [ -d "${QTBASE_STAGE}/include/QtGui" ] && [ ! -d "${COOKBOOK_SYSROOT}/include
|
|||||||
mkdir -p "${COOKBOOK_SYSROOT}/include"
|
mkdir -p "${COOKBOOK_SYSROOT}/include"
|
||||||
cp -a "${QTBASE_STAGE}/include/QtGui" "${COOKBOOK_SYSROOT}/include/"
|
cp -a "${QTBASE_STAGE}/include/QtGui" "${COOKBOOK_SYSROOT}/include/"
|
||||||
fi
|
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"
|
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
|
if [ -d "${QTBASE_BUILD_INCLUDE}/6.11.0/QtGui/rhi" ]; then
|
||||||
mkdir -p "${COOKBOOK_SYSROOT}/include/QtGui/6.11.0"
|
mkdir -p "${COOKBOOK_SYSROOT}/include/QtGui/6.11.0"
|
||||||
@@ -121,8 +117,9 @@ qsb_cpp.write_text(text)
|
|||||||
|
|
||||||
tools_cmake = Path(os.environ["COOKBOOK_SOURCE"]) / "tools/CMakeLists.txt"
|
tools_cmake = Path(os.environ["COOKBOOK_SOURCE"]) / "tools/CMakeLists.txt"
|
||||||
text = tools_cmake.read_text()
|
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')
|
text = text.replace('# add_subdirectory(qsb) # disabled in Red Bear target build; host qsb is built separately', 'add_subdirectory(qsb)')
|
||||||
tools_cmake.write_text(text)
|
tools_cmake.write_text(text)
|
||||||
|
|
||||||
PY
|
PY
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@@ -131,7 +128,10 @@ PY
|
|||||||
if [ ! -f "${HOST_BUILD}/bin/qsb" ]; then
|
if [ ! -f "${HOST_BUILD}/bin/qsb" ]; then
|
||||||
echo "=== Building qsb host tool ==="
|
echo "=== Building qsb host tool ==="
|
||||||
rm -rf "${SHADER_HOST}"
|
rm -rf "${SHADER_HOST}"
|
||||||
|
rm -rf "${SHADER_HOST_SRC}"
|
||||||
mkdir -p "${SHADER_HOST}"
|
mkdir -p "${SHADER_HOST}"
|
||||||
|
mkdir -p "${SHADER_HOST_SRC}"
|
||||||
|
tar -xf "${COOKBOOK_RECIPE}/source.tar" -C "${SHADER_HOST_SRC}" --strip-components=1
|
||||||
env \
|
env \
|
||||||
-u CPPFLAGS \
|
-u CPPFLAGS \
|
||||||
-u LDFLAGS \
|
-u LDFLAGS \
|
||||||
@@ -144,7 +144,7 @@ if [ ! -f "${HOST_BUILD}/bin/qsb" ]; then
|
|||||||
-u CFLAGS_x86_64_unknown_redox \
|
-u CFLAGS_x86_64_unknown_redox \
|
||||||
-u CXXFLAGS_x86_64_unknown_redox \
|
-u CXXFLAGS_x86_64_unknown_redox \
|
||||||
-u LDFLAGS_x86_64_unknown_redox \
|
-u LDFLAGS_x86_64_unknown_redox \
|
||||||
cmake -S "${COOKBOOK_SOURCE}" -B "${SHADER_HOST}" \
|
cmake -S "${SHADER_HOST_SRC}" -B "${SHADER_HOST}" \
|
||||||
-DCMAKE_C_COMPILER=/usr/bin/cc \
|
-DCMAKE_C_COMPILER=/usr/bin/cc \
|
||||||
-DCMAKE_CXX_COMPILER=/usr/bin/c++ \
|
-DCMAKE_CXX_COMPILER=/usr/bin/c++ \
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
@@ -154,26 +154,19 @@ if [ ! -f "${HOST_BUILD}/bin/qsb" ]; then
|
|||||||
-DQT_BUILD_TESTS=OFF \
|
-DQT_BUILD_TESTS=OFF \
|
||||||
-DQT_GENERATE_SBOM=OFF \
|
-DQT_GENERATE_SBOM=OFF \
|
||||||
-Wno-dev
|
-Wno-dev
|
||||||
cmake --build "${SHADER_HOST}" -j"${COOKBOOK_MAKE_JOBS}"
|
cmake --build "${SHADER_HOST}" --target qsb -j"${COOKBOOK_MAKE_JOBS}"
|
||||||
|
cmake --install "${SHADER_HOST}" --prefix "${HOST_BUILD}"
|
||||||
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
|
fi
|
||||||
|
|
||||||
|
python - <<'PY'
|
||||||
|
import os
|
||||||
|
from pathlib import Path
|
||||||
|
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 2: Cross-compile libQt6ShaderTools for Redox
|
# Step 2: Cross-compile libQt6ShaderTools for Redox
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|||||||
@@ -0,0 +1,156 @@
|
|||||||
|
#TODO: Qt6 Virtual Keyboard — cross-compiled for Redox on top of the verified QML/Qt Quick substrate. Runtime validation of the staged input method plugin and QML imports is still pending.
|
||||||
|
# Provides: libQt6VirtualKeyboard, the QtQuick.VirtualKeyboard QML import, and the platform input context plugin.
|
||||||
|
|
||||||
|
[source]
|
||||||
|
tar = "https://download.qt.io/official_releases/qt/6.11/6.11.0/submodules/qtvirtualkeyboard-everywhere-src-6.11.0.tar.xz"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
template = "custom"
|
||||||
|
dependencies = [
|
||||||
|
"qtdeclarative",
|
||||||
|
"qtsvg",
|
||||||
|
]
|
||||||
|
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
|
||||||
|
|
||||||
|
if [ -d "${COOKBOOK_SYSROOT}/lib/cmake" ]; then
|
||||||
|
find "${COOKBOOK_SYSROOT}/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
|
"s|/usr/include|${COOKBOOK_SYSROOT}/include|g" {} + 2>/dev/null || true
|
||||||
|
find "${COOKBOOK_SYSROOT}/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
|
"s|/usr/lib|${COOKBOOK_SYSROOT}/lib|g" {} + 2>/dev/null || true
|
||||||
|
find "${COOKBOOK_SYSROOT}/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
|
"s|/usr/src/.*/meta_types/|${COOKBOOK_SYSROOT}/metatypes/|g" {} + 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "${COOKBOOK_SYSROOT}/lib/cmake/Qt6Quick" ] \
|
||||||
|
&& [ ! -d "${COOKBOOK_SYSROOT}/usr/lib/cmake/Qt6Quick" ]; then
|
||||||
|
printf '%s\n' \
|
||||||
|
'qtvirtualkeyboard requires a Qt Quick-enabled qtdeclarative sysroot (missing Qt6Quick).' >&2
|
||||||
|
printf '%s\n' \
|
||||||
|
'Rebuild the verified QtQuick/QML substrate before cooking qtvirtualkeyboard.' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "${COOKBOOK_SYSROOT}/lib/cmake/Qt6Svg" ] \
|
||||||
|
&& [ ! -d "${COOKBOOK_SYSROOT}/usr/lib/cmake/Qt6Svg" ]; then
|
||||||
|
printf '%s\n' \
|
||||||
|
'qtvirtualkeyboard requires qtsvg in the sysroot (missing Qt6Svg).' >&2
|
||||||
|
printf '%s\n' \
|
||||||
|
'Cook qtsvg before cooking qtvirtualkeyboard.' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
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
|
||||||
|
if [ -d "translations" ]; then
|
||||||
|
mkdir -p "${COOKBOOK_STAGE}/usr/translations"
|
||||||
|
cp -a translations/* "${COOKBOOK_STAGE}/usr/translations/" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
mkdir -p "${COOKBOOK_STAGE}/usr/metatypes"
|
||||||
|
find . -path '*/meta_types/*.json' -type f -exec cp -an {} "${COOKBOOK_STAGE}/usr/metatypes/" \\; 2>/dev/null || true
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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
|
||||||
|
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
|
"s|/usr/lib|${SYSROOT}/lib|g" {} + 2>/dev/null || true
|
||||||
|
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
|
"s|/usr/src/.*/meta_types/|${SYSROOT}/metatypes/|g" {} + 2>/dev/null || true
|
||||||
|
find "${COOKBOOK_STAGE}/usr/lib/cmake" -name '*.cmake' -exec sed -i \
|
||||||
|
"s|${COOKBOOK_SOURCE}/src/.*/meta_types/|${SYSROOT}/metatypes/|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
|
||||||
|
if [ -d "${COOKBOOK_STAGE}/usr/metatypes" ]; then
|
||||||
|
mkdir -p "${SYSROOT}/metatypes"
|
||||||
|
cp -a "${COOKBOOK_STAGE}/usr/metatypes/"* "${SYSROOT}/metatypes/" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
"""
|
||||||
Reference in New Issue
Block a user