ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CppCon 2017 : Scott Wardle "EA's Secret Weapon: Packages and Modules 번역
    카테고리 없음 2017. 10. 12. 10:06
    728x90

    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

    댓글

Designed by Tistory.