diff --git a/AGENTS.md b/AGENTS.md index 806c5d7..3a9efd8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -15,6 +15,7 @@ - `src/application` - `src/domain` - `src/engine` +- Each layer may further split into `include/` and `src/` under its own root. - When touching build files, confirm that referenced source files are actually tracked in Git. ## Build @@ -28,7 +29,7 @@ ## Source Layout - All C++ source files live under `src/`. -- Use `src/` as the include root. +- Split each layer so headers live under `src//include//` and source files live under `src//src/`. - Preferred includes: - `#include "application/..."` - `#include "domain/..."` @@ -81,6 +82,7 @@ - When changing contribution workflow files, keep `CONTRIBUTING.md` and `.github/` files aligned. ## Docs +- After any changes to the project, ensure the documents remain consistent. - Architecture notes: `docs/프로젝트 구조.md` - Project workflow notes: `docs/GitHub Project.md` - Requirements and overview docs are under `docs/`. diff --git a/CMakeLists.txt b/CMakeLists.txt index 6098b27..9d56db7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,8 +22,6 @@ if (SAFECROWD_BUILD_APP) qt_standard_project_setup() endif() -set(SAFECROWD_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src") - function(configure_project_target target_name) if (MSVC) target_compile_options(${target_name} PRIVATE /W4 /permissive-) @@ -35,32 +33,32 @@ function(configure_project_target target_name) endfunction() add_library(ecs_engine STATIC - src/engine/EngineConfig.h - src/engine/EngineRuntime.cpp - src/engine/EngineRuntime.h - src/engine/EngineState.h - src/engine/EngineStats.h - src/engine/EngineStepContext.h - src/engine/EngineSystem.h - src/engine/FrameClock.cpp - src/engine/FrameClock.h + src/engine/include/engine/EngineConfig.h + src/engine/include/engine/EngineRuntime.h + src/engine/include/engine/EngineState.h + src/engine/include/engine/EngineStats.h + src/engine/include/engine/EngineStepContext.h + src/engine/include/engine/EngineSystem.h + src/engine/include/engine/FrameClock.h + src/engine/src/EngineRuntime.cpp + src/engine/src/FrameClock.cpp ) target_include_directories(ecs_engine PUBLIC - ${SAFECROWD_SRC_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/src/engine/include ) configure_project_target(ecs_engine) add_library(safecrowd_domain STATIC - src/domain/SafeCrowdDomain.cpp - src/domain/SafeCrowdDomain.h + src/domain/include/domain/SafeCrowdDomain.h + src/domain/src/SafeCrowdDomain.cpp ) target_include_directories(safecrowd_domain PUBLIC - ${SAFECROWD_SRC_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/src/domain/include ) target_link_libraries(safecrowd_domain @@ -81,7 +79,6 @@ if (BUILD_TESTING) target_include_directories(safecrowd_tests PRIVATE - ${SAFECROWD_SRC_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/tests ) @@ -97,14 +94,20 @@ endif() if (SAFECROWD_BUILD_APP) add_executable(safecrowd_app - src/application/main.cpp - src/application/MainWindow.cpp - src/application/MainWindow.h + src/application/include/application/MainWindow.h + src/application/src/main.cpp + src/application/src/MainWindow.cpp ) target_include_directories(safecrowd_app PRIVATE - ${SAFECROWD_SRC_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/src/application/include + ) + + set_target_properties(safecrowd_app PROPERTIES + AUTOMOC OFF + AUTOUIC OFF + AUTORCC OFF ) target_link_libraries(safecrowd_app diff --git a/docs/GitHub Project.md b/docs/GitHub Project.md index 60928bd..79a6b69 100644 --- a/docs/GitHub Project.md +++ b/docs/GitHub Project.md @@ -60,5 +60,7 @@ - `Docs`, `Chore`, `Analysis`는 `Lightweight Task` form으로 가볍게 등록한다. - `Engine`, `Domain`, `Application`, `Build`는 `Implementation Task` form으로 범위와 검증 계획까지 남긴다. - 세부 작업명, 부모-자식 관계, dependency는 GitHub Project와 issue 자체를 기준으로 관리한다. +- `blocked by`는 실제로 선행 해결이 필요한 hard dependency에만 건다. 단순한 권장 순서나 같은 Epic 안의 묶음 관계 때문에 불필요하게 직렬화하지 않는다. +- 하나의 Task가 서로 다른 관심사를 함께 묶어 병렬 진행을 막으면, 별도 Task로 분리해서 dependency를 다시 연결한다. - 문서 또는 기여 정책만 다루는 PR은 별도 issue 없이 진행할 수 있다. - Task의 순서는 제목 접두사 뒤 숫자로 관리하지 않는다. 중간 작업이 생기면 새 issue를 추가하고 `Sprint`, `Parent issue`, `blocked by`로 위치를 표현한다. diff --git "a/docs/\355\224\204\353\241\234\354\240\235\355\212\270 \352\265\254\354\241\260.md" "b/docs/\355\224\204\353\241\234\354\240\235\355\212\270 \352\265\254\354\241\260.md" index 8d26d07..5071cd2 100644 --- "a/docs/\355\224\204\353\241\234\354\240\235\355\212\270 \352\265\254\354\241\260.md" +++ "b/docs/\355\224\204\353\241\234\354\240\235\355\212\270 \352\265\254\354\241\260.md" @@ -44,8 +44,14 @@ Project/ vcpkg.json src/ engine/ + include/engine/ + src/ domain/ + include/domain/ + src/ application/ + include/application/ + src/ external/ docs/ ``` @@ -174,12 +180,12 @@ Qt viewport가 엔진 렌더러와 직접 연결되어야 하면 `application -> ### 7.1. 소스 루트 원칙 - 모든 C++ 소스와 헤더는 `src/` 아래에 둔다. -- include 기준 루트도 `src/`로 통일한다. +- 각 계층은 `src//include//`에 헤더를, `src//src/`에 구현 파일을 둔다. - 따라서 include는 `#include "engine/..."`, `#include "domain/..."`, `#include "application/..."` 형태를 사용한다. ### 7.2. CMake 원칙 - `CMakeLists.txt`의 타깃 소스 경로는 항상 `src/...`를 기준으로 적는다. -- 각 타깃의 include directory 역시 `src/`를 공개 루트로 잡는다. +- 각 타깃의 include directory는 해당 계층의 `src//include/`를 공개 루트로 잡는다. - 계층이 늘어나도 당분간 루트 `CMakeLists.txt` 하나에서 관리하고, 타깃 수와 파일 수가 커질 때만 하위 `CMakeLists.txt`를 추가한다. ### 7.3. 외부 의존성 원칙 diff --git a/src/application/MainWindow.h b/src/application/include/application/MainWindow.h similarity index 100% rename from src/application/MainWindow.h rename to src/application/include/application/MainWindow.h diff --git a/src/application/MainWindow.cpp b/src/application/src/MainWindow.cpp similarity index 100% rename from src/application/MainWindow.cpp rename to src/application/src/MainWindow.cpp diff --git a/src/application/main.cpp b/src/application/src/main.cpp similarity index 100% rename from src/application/main.cpp rename to src/application/src/main.cpp diff --git a/src/domain/SafeCrowdDomain.h b/src/domain/include/domain/SafeCrowdDomain.h similarity index 100% rename from src/domain/SafeCrowdDomain.h rename to src/domain/include/domain/SafeCrowdDomain.h diff --git a/src/domain/SafeCrowdDomain.cpp b/src/domain/src/SafeCrowdDomain.cpp similarity index 100% rename from src/domain/SafeCrowdDomain.cpp rename to src/domain/src/SafeCrowdDomain.cpp diff --git a/src/engine/EngineConfig.h b/src/engine/include/engine/EngineConfig.h similarity index 100% rename from src/engine/EngineConfig.h rename to src/engine/include/engine/EngineConfig.h diff --git a/src/engine/EngineRuntime.h b/src/engine/include/engine/EngineRuntime.h similarity index 100% rename from src/engine/EngineRuntime.h rename to src/engine/include/engine/EngineRuntime.h diff --git a/src/engine/EngineState.h b/src/engine/include/engine/EngineState.h similarity index 100% rename from src/engine/EngineState.h rename to src/engine/include/engine/EngineState.h diff --git a/src/engine/EngineStats.h b/src/engine/include/engine/EngineStats.h similarity index 100% rename from src/engine/EngineStats.h rename to src/engine/include/engine/EngineStats.h diff --git a/src/engine/EngineStepContext.h b/src/engine/include/engine/EngineStepContext.h similarity index 100% rename from src/engine/EngineStepContext.h rename to src/engine/include/engine/EngineStepContext.h diff --git a/src/engine/EngineSystem.h b/src/engine/include/engine/EngineSystem.h similarity index 100% rename from src/engine/EngineSystem.h rename to src/engine/include/engine/EngineSystem.h diff --git a/src/engine/FrameClock.h b/src/engine/include/engine/FrameClock.h similarity index 100% rename from src/engine/FrameClock.h rename to src/engine/include/engine/FrameClock.h diff --git a/src/engine/EngineRuntime.cpp b/src/engine/src/EngineRuntime.cpp similarity index 100% rename from src/engine/EngineRuntime.cpp rename to src/engine/src/EngineRuntime.cpp diff --git a/src/engine/FrameClock.cpp b/src/engine/src/FrameClock.cpp similarity index 100% rename from src/engine/FrameClock.cpp rename to src/engine/src/FrameClock.cpp