Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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/<layer>/include/<layer>/` and source files live under `src/<layer>/src/`.
- Preferred includes:
- `#include "application/..."`
- `#include "domain/..."`
Expand Down Expand Up @@ -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/`.
Expand Down
43 changes: 23 additions & 20 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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-)
Expand All @@ -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
Expand All @@ -81,7 +79,6 @@ if (BUILD_TESTING)

target_include_directories(safecrowd_tests
PRIVATE
${SAFECROWD_SRC_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/tests
)

Expand All @@ -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
Expand Down
2 changes: 2 additions & 0 deletions docs/GitHub Project.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`로 위치를 표현한다.
10 changes: 8 additions & 2 deletions docs/프로젝트 구조.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,14 @@ Project/
vcpkg.json
src/
engine/
include/engine/
src/
domain/
include/domain/
src/
application/
include/application/
src/
external/
docs/
```
Expand Down Expand Up @@ -174,12 +180,12 @@ Qt viewport가 엔진 렌더러와 직접 연결되어야 하면 `application ->

### 7.1. 소스 루트 원칙
- 모든 C++ 소스와 헤더는 `src/` 아래에 둔다.
- include 기준 루트도 `src/`로 통일한다.
- 각 계층은 `src/<layer>/include/<layer>/`에 헤더를, `src/<layer>/src/`에 구현 파일을 둔다.
- 따라서 include는 `#include "engine/..."`, `#include "domain/..."`, `#include "application/..."` 형태를 사용한다.

### 7.2. CMake 원칙
- `CMakeLists.txt`의 타깃 소스 경로는 항상 `src/...`를 기준으로 적는다.
- 각 타깃의 include directory 역시 `src/`를 공개 루트로 잡는다.
- 각 타깃의 include directory는 해당 계층의 `src/<layer>/include/`를 공개 루트로 잡는다.
- 계층이 늘어나도 당분간 루트 `CMakeLists.txt` 하나에서 관리하고, 타깃 수와 파일 수가 커질 때만 하위 `CMakeLists.txt`를 추가한다.

### 7.3. 외부 의존성 원칙
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading