Збирання компілятора
З кореня репозиторію:
cmake --preset debug
cmake --build --preset debug
У Windows використовуйте пресет clang-cl/Ninja Multi-Config з оболонки розробника:
cmake --preset windows
cmake --build --preset windows-debug
cmake --build --preset windows-release
Тести та їхні допоміжні виконувані файли вмикаються за бажанням. Для тестування налаштуйте їх явно:
cmake --preset debug -DBUILD_TESTING=ON
cmake --build --preset debug
ctest --preset debug --no-tests=error
У Windows:
cmake --preset windows -DBUILD_TESTING=ON
cmake --build --preset windows-debug
ctest --preset windows-debug --no-tests=error
cmake --build --preset windows-release
ctest --preset windows-release --no-tests=error
Тести мають два режими, що вибираються через CLAUSE_TEST_MODE:
fastдля розробки: еталонні корпуси виконуються з двома комбінаціями політики/драйвера (O0 з позиційними вхідними файлами та O2 без спеціалізації через проєкт) замість усіх восьми, випадки мутацій виконуються один раз, а тести з міткоюfull_only(окремі споживчі проєкти CMake і вимірювання часу) виключено.full(за замовчуванням, якщо не задано) виконує кожну комбінацію і кожен тест; використовуйте його, коли завершено велику можливість.
ctest --preset debug-fast # or windows-debug-fast; tests use half the logical CPUs
ctest --preset debug -j 32 # full mode; -j N runs N/2 tests at once
make test # fast; make test-full or TEST_MODE=full for full
make-test.bat дотримується тих самих налаштувань TEST_MODE (за
замовчуванням fast) і TEST_JOBS (за замовчуванням усі логічні процесори).
Кожен тест резервує два слоти процесора CTest (PROCESSORS 2), тож за кількості
слотів N одночасно виконується щонайбільше N/2 тестів, що лишає місце для
компіляторів і вкладених нативних збирань, які запускають тести. На хості
Windows x64 з 32 потоками швидкий режим триває близько хвилини, а повний —
близько 85 секунд із 16 завданнями (729 секунд послідовно).
Для каталогу збирання без пресету передайте -DBUILD_TESTING=ON у
cmake -S . -B <dir> для тестування. CMake кешує це налаштування; передайте
-DBUILD_TESTING=OFF, коли повторно використовуєте цей каталог для звичайних
збирань. Звичайні пресети та обгортки збирання встановлюють його в OFF.
Пакетні скрипти віддзеркалюють цілі Makefile build, format і clean:
make-build.bat, make-test.bat, make-format.bat і make-clean.bat.
Скрипти збирання і тестування налаштовують clang-cl з Ninja Multi-Config, як
пресет windows, самостійно входячи в середовище Visual Studio x64, коли
оболонка не є оболонкою розробника, і додаючи %ProgramFiles%\LLVM\bin до
PATH, коли clang-cl відсутній. Каталог збирання, налаштований з іншим
генератором або компілятором, переналаштовується з нуля; задайте
CLAUSE_TOOLCHAIN=default, щоб зберегти власний вибір CMake (наприклад, MSVC
cl в окремому каталозі). Значення збирання за замовчуванням:
BUILD_DIR=build/debug, BUILD_TYPE=Debug і паралелізм нативного інструмента
збирання (перевизначається через JOBS=N); змінні середовища CMAKE, CTEST,
CMAKE_ARGS і CLANG_FORMAT також перевизначають відповідні
інструменти/параметри. make-test.bat налаштовує збирання з увімкненим
тестуванням, збирає всі цілі, потім запускає CTest, як і make test, і передає
далі невдачі конфігурування, збирання або тестів. Очищення видаляє локальні
для репозиторію каталоги build/ і cmake-build*/.
Перевірки якості та форматування за замовчуванням стосуються змінених файлів:
усього, що в робочому дереві відрізняється від HEAD, а також невідстежуваних
файлів.
Інструменти перевірки якості містяться в ігнорованому середовищі
.venv-quality/, версії зафіксовано в tools/requirements-quality.txt:
python -m venv .venv-quality, потім .venv-quality/Scripts/python -m pip install -r tools/requirements-quality.txt
(.venv-quality/bin/python поза Windows).
cmake --build build/debug --target check-qualityзапускає Lizard на змінених робочих файлах C++ і clang-tidy на змінених одиницях трансляції, а також на тих, що включають змінений заголовок (за залежностями, записаними Ninja). Зміни в.clang-tidy,cmake/або робочихCMakeLists.txt, чи відсутність даних про залежності, призводять до перевірки кожної одиниці трансляції. ЗадайтеCLAUSE_QUALITY_BASE(наприклад,origin/master), щоб порівнювати з іншою базою.check-quality-all(а такожcheck-complexity-all,check-clang-tidy-all) перевіряють кожен файл.- clang-tidy виконується пакетами по
4 x jobsодиниць трансляції й після кожного друкує рядок passed/FAILED; виконуються всі пакети, а потім перевірка завершується невдачею, якщо невдалим був будь-який пакет. Щоб розбити довгий запуск на коротші окремі виклики, викличте скрипт безпосередньо із шардом, наприкладcmake -DQUALITY_SCOPE=all -DQUALITY_BUILD_DIR=build/debug -DQUALITY_SHARD=1/4 -P cmake/CheckClangTidy.cmakeдля першої чверті (QUALITY_BATCHіQUALITY_JOBSперевизначають розмір пакета і кількість завдань; за замовчуванням завдань — половина логічних ядер). make format/make-format.batформатують змінені файли C++;make format-allабоFORMAT_SCOPE=all make-format.batформатує все.
clau.bat --help спочатку виконує збирання, а потім передає всі аргументи
виконуваному файлу вибраної конфігурації. Невдачі збирання зупиняють
виконання; шляхи вхідних файлів компілятора лишаються відносними до робочого
каталогу викликача, а його код виходу зберігається.
Для розробки runtime без завантаження чи використання C++ SDK LLVM
налаштовуйте з cmake --preset windows -DCLAUSE_BUILD_COMPILER=OFF;
застосовуються ті самі пресети збирання/тестування. Поверніть параметр у ON,
коли SDK стане доступним. MSVC cl також приймається в окремому каталозі
збирання; MinGW не підтримується для нативних збирань розробки у Windows.
Вибирайте x86 або x64 через середовище розробника (або -A з генератором
Visual Studio) і використовуйте SDK LLVM та runtime тієї самої архітектури.
CRT за замовчуванням у Windows — /MDd для Debug і /MD для інших
конфігурацій, зокрема для статичної бібліотеки runtime та її споживачів. Явно
задане налаштування CMAKE_MSVC_RUNTIME_LIBRARY зберігається; воно має
відповідати SDK LLVM і всім скомпонованим бібліотекам C++. Уникайте змішування
артефактів STL/CRT для Debug і Release. Вихідні файли проєкту у Windows і
фікстури CLI/шляхів використовують UTF-8.
Усі цілі проєкту використовують C++23 і трактують попередження компілятора як
помилки. Виконуваний файл — build/debug/bin/clau. Пресети та обгортки
збирання запитують паралельні збирання у Windows, Linux і macOS з типовою для
нативного інструмента збирання кількістю завдань (jobs: 0 у пресетах,
--parallel в обгортках). Задайте явне обмеження через
cmake --build --preset debug --parallel 8 або JOBS=8 для обгорток. Для
каталогу збирання без пресету використовуйте cmake --build <dir> --parallel.
Пресет Windows розміщує виконуваний файл у build/windows/bin/<Config>/clau.exe,
а runtime — у build/windows/lib/<Config>/clause_runtime.lib.
Як альтернативу використовуйте make build, щоб зібрати лише clau та його
залежності, або make test, щоб зібрати й запустити повний набір тестів. Для
іншої конфігурації:
make test BUILD_DIR=build/release BUILD_TYPE=Release JOBS=4
CMake знаходить встановлені Boost і Erlang, зокрема встановлення Homebrew. Щоб перевизначити значення за замовчуванням, передайте під час конфігурування такі параметри:
| Параметр | Призначення |
|---|---|
-DCLAUSE_BOOST_ROOT=/path/to/boost | Вибрати встановлення Boost або повне дерево вихідних кодів |
-DCLAUSE_TOML_ROOT=/path/to/tomlplusplus-3.4.0 | Вибрати зафіксовану залежність TOML |
-DCLAUSE_OTP_AUDITS=ON | Увімкнути необов'язкові живі аудити OTP/еталона; за замовчуванням OFF |
-DCLAUSE_ESCRIPT=/path/to/bin/escript | Вибрати OTP 29+ для необов'язкових аудитів; звичайні тести не використовують |
-DCLAUSE_CLANG_EXECUTABLE=C:/path/to/clang.exe | Вибрати встановлений виконуваний файл Clang для Windows |
-DLLVM_DIR=/prefix/lib/cmake/llvm | Вибрати наявний SDK LLVM 23.1.x (недійсні явні шляхи дають помилку) |
-DCLAUSE_DOWNLOAD_LLVM=OFF | Вимагати встановлений SDK; вимкнути автоматичні завантаження LLVM |
-DBUILD_TESTING=ON | Увімкнути тести, допоміжні виконувані файли та їхню залежність від Erlang (за замовчуванням: OFF) |
-DCLAUSE_BUILD_COMPILER=OFF | Зібрати лише бібліотеку runtime |
-DCLAUSE_BUILD_RUNTIME=OFF | Зібрати лише компілятор |
Для генераторів із кількома конфігураціями додавайте --config Debug під час
збирання і -C Debug під час тестування. IDE з підтримкою CMake можуть
відкривати репозиторій з пресетом debug або з пресетом windows і
інструментарієм розробки Visual Studio.
Заголовки Boost і toml++ використовують включення CMake SYSTEM, зберігаючи
режим «попередження як помилки» для коду проєкту. У нативних збираннях для
macOS CMake також позначає зв'язаний каталог включень Homebrew як SYSTEM,
коли його заголовки Boost відповідають вибраному встановленню. Це не дає
успадкованим прапорцям, як-от CXXFLAGS=-I/opt/homebrew/include, виявляти
попередження Boost, зокрема коли цей прапорець уже закешовано CMake. Для інших
встановлень уникайте додавання шляхів залежностей через глобальні прапорці
-I (зокрема CXXFLAGS): звичайний шлях включення може мати пріоритет над
системним шляхом залежності. Якщо CLion повідомляє про попередження Boost як
про помилки, приберіть ці глобальні прапорці та очистіть кешоване значення,
наприклад:
cmake -S . -B cmake-build-debug -DCMAKE_CXX_FLAGS:STRING=
Потім перезавантажте CMake у CLion. Щоб вибрати встановлення, використовуйте наведені вище параметри коренів залежностей замість додавання глобальних прапорців включення.
Clause