tools: проверять, с какой оптимизацией собраны подпроекты - #3803
Merged
Conversation
Подпроекты берут свои флаги от meson при ПЕРВОЙ конфигурации каталога сборки. Если каталог старше строки с default_options в meson.build, библиотека так и останется собранной без -O, и об этом ничто не скажет: сборка идёт, тесты проходят. Разница заметная. Замер на fmt::format с одним числом и строкой: 104 нс со сборкой -O2 против 525 нс без оптимизации, то есть впятеро. Вызовов fmt::format в движке больше шестисот. Скрипт читает compile_commands.json, показывает флаги движка и каждого подпроекта и печатает готовую команду, которая чинит это без полной пересборки. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XUwDWDnYdXrJdvjDVd36QH
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Из разговора про скорость
fmt::format: замер против нашей собраннойlibfmt.aдал 525 нс на простое форматирование вместо ожидаемых 104. Оказалось, библиотека в моём каталоге сборки собрана вообще без-O.Почему так выходит
В
meson.build:353для fmt указаноdefault_options: ['default_library=static', 'optimization=2'], и на свежем каталоге всё правильно — fmt получает-O2. Ноdefault_optionsприменяется только при первой конфигурации подпроекта. Каталог, созданный раньше этой строки, остаётся с неоптимизированной библиотекой навсегда, и никакого сигнала об этом нет: сборка идёт, тесты проходят, просто всё медленнее.У меня в
build/так собраныgtestиyaml-cpp— а до сегодняшнего дня был иfmt.Насколько это заметно
fmt::formatс одним числом и строкой, 300 000 вызовов,-O3у вызывающего кода:-O2(как задумано)-OВпятеро. Вызовов
fmt::formatв движке больше шестисот, включая логи и сообщения.Что делает скрипт
Читает
compile_commands.json, показывает флаги движка и каждого подпроекта, помечает те, что собраны без оптимизации, и печатает готовую команду для починки — без полной пересборки:Возвращает 1, если что-то не в порядке, — годится и для проверки в CI.
Что стоит проверить
Боевой каталог сборки: если он старый, там сейчас именно такая
fmt.🤖 Generated with Claude Code
https://claude.ai/code/session_01XUwDWDnYdXrJdvjDVd36QH