-
CppCon 2017 : Scott Wardle "EA's Secret Weapon: Packages and Modules 번역카테고리 없음 2017. 10. 12. 10:06728x90
System 프로그램이란?
: 벤치마킹에 의해 측정가능한것을 더 좋게 만드는 것
ex) framerate 빠르게, 로딩타임, 빌드타임, 메모리 또는 디스크 사용량을 더 적게
: 주로 다른 팀의 기술적인 이슈들을 처리, 코드를 공유하고 유지함
C++ Modules
: 느린 빌드타임을 해결
: 공유를 어렵게하는 나쁜 interface 를 해결
모두들 BuildSystem 은 싫어함 ㅋ
C++ modules != Package
Pacakage 개념 속에 modules 이 있는 것임
pacakage 는 C++ lib 또는 dll 임
EA 에서 게임 만들때
: 많은 종류의 크로스 플랫폼 컴파일이 지원되어야 함
- gcc, clang, msvc++, GreenHiless, etc ...
: 빌드 Configuration 을 위한 프레임워크
- 각 플랫폼 내의 빌드 옵션을 지정 가능
3 Stage Build
gensln : VisualStudio 를 생성
build : C++ 코드 build
cook : 데이터 build - 각 플랫폼마다 다른 data 들을 굽나보다?
여기서는 gensln 과 build 만 다룸
옛날 문제와 새로운 문제들
- 많은 양의 C++ 중복코드
- 많은 빌드 시스템
- 다른 팀에서 코드 찾기 힘듬
- 많은 pacakage 를 어떻게 유지보수 하나? (1000개가 넘는다)
어떻게 하면 "Buildsystem"이 코드 공유를 쉽게 만들수 있을까?
- 좋은 공유는 private data 가 필요? : 이게 무슨말임?
- private/public 데이터가 분리되어 있어야 하고 default directroy 가 포함되어야함
- public header들은 cpp code 와 섞이지 않는다
- Buildsystem 은 2가지 다른 영영의 private data 를 유지한다
-> global scope / local scope
=> 즉, private/public 데이터가 분리되고 공통의 default 데이터가 있어야 하고 header 는 섞이지 말아야 함
예제)
EASTL (Package 이름)
+--- 1.17.00-fifa.01 (version)
+--- include (public includes)
+--- EASTL (#include <EASTL/vector.h> 과 같이 접근)
algorithm.h
...
weak_ptr.h
+--- source (private source 나중에 lib, dll 이 됨)
alocator_eastl.cpp
string.cpp
EASTL
+--- 1.17.00-fifa.01
+---
+--- 1.18.00-fifa.01
- 같은 package 소스트리에 1가지 이상 버전이 있을 수 있음
- 근데 실제 project 에는 한번에 1개의 버전만 사용
Package 의 Local Scope data
- sln 파일 gen 을 위한 데이터들이 들어감
예제)
<headerfiles>
<includes name="include\**.h"/>
<includes name="source\**.h"/>
</headerfiles>
<sourcefiles>
<includes name="source\**.cpp"/>
</sourcefiles>
<includedirs>
${package.dir}\source
</includedirs>
<dependencies>
<auto>
EABase
EASTL
</auto>
</dependencies>
Package 의 Global Scope data
예제)
<property name="package.lzma.includedirs">
${package.lzma.dir}/installed/C
</property>
<fileset name="package.lzma.libs">
<includes name="${pakcage.lzma.builddir}/${config}/lib/{lib-prefix}lzma${lib-suffix}"/>
</fileset>
=> sln 과 vcprojx 관계 같은거임
Masterconfig (빌드시스템 이름이 Masterconfig 인가봄)
예제)
저장소 packages.ea.com
재사용가능한 unit 이름 : package
installer : gensln
package들의 집합 : Masterconfig
728x90