4.9 KiB
4.9 KiB
Step 7: CMake and GoogleTest Foundation
담당 역할과 필수 스킬
- 담당 역할:
implementation-agent - 필수 스킬:
fesa-cpp-msvc-tdd - 구현 전에 스킬과 Step 6 implementation plan을 끝까지 읽어라.
읽어야 할 파일
/AGENTS.md/docs/ARCHITECTURE.md/docs/ADR.md/docs/linear-static-3d-euler-beam/implementation-plan.md/docs/superpowers/specs/2026-08-08-linear-static-3d-euler-beam-design.md/docs/HARNESS_WORKFLOW.md/docs/HARNESS.md/CMakeLists.txt가 이미 생겼다면 그 파일
소유 파일
- Create:
/CMakeLists.txt - Create:
/cmake/FesaDependencies.cmake - Create:
/include/fesa/build_info.hpp - Create:
/src/fesa/build_info.cpp - Create:
/src/fesa/CMakeLists.txt - Create:
/tests/CMakeLists.txt - Create:
/tests/unit/build_info_test.cpp - Create:
/docs/linear-static-3d-euler-beam/implementation-report.md
작업
MSVC x64 Debug에서 이후 모든 C++ step을 TDD로 실행할 최소 build/test foundation을 구현하라. Step 6이 정한 exact file layout을 우선하되 최소 책임은 다음과 같다.
CMakeLists.txt: C++17,enable_testing(), FESA target 구성과 하위 CMake 진입점.cmake/FesaDependencies.cmake: cache variableFESA_GTEST_SOURCE_DIR을 검증하고C:/git/googletest를 source tree로 받을 수 있게 한다. 이 절대경로를 default나 production source에 하드코딩하지 않는다. oneMKL, oneTBB, HDF5 CONFIG package를 찾고 dependency target 차이는 이 파일 안에서 정규화한다.include/fesa/build_info.hpp,src/fesa/build_info.cpp: HDF5 metadata가 재사용할std::string_view solverVersion() noexcept의 최소 안정 API.src/fesa/CMakeLists.txt:fesa_solverstatic library와 FESA에만/W4 /WX적용.tests/CMakeLists.txt,tests/unit/build_info_test.cpp: GoogleTest 연결,gtest_discover_tests,BuildInforegex와 공통linear-static-3d-euler-beamlabel을 가진 최소 제품 test. 이후 이 phase의 모든 CTest는 같은 공통 label을 상속한다.docs/linear-static-3d-euler-beam/implementation-report.md: feature metadata, dependency/configure evidence와 Step 7–24별 RED/GREEN/VERIFY command, exit code, 핵심 output, 변경 파일, requirement/test trace를 누적할 implementation report.
GoogleTest external target에는 /W4 /WX를 전파하지 않는다. MKL/TBB/HDF5 header나 type을
build_info.hpp 또는 다른 public header에 노출하지 않는다. 외부 checkout을 수정하거나
network fetch를 하지 않는다.
Acceptance Criteria
먼저 C:/git/googletest의 revision을 read-only로 확인하라.
if (-not (Test-Path 'C:/git/googletest/CMakeLists.txt')) { throw 'GoogleTest checkout is missing' }
$gtestRevision = git -C C:/git/googletest rev-parse HEAD
if ($gtestRevision -ne '04ee1b4f2aefdffb0135d7cf2a2c519fe50dabe4') {
throw "Unexpected GoogleTest revision: $gtestRevision"
}
구성·build·discovery·test를 실행한다.
cmake -S . -B .harness/build -A x64 `
-DFESA_GTEST_SOURCE_DIR=C:/git/googletest `
"-DMKL_DIR=C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl" `
"-DTBB_DIR=C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb" `
"-DHDF5_DIR=C:/Program Files/HDF_Group/HDF5/2.1.1/cmake"
cmake --build .harness/build --config Debug
ctest --test-dir .harness/build -C Debug -R BuildInfo --output-on-failure
$discovery = ctest --test-dir .harness/build -C Debug --show-only=json-v1 | ConvertFrom-Json
if ($discovery.tests.Count -lt 1) { throw 'CTest discovered zero tests' }
ctest --test-dir .harness/build -C Debug --output-on-failure
if (-not (Test-Path 'docs/linear-static-3d-euler-beam/implementation-report.md')) {
throw 'Missing implementation evidence report'
}
검증 절차
- build_info test를 먼저 작성하고 API가 없어 compile RED가 발생하는지 확인한 뒤
build_infoproduction 파일을 추가한다. - 위 명령을 실행해 GREEN과 전체 VERIFY를 확인한다.
- MSVC compiler metadata와 FESA target
/W4 /WX, third-party warning 격리를 확인한다. - implementation report에 Step 7 RED/GREEN/VERIFY의 실제 command, exit code와 핵심 output을 기록한다.
- Step 7을
completed로 바꾸고 build files, target names, dependency resolution을summary에 기록한다. 설치 경로/환경이 실제로 없으면blocked, 반복 구현 실패는error로 기록한다.
금지사항
- dependency source를 vendor하거나 download하지 마라. 이유: 승인된 local install을 사용한다.
- GoogleTest 절대경로를 CMake default로 하드코딩하지 마라. 이유: cache variable 계약이다.
- FESA warning option을 third-party target에 적용하지 마라. 이유: 외부 코드 경고는 제품 책임이 아니다.
- 이후 solver module을 미리 만들지 마라. 이유: 이 step은 build/test foundation만 소유한다.
- 직접 commit하지 마라. 이유: Harness executor가 담당한다.