mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-19 16:15:07 +00:00
Every time someone modifies the build system — adding a source file, changing a compilation flag, or wiring a new test — the change tends to land in only one of our two build systems (configure.py or CMake). Over time this causes three classes of problems: 1. **CMake stops compiling entirely.** Missing defines, wrong sanitizer flags, or misplaced subdirectory ordering cause hard build failures that are only discovered when someone tries to use CMake (e.g. for IDE integration). 2. **Missing build targets.** Tests or binaries present in configure.py are never added to CMake, so `cmake --build` silently skips them. This PR fixes several such cases (e.g. `symmetric_key_test`, `auth_cache_test`, `sstable_tablet_streaming`). 3. **Missing compilation units in targets.** A `.cc` file is added to a test binary in one system but not the other, causing link errors or silently omitted test coverage. To fix the existing drift and prevent future divergence, this series: **Adds a build-system comparison script** (`scripts/compare_build_systems.py`) that configures both systems into a temporary directory, parses their generated `build.ninja` files, and compares per-file compilation flags, link target sets, and per-target libraries. configure.py is treated as the baseline; CMake must match it. The script supports a `--ci` mode suitable for gating PRs that touch build files. **Fixes all current mismatches** found by the script: - Mode flag alignment in `mode.common.cmake` and `mode.Coverage.cmake` (sanitizer flags, `-fno-lto`, stack-usage warnings, coverage defines). - Global define alignment (`SEASTAR_NO_EXCEPTION_HACK`, `XXH_PRIVATE_API`, `BOOST_ALL_DYN_LINK`, `SEASTAR_TESTING_MAIN` placement). - Seastar build configuration (shared vs static per mode, coverage sanitizer link options). - Abseil sanitizer flags (`-fno-sanitize=vptr`). - Missing test targets in `test/boost/CMakeLists.txt`. - Redundant per-test flags now covered by global settings. - Lua library resolution via a custom `cmake/FindLua.cmake` using pkg-config, matching configure.py's approach. **Adds documentation** (`docs/dev/compare-build-systems.md`) describing how to run the script and interpret its output. No backport needed — this is build infrastructure improvement only. Closes scylladb/scylladb#29273 * github.com:scylladb/scylladb: scripts: remove lua library rename workaround from comparison script cmake: add custom FindLua using pkg-config to match configure.py test/cmake: add missing tests to boost test suite test/cmake: remove per-test LTO disable cmake: add BOOST_ALL_DYN_LINK and strip per-component defines cmake: move SEASTAR_TESTING_MAIN after seastar and abseil subdirs cmake: add -fno-sanitize=vptr for abseil sanitizer flags cmake: align Seastar build configuration with configure.py cmake: align global compile defines and options with configure.py cmake: fix Coverage mode in mode.Coverage.cmake cmake: align mode.common.cmake flags with configure.py configure.py: add sstable_tablet_streaming to combined_tests docs: add compare-build-systems.md scripts: add compare_build_systems.py to compare ninja build files