docs(toolchain): adopt Visual Studio 2026 v145
This commit is contained in:
@@ -13,7 +13,7 @@
|
|||||||
## 기술 기준
|
## 기술 기준
|
||||||
|
|
||||||
- 언어 표준: C++20
|
- 언어 표준: C++20
|
||||||
- 컴파일러: Visual Studio 2022 MSVC v143
|
- 컴파일러: Visual Studio 2026 MSVC v145
|
||||||
- 대상 플랫폼: Windows x64
|
- 대상 플랫폼: Windows x64
|
||||||
- 빌드 및 테스트: CMake, CMake Presets, CTest, GoogleTest/GoogleMock
|
- 빌드 및 테스트: CMake, CMake Presets, CTest, GoogleTest/GoogleMock
|
||||||
- 수치 연산 및 희소 직접해법: Intel oneAPI MKL
|
- 수치 연산 및 희소 직접해법: Intel oneAPI MKL
|
||||||
|
|||||||
+23
-1
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
## ADR-001: C++20, MSVC v143, x64와 CMake Presets
|
## ADR-001: C++20, MSVC v143, x64와 CMake Presets
|
||||||
|
|
||||||
**상태:** Accepted
|
**상태:** Superseded by ADR-016
|
||||||
|
|
||||||
**상황:** 첫 배포는 Windows 개발팀 내부 검증용이며 Intel oneAPI와 HDF5를 일관되게
|
**상황:** 첫 배포는 Windows 개발팀 내부 검증용이며 Intel oneAPI와 HDF5를 일관되게
|
||||||
연동하고 Harness에서 자동 검증해야 한다.
|
연동하고 Harness에서 자동 검증해야 한다.
|
||||||
@@ -275,3 +275,25 @@ flat `Domain`으로 정규화한다. 외부 entity는 `(instance name, part-loca
|
|||||||
- 요청한 파일이 없으면 실패하며 비요청 물리량을 통과로 오인하지 않는다.
|
- 요청한 파일이 없으면 실패하며 비요청 물리량을 통과로 오인하지 않는다.
|
||||||
- 단일 Instance에서는 Instance 열을 생략할 수 있다.
|
- 단일 Instance에서는 Instance 열을 생략할 수 있다.
|
||||||
- tolerance와 검증 출처는 test registration과 `docs/VALIDATION.md`에서 관리한다.
|
- tolerance와 검증 출처는 test registration과 `docs/VALIDATION.md`에서 관리한다.
|
||||||
|
|
||||||
|
## ADR-016: Visual Studio 2026 MSVC v145로 툴체인 갱신
|
||||||
|
|
||||||
|
**상태:** Accepted
|
||||||
|
|
||||||
|
**상황:** 개발 환경에 Visual Studio 2026 Community와 MSVC v145가 설치되어 있고,
|
||||||
|
CMake 4.4.0이 `Visual Studio 18 2026` 생성기를 지원한다. 반면 기존 ADR-001의
|
||||||
|
Visual Studio 2022 MSVC v143은 설치되어 있지 않아 solver bootstrap을 진행할 수
|
||||||
|
없다.
|
||||||
|
|
||||||
|
**결정:** ADR-001의 컴파일러 선택을 대체해 C++20, Visual Studio 2026 MSVC v145,
|
||||||
|
Windows x64를 사용한다. CMake Preset은 `Visual Studio 18 2026` 생성기와 `v145`
|
||||||
|
toolset을 명시한다. CMake, CMake Presets, CTest 및 GoogleTest/GoogleMock 선택은
|
||||||
|
유지한다.
|
||||||
|
|
||||||
|
**결과와 트레이드오프:**
|
||||||
|
|
||||||
|
- 현재 설치된 개발 환경에서 별도 v143 설치 없이 bootstrap을 진행할 수 있다.
|
||||||
|
- 빌드 계약이 Visual Studio 2026과 v145에 고정되므로 이전 MSVC toolset은 Phase 1
|
||||||
|
보장 대상이 아니다.
|
||||||
|
- 컴파일러 갱신에 따른 경고와 표준 라이브러리 동작은 전체 Debug/Release 검증에서
|
||||||
|
다시 확인해야 한다.
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
**Architecture:** Implement one end-to-end vertical slice first, then complete the input, numerical, parallel, result, and reference-verification contracts behind the module boundaries in `docs/ARCHITECTURE.md`. Keep the semantic model independent of Abaqus syntax and isolate oneMKL, oneTBB, and HDF5 behind adapters.
|
**Architecture:** Implement one end-to-end vertical slice first, then complete the input, numerical, parallel, result, and reference-verification contracts behind the module boundaries in `docs/ARCHITECTURE.md`. Keep the semantic model independent of Abaqus syntax and isolate oneMKL, oneTBB, and HDF5 behind adapters.
|
||||||
|
|
||||||
**Tech Stack:** C++20, Visual Studio 2022 MSVC v143 x64, CMake/CMake Presets/CTest, GoogleTest/GoogleMock, Intel oneAPI MKL PARDISO, Intel oneAPI TBB, HDF5 C API, Python 3 Harness.
|
**Tech Stack:** C++20, Visual Studio 2026 MSVC v145 x64, CMake/CMake Presets/CTest, GoogleTest/GoogleMock, Intel oneAPI MKL PARDISO, Intel oneAPI TBB, HDF5 C API, Python 3 Harness.
|
||||||
|
|
||||||
## Global Constraints
|
## Global Constraints
|
||||||
|
|
||||||
@@ -28,12 +28,16 @@
|
|||||||
The planning environment currently has:
|
The planning environment currently has:
|
||||||
|
|
||||||
- CMake 4.4.0
|
- CMake 4.4.0
|
||||||
|
- Visual Studio Community 2026 at `C:/Program Files/Microsoft Visual Studio/18/Community`
|
||||||
|
- MSVC v145 tools at `C:/Program Files/Microsoft Visual Studio/18/Community/VC/Tools/MSVC/14.51.36231`
|
||||||
|
- CMake generator `Visual Studio 18 2026`
|
||||||
- oneMKL CMake package at `C:/Program Files (x86)/Intel/oneAPI/2026.1/lib/cmake/mkl`
|
- oneMKL CMake package at `C:/Program Files (x86)/Intel/oneAPI/2026.1/lib/cmake/mkl`
|
||||||
- oneTBB CMake package at `C:/Program Files (x86)/Intel/oneAPI/2026.1/lib/cmake/tbb`
|
- oneTBB CMake package at `C:/Program Files (x86)/Intel/oneAPI/2026.1/lib/cmake/tbb`
|
||||||
- no HDF5 or GoogleTest CMake package found in the standard Program Files trees
|
- no HDF5 or GoogleTest CMake package found in the standard Program Files trees
|
||||||
- `MSBuild.exe` not currently available on `PATH`
|
- `MSBuild.exe` at `C:/Program Files/Microsoft Visual Studio/18/Community/MSBuild/Current/Bin/MSBuild.exe`
|
||||||
|
|
||||||
Task 1 must stop as `blocked` rather than downloading packages if HDF5, GoogleTest, or the MSVC toolchain is still unavailable.
|
The solver bootstrap must stop as `blocked` rather than downloading packages if a dependency
|
||||||
|
required by its current step is unavailable.
|
||||||
|
|
||||||
## Required Research Record
|
## Required Research Record
|
||||||
|
|
||||||
@@ -155,14 +159,20 @@ Run:
|
|||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
cmake --version
|
cmake --version
|
||||||
Get-Command MSBuild.exe
|
& "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" `
|
||||||
|
-latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 `
|
||||||
|
-property installationPath
|
||||||
|
Test-Path "C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Current\Bin\MSBuild.exe"
|
||||||
|
Get-ChildItem "C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC" -Directory
|
||||||
Get-ChildItem "C:\Program Files (x86)\Intel\oneAPI" -Recurse -Filter MKLConfig.cmake
|
Get-ChildItem "C:\Program Files (x86)\Intel\oneAPI" -Recurse -Filter MKLConfig.cmake
|
||||||
Get-ChildItem "C:\Program Files (x86)\Intel\oneAPI" -Recurse -Filter TBBConfig.cmake
|
Get-ChildItem "C:\Program Files (x86)\Intel\oneAPI" -Recurse -Filter TBBConfig.cmake
|
||||||
Get-ChildItem "C:\Program Files" -Recurse -Filter hdf5-config.cmake
|
Get-ChildItem "C:\Program Files" -Recurse -Filter hdf5-config.cmake
|
||||||
Get-ChildItem "C:\Program Files" -Recurse -Filter GTestConfig.cmake
|
Get-ChildItem "C:\Program Files" -Recurse -Filter GTestConfig.cmake
|
||||||
```
|
```
|
||||||
|
|
||||||
Expected: MSVC, oneMKL, oneTBB, HDF5, and GoogleTest are all discoverable. If any are missing, mark the Harness step `blocked` and name the missing package; do not download it.
|
Expected: Visual Studio 2026/MSVC v145, oneMKL, oneTBB, HDF5, and GoogleTest
|
||||||
|
are all discoverable before the step that consumes each dependency. If a required item is
|
||||||
|
missing, mark that Harness step `blocked` and name it; do not download it.
|
||||||
|
|
||||||
- [ ] **Step 2: Write the failing version test**
|
- [ ] **Step 2: Write the failing version test**
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ packaging 전에 `docs/BUILDING.md`, `docs/INPUT_FORMAT.md`,
|
|||||||
|
|
||||||
체크리스트는 다음 증거 위치와 command를 포함해야 한다.
|
체크리스트는 다음 증거 위치와 command를 포함해야 한다.
|
||||||
|
|
||||||
- MSVC v143 x64, C++20 및 dependency versions
|
- Visual Studio 2026 MSVC v145 x64, C++20 및 dependency versions
|
||||||
- Debug/Release configure, build, zero-warning, nonzero CTest count
|
- Debug/Release configure, build, zero-warning, nonzero CTest count
|
||||||
- flat 및 단일 무변환 Instance example
|
- flat 및 단일 무변환 Instance example
|
||||||
- HDF5 schema inspection
|
- HDF5 schema inspection
|
||||||
|
|||||||
@@ -27,4 +27,4 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"created_at": "2026-07-29T23:58:15+0900"
|
"created_at": "2026-07-29T23:58:15+0900"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,8 @@
|
|||||||
|
|
||||||
## 작업
|
## 작업
|
||||||
|
|
||||||
C++20/MSVC x64 프로젝트의 최소 실행 가능한 build/test 뼈대를 만든다.
|
C++20/Visual Studio 2026 MSVC v145 x64 프로젝트의 최소 실행 가능한 build/test
|
||||||
|
뼈대를 만든다.
|
||||||
|
|
||||||
- `CMakeLists.txt`, `CMakePresets.json`, `cmake/FesaDependencies.cmake`,
|
- `CMakeLists.txt`, `CMakePresets.json`, `cmake/FesaDependencies.cmake`,
|
||||||
`.harness/config.json`, `tests/CMakeLists.txt`를 만든다.
|
`.harness/config.json`, `tests/CMakeLists.txt`를 만든다.
|
||||||
@@ -34,8 +35,10 @@ namespace fesa {
|
|||||||
- CLI는 이 step에서 `fesa --version`만 처리한다.
|
- CLI는 이 step에서 `fesa --version`만 처리한다.
|
||||||
- 먼저 `VersionCommand` CTest를 등록해 실패를 확인한 뒤 최소 구현한다.
|
- 먼저 `VersionCommand` CTest를 등록해 실패를 확인한 뒤 최소 구현한다.
|
||||||
- `windows-debug`, `windows-release` configure/build/test preset을 정의한다.
|
- `windows-debug`, `windows-release` configure/build/test preset을 정의한다.
|
||||||
|
- configure preset은 `Visual Studio 18 2026` 생성기와 `v145` toolset, x64
|
||||||
|
architecture를 명시한다.
|
||||||
- build 산출물은 `out/build/<preset>` 아래에만 둔다.
|
- build 산출물은 `out/build/<preset>` 아래에만 둔다.
|
||||||
- MSVC가 아니거나 x64가 아니면 configure 단계에서 명확히 실패시킨다.
|
- MSVC v145가 아니거나 x64가 아니면 configure 단계에서 명확히 실패시킨다.
|
||||||
|
|
||||||
## Acceptance Criteria
|
## Acceptance Criteria
|
||||||
|
|
||||||
@@ -54,7 +57,7 @@ CTest는 0개가 아니어야 한다.
|
|||||||
|
|
||||||
1. 테스트가 구현 전 실패하는 것을 확인한다.
|
1. 테스트가 구현 전 실패하는 것을 확인한다.
|
||||||
2. Acceptance Criteria 명령을 새로 실행한다.
|
2. Acceptance Criteria 명령을 새로 실행한다.
|
||||||
3. MSVC/C++20/x64와 산출물 경로를 확인한다.
|
3. Visual Studio 2026/MSVC v145/C++20/x64와 산출물 경로를 확인한다.
|
||||||
4. 성공 시 index의 step을 `completed`로 바꾸고 생성 파일을 summary에 기록한다.
|
4. 성공 시 index의 step을 `completed`로 바꾸고 생성 파일을 summary에 기록한다.
|
||||||
5. 도구가 없으면 자동 설치하지 말고 `blocked`와 정확한 누락 항목을 기록한다.
|
5. 도구가 없으면 자동 설치하지 말고 `blocked`와 정확한 누락 항목을 기록한다.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user