f31522130f
Build system (5 gaps hardened): - COOKBOOK_OFFLINE defaults to true (fork-mode) - normalize_patch handles diff -ruN format - New 'repo validate-patches' command (25/25 relibc patches) - 14 patched Qt/Wayland/display recipes added to protected list - relibc archive regenerated with current patch chain Boot fixes (fixable): - Full ISO EFI partition: 16 MiB → 1 MiB (matches mini, BIOS hardcoded 2 MiB offset) - D-Bus system bus: absolute /usr/bin/dbus-daemon path (was skipped) - redbear-sessiond: absolute /usr/bin/redbear-sessiond path (was skipped) - daemon framework: silenced spurious INIT_NOTIFY warnings for oneshot_async services (P0-daemon-silence-init-notify.patch) - udev-shim: demoted INIT_NOTIFY warning to INFO (expected for oneshot_async) - relibc: comprehensive named semaphores (sem_open/close/unlink) replacing upstream todo!() stubs - greeterd: Wayland socket timeout 15s → 30s (compositor DRM wait) - greeter-ui: built and linked (header guard unification, sem_compat stubs removed) - mc: un-ignored in both configs, fixed glib/libiconv/pcre2 transitive deps - greeter config: removed stale keymapd dependency from display/greeter services - prefix toolchain: relibc headers synced, _RELIBC_STDLIB_H guard unified Unfixable (diagnosed, upstream): - i2c-hidd: abort on no-I2C-hardware (QEMU) — process::exit → relibc abort - kded6/greeter-ui: page fault 0x8 — Qt library null deref - Thread panics fd != -1 — Rust std library on Redox - DHCP timeout / eth0 MAC — QEMU user-mode networking - hwrngd/thermald — no hardware RNG/thermal in VM - live preload allocation — BIOS memory fragmentation, continues on demand
61 lines
2.5 KiB
CMake
61 lines
2.5 KiB
CMake
# Copyright (C) 2022 The Qt Company Ltd.
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
# Computes which sanitizer options should be set based on features evaluated in qtbase.
|
|
# Sets ECM_ENABLE_SANITIZERS with those options in the function calling scope.
|
|
function(qt_internal_set_up_sanitizer_options)
|
|
set(ECM_ENABLE_SANITIZERS "" CACHE STRING "Enable sanitizers")
|
|
set_property(CACHE ECM_ENABLE_SANITIZERS PROPERTY STRINGS
|
|
"address;memory;thread;undefined;fuzzer;fuzzer-no-link")
|
|
|
|
# If QT_FEATURE_sanitize_foo was enabled, make sure to set the appropriate
|
|
# ECM_ENABLE_SANITIZERS value.
|
|
set(enabled_sanitizer_features "")
|
|
foreach(sanitizer_type address memory thread undefined)
|
|
if(QT_FEATURE_sanitize_${sanitizer_type})
|
|
list(APPEND enabled_sanitizer_features "${sanitizer_type}")
|
|
endif()
|
|
endforeach()
|
|
|
|
# There's a mismatch between fuzzer-no-link ECM option and fuzzer_no_link Qt feature.
|
|
if(QT_FEATURE_sanitize_fuzzer_no_link)
|
|
list(APPEND enabled_sanitizer_features "fuzzer-no-link")
|
|
endif()
|
|
|
|
if(enabled_sanitizer_features)
|
|
set(ECM_ENABLE_SANITIZERS "${enabled_sanitizer_features}" PARENT_SCOPE)
|
|
endif()
|
|
endfunction()
|
|
|
|
# This function clears the previously set sanitizer flags from CMAKE_<C|CXX>_FLAGS
|
|
function(qt_internal_skip_sanitizer)
|
|
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR
|
|
CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR
|
|
CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
|
foreach(sanitizer ${ECM_ENABLE_SANITIZERS})
|
|
string(TOLOWER "${sanitizer}" sanitizer)
|
|
enable_sanitizer_flags("${sanitizer}")
|
|
qt_internal_remove_compiler_flags(${XSAN_COMPILE_FLAGS})
|
|
endforeach()
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" PARENT_SCOPE)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" PARENT_SCOPE)
|
|
endif()
|
|
endfunction()
|
|
|
|
# This function disables the sanitizer library linking to all targets created in a subdirectory
|
|
# where the function is called. Note that the function should be called after all involved targets
|
|
# are created, to make sure they are collected by the function.
|
|
function(qt_internal_skip_linking_sanitizer)
|
|
_qt_internal_collect_buildsystem_targets(all_targets "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
INCLUDE
|
|
STATIC_LIBRARY
|
|
MODULE_LIBRARY
|
|
SHARED_LIBRARY
|
|
OBJECT_LIBRARY
|
|
EXECUTABLE
|
|
)
|
|
foreach(t IN LISTS all_targets)
|
|
set_property(TARGET ${t} PROPERTY SKIP_SANITIZER TRUE)
|
|
endforeach()
|
|
endfunction()
|