KK PROJEKT RED 勉強ブログ

ゲーム好き技術系大学生のメモのようなもの

AtomicGameEngine - CMake(3)

前回は、ThirdParty製のライブラリ調べた。

とりあえず、add_subdirectory()の順番に見ていく。

/Source/Atomic/CMakeLists.txt
file (GLOB CONTAINER_SOURCE Container/*.cpp Container/*.h)
file (GLOB CORE_SOURCE Core/*.cpp Core/*.h)
file (GLOB MATH_SOURCE Math/*.cpp Math/*.h)
file (GLOB IO_SOURCE IO/*.cpp IO/*.h)
file (GLOB ENGINE_SOURCE Engine/*.cpp Engine/*.h)
file (GLOB INPUT_SOURCE Input/*.cpp Input/*.h)
file (GLOB RESOURCE_SOURCE Resource/*.cpp Resource/*.h)
file (GLOB AUDIO_SOURCE Audio/*.cpp Audio/*.h)
file (GLOB NETWORK_SOURCE Network/*.cpp Network/*.h)
file (GLOB WEB_SOURCE Web/*.cpp Web/*.h)
file (GLOB SCRIPT_SOURCE Script/*.cpp Script/*.h)
file (GLOB METRICS_SOURCE Metrics/*.cpp Metrics/*.h)
if (NOT WEB AND NOT IOS AND NOT ANDROID)
    file (GLOB IPC_SOURCE IPC/*.cpp IPC/*.h)
endif()
file (GLOB ATOMIC2D_SOURCE Atomic2D/*.cpp Atomic2D/*.h)
file (GLOB SCENE_SOURCE Scene/*.cpp Scene/*.h)
file (GLOB UI_SOURCE UI/*.cpp UI/*.h)
file (GLOB SYSTEM_UI_SOURCE UI/SystemUI/*.cpp UI/SystemUI/*.h)
file (GLOB PHYSICS_SOURCE Physics/*.cpp Physics/*.h)
file (GLOB NAVIGATION_SOURCE Navigation/*.cpp Navigation/*.h)
file (GLOB ENVIRONMENT_SOURCE Environment/*.cpp Environment/*.h)
file (GLOB GRAPHICS_SOURCE Graphics/*.cpp Graphics/*.h Graphics/Text3D/*.cpp Graphics/Text3D/*.h)

if (ATOMIC_IK)
    file (GLOB IK_SOURCE IK/*.cpp IK/*.h)
endif ()

if (ATOMIC_DATABASE_SQLITE)
    file (GLOB DATABASE_SOURCE Database/*.cpp Database/*.h Database/SQLite/*.cpp Database/SQLite/*.h)
elseif (ATOMIC_DATABASE_ODBC)
    file (GLOB DATABASE_SOURCE Database/*.cpp Database/*.h Database/ODBC/*.cpp Database/ODBC/*.h)
endif ()

if (WIN32)
    if (ATOMIC_D3D9) # DirectX 9
        file (GLOB GRAPHICS_IMPL_SOURCE Graphics/Direct3D9/*.cpp Graphics/Direct3D9/*.h)
    elseif (ATOMIC_OPENGL) # OpenGL
        file (GLOB GRAPHICS_IMPL_SOURCE Graphics/OpenGL/*.cpp Graphics/OpenGL/*.h)
    elseif(ATOMIC_D3D11) # DirectX 11
        file (GLOB GRAPHICS_IMPL_SOURCE Graphics/Direct3D11/*.cpp Graphics/Direct3D11/*.h)
    endif()
else()
    file (GLOB GRAPHICS_IMPL_SOURCE Graphics/OpenGL/*.cpp Graphics/OpenGL/*.h)
endif()

if (APPLE AND NOT IOS)
    set (PLATFORM_SOURCE IO/MacFileWatcher.mm UI/UIDragDropMac.mm)
endif()

ライブラリ類のソースファイルを変数にセット

set (SOURCE_FILES ${CONTAINER_SOURCE} ${CORE_SOURCE} ${ENGINE_SOURCE} ${INPUT_SOURCE}
                  ${AUDIO_SOURCE} ${IO_SOURCE} ${MATH_SOURCE}
                  ${RESOURCE_SOURCE} ${PHYSICS_SOURCE} ${IPC_SOURCE}
                  ${GRAPHICS_SOURCE} ${GRAPHICS_IMPL_SOURCE}
                  ${ATOMIC3D_SOURCE}
                  ${ATOMIC2D_SOURCE} ${ENVIRONMENT_SOURCE}
                  ${SCENE_SOURCE} ${UI_SOURCE} ${SYSTEM_UI_SOURCE}
                  ${WEB_SOURCE} ${SCRIPT_SOURCE} ${METRICS_SOURCE}
                  ${PLATFORM_SOURCE} ${DATABASE_SOURCE} ${IK_SOURCE} ${NAVIGATION_SOURCE})

if (NOT WEB)
  set (SOURCE_FILES ${SOURCE_FILES} ${NETWORK_SOURCE})
endif()

ソースファイルを一つの変数にまとめる

GroupSources("Atomic2D")
GroupSources("Atomic3D")
GroupSources("Audio")
GroupSources("Container")
GroupSources("Core")
GroupSources("Engine")
GroupSources("Environment")
GroupSources("Graphics")
GroupSources("Input")
GroupSources("IO")
GroupSources("IPC")
GroupSources("Math")
GroupSources("Navigation")
GroupSources("Network")
GroupSources("Physics")
GroupSources("Resource")
GroupSources("Scene")
GroupSources("UI")
GroupSources("Web")
GroupSources("Script")
GroupSources("Metrics")
GroupSources("BuildInfo")
GroupSources("IK")

GroupSources()はwindowsだけの処理

# Handle Git Revision
include(GetGitRevisionDescription)
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/BuildInfo/AtomicGitSHA.cpp.in" "${CMAKE_CURRENT_SOURCE_DIR}/BuildInfo/AtomicGitSHA.cpp" @ONLY)

gitのリビジョンがどうとかこうとか

set (SOURCE_FILES ${SOURCE_FILES} BuildInfo/AtomicBuildInfo.cpp BuildInfo/AtomicBuildInfo.h BuildInfo/AtomicGitSHA.cpp BuildInfo/AtomicGitSHA.h)
if (ATOMIC_DYNAMIC_RUNTIME)
    set(ATOMIC_LIBRARY_TYPE SHARED)
else ()
    set(ATOMIC_LIBRARY_TYPE STATIC)
endif ()

これにはSTATICが入る

add_library(Atomic ${ATOMIC_LIBRARY_TYPE} ${SOURCE_FILES})

‘Atomic'ってのがプロジェクト名と同じだから一瞬どゆこと?ってなったけど、普通にライブラリ名

if (NOT ATOMIC_DYNAMIC_RUNTIME)
    target_compile_definitions (Atomic PUBLIC -DATOMIC_STATIC_DEFINE=1 -DATOMIC_API=)
else ()
    target_compile_definitions (Atomic PRIVATE -DATOMIC_EXPORTS=1)
endif ()

PUBLICとかPRIVATEは引数のスコープ

include_directories (${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(Atomic PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../)
target_link_libraries (Atomic Box2D Duktape TurboBadger FreeType JO LZ4 PugiXml STB SDL ASIO rapidjson WebSocketPP imgui)
target_compile_definitions (Atomic PUBLIC -DATOMIC_CXX11=1)

target_include_directories()はターゲットに対するinclude_directory()みたいなやつかな。 ‘Atomic'にThirPartyのBox2D Duktape TurboBadger FreeType JO LZ4 PugiXml STB SDL ASIO rapidjson WebSocketPP imguiをリンクして、ATOMIC_CXX11=1追加。

if (ATOMIC_64BIT)
    target_compile_definitions (Atomic PUBLIC -DATOMIC_64BIT=1)
endif ()
if (ANDROID)
    target_link_libraries (Atomic dl log android GLESv1_CM GLESv2)
    target_compile_definitions(Atomic PUBLIC -DATOMIC_PLATFORM_ANDROID=1 -DGLEW_NO_GLU=1)
elseif (APPLE)
    if (IOS)
        target_compile_definitions(Atomic PUBLIC -DATOMIC_PLATFORM_IOS=1 -DIOS=1)
    else () # MacOS
        target_link_libraries (Atomic GLEW)
        target_compile_definitions(Atomic PUBLIC -DATOMIC_PLATFORM_OSX=1)
    endif ()
elseif (LINUX)
    target_link_libraries (Atomic pthread GLEW GL dl)
    target_compile_definitions(Atomic PUBLIC -DATOMIC_PLATFORM_LINUX=1)
elseif (WIN32)
    target_compile_definitions (Atomic PUBLIC -DATOMIC_PLATFORM_WINDOWS=1)
    target_link_libraries (Atomic user32 gdi32 winmm imm32 ole32 oleaut32 version uuid Ws2_32)
    if (ATOMIC_D3D9) # DirectX 9
        target_link_libraries (Atomic d3d9 d3dcompiler)
        target_compile_definitions (Atomic PUBLIC -DATOMIC_D3D9=1)
    elseif(ATOMIC_OPENGL) # OpenGL
        find_package(OpenGL REQUIRED)
        include_directories (${OpenGL_INCLUDE_DIRS})
        link_directories (${OpenGL_LIBRARY_DIRS})
        target_compile_definitions (Atomic PRIVATE ${OpenGL_DEFINITIONS})
        target_link_libraries (Atomic GLEW opengl32 glu32)
    elseif(ATOMIC_D3D11) # DirectX 11
        target_compile_definitions (Atomic PUBLIC -DATOMIC_D3D11=1)
        target_link_libraries (Atomic d3d11 d3dcompiler dxguid)
    endif()
    target_link_libraries(Atomic MojoShader user32 gdi32 winmm imm32 ole32 oleaut32 version uuid Ws2_32)

    # removes dependency on D3DCompiler dll for Atomic Direct3D9 builds which don't require it
    # (binaries that never initialize the Direct3D9 graphics subsystem)
    option (ATOMIC_D3D9SHADERCOMPILER_DISABLE "Remove D3DCompiler.dll dependency. Use for binaries that never initialize the Direct3D9 graphics subsystem." OFF)
    if (ATOMIC_D3D9SHADERCOMPILER_DISABLE)
        target_compile_definitions (Atomic PUBLIC -DATOMIC_D3D9SHADERCOMPILER_DISABLE=1)
    endif()
elseif (WEB)
    target_compile_definitions(Atomic PUBLIC -DATOMIC_PLATFORM_WEB=1 -DNO_POPEN=1)
endif ()

ANDROIDならdl log android GLESv1_CM GLESv2がリンク
MacOSならGLEWがリンク
Linuxならpthread GLEW GL dlがリンク
WIN32ならuser32 gdi32 winmm imm32 ole32 oleaut32 version uuid Ws2_32 MojoShader。。。がリンク

if (ATOMIC_DESKTOP)
    target_compile_definitions (Atomic PUBLIC -DATOMIC_PLATFORM_DESKTOP=1)
    target_link_libraries (Atomic libsquish)
    if (NOT LINUX)
        target_link_libraries (Atomic LibCpuId)
    endif()
    option (ATOMIC_FILEWATCHER "Enable file watcher" ON)
    if (ATOMIC_FILEWATCHER)
        target_compile_definitions(Atomic PUBLIC -DATOMIC_FILEWATCHER=1)
    endif ()
endif ()

libsquishとLibCpuldがリンク

if (NOT WEB)
    target_compile_definitions (Atomic PUBLIC -DATOMIC_THREADING=1 -DATOMIC_NETWORK=1 -DATOMIC_WEB=1)
    target_link_libraries (Atomic libcurl Civetweb kNet)
endif()

if (ATOMIC_PROFILING)
    target_compile_definitions (Atomic PUBLIC -DATOMIC_PROFILING=1)
    target_link_libraries (Atomic easy_profiler)
endif ()

option (ATOMIC_LOGGING "Enable logging" ON)
if (ATOMIC_LOGGING)
    target_compile_definitions (Atomic PUBLIC -DATOMIC_LOGGING=1)
endif ()

libcurl Civetweb kNet easy_profiler がリンク

option (ATOMIC_2D_ONLY "Build only with 2D support" OFF)
if (ATOMIC_2D_ONLY)
    target_compile_definitions (Atomic PUBLIC -DATOMIC_ATOMIC2D=1)
else ()
    target_compile_definitions (Atomic PUBLIC -DATOMIC_3D)

    option (ATOMIC_ATOMIC2D "Enable 2D subsystem" ON)
    if (ATOMIC_ATOMIC2D)
        target_compile_definitions (Atomic PUBLIC -DATOMIC_ATOMIC2D=1)
    endif ()

    option (ATOMIC_PHYSICS "Enable physics subsystem" ON)
    if (ATOMIC_PHYSICS)
        target_compile_definitions (Atomic PUBLIC -DATOMIC_PHYSICS=1)
        target_link_libraries (Atomic Bullet StanHull)
    endif ()

    option (ATOMIC_NAVIGATION "Enable navigation subsystem" ON)
    if (ATOMIC_NAVIGATION)
        target_compile_definitions (Atomic PUBLIC -DATOMIC_NAVIGATION=1)
        target_link_libraries (Atomic Recast Detour DetourCrowd DetourTileCache)
    endif ()
endif ()

Bullet StanHull Recast Detour DetourCrowd DetourTileCache がリンク

if (NOT APPLE OR IOS OR WEB)
    target_compile_definitions (Atomic PUBLIC -DATOMIC_TBUI=1)
endif ()

if (ATOMIC_DATABASE_SQLITE)
    target_link_libraries(Atomic sqlite)
    target_compile_definitions(Atomic PUBLIC -DATOMIC_DATABASE=1 -DATOMIC_DATABASE_SQLITE=1)
elseif (ATOMIC_DATABASE_ODBC)
    target_link_libraries(Atomic nanodbc)
    target_compile_definitions(Atomic PUBLIC -DATOMIC_DATABASE=1 -DATOMIC_DATABASE_ODBC=1)
endif ()

if (ATOMIC_IK)
    target_link_libraries(Atomic ik)
    target_compile_definitions(Atomic PUBLIC -DATOMIC_IK=1)
endif ()

target_include_directories (Atomic PUBLIC
    ${ATOMIC_SOURCE_DIR}/Source
    ${ATOMIC_SOURCE_DIR}/Source/ThirdParty
)
include(AtomicDoc)

は特に処理なし

if ($ENV{ATOMIC_BUILD_DIST})
    target_compile_definitions(Atomic PUBLIC -DATOMIC_BUILD_DIST=1)
endif ()

if (MSVC)
    target_compile_options(Atomic PUBLIC $<$<CONFIG:Debug>:${ATOMIC_MSVC_RUNTIME}d> $<$<NOT:$<CONFIG:Debug>>:${ATOMIC_MSVC_RUNTIME}>)
endif ()

if (UNIX OR MINGW)
    target_compile_options(Atomic PUBLIC -std=gnu++11)
endif ()

最後のif文だけはMacだと実行される。 Macでadd_subdirectory()された、
Box2D Duktape FreeType JO LZ4 PugiXml STB TurboBadger zlib Bullet StanHull SDL Recast Detour DetourCrowd DetourTileCache Civetweb kNet openssl libcurl Assimp LibCpuld Poco nativefiledialog libsquish GLEW ASIO rapidjson WebSocketPP imgui easy_profiler

うちで、 Atomicにリンクされてないのが、zlib, openssl, Assimp, Poco, nativefiledialog

/Source/AtomicPlayer/CMakeLists.txt
file (GLOB SOURCE_FILES *.cpp *.h)

add_library(AtomicPlayerLib ${SOURCE_FILES})
target_link_libraries(AtomicPlayerLib Atomic)
add_subdirectory(Application)

AtomicPlayerLibを用意して、Atomicをリンク。 で、add_subdirectory()

/Source/AtomicPlayer/Application/CMakeLists.txt
# Define source files
file (GLOB SOURCE_FILES *.cpp *.h )

# set (SOURCE_FILES ${SOURCE_FILES}) ${CSHARP_BINDINGS_SOURCE} ${CSHARPATOMICPLAYER_BINDINGS_SOURCE}  ${CSHARPATOMICNET_BINDINGS_SOURCE})

if (WIN32)
    set (EXE_TYPE WIN32)
    set (SOURCE_FILES ${SOURCE_FILES} ${ATOMIC_SOURCE_DIR}/Build/CMake/Modules/Atomic.rc)
elseif(APPLE)
    #ICNS
    set(MACOSX_BUNDLE_ICON_FILE Atomic.icns)
    if (NOT IOS)
        set(ATOMIC_PLAYER_ICON ${ATOMIC_SOURCE_DIR}/Build/CMake/Modules/Atomic.icns)
    endif()
    set_source_files_properties(${ATOMIC_PLAYER_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
    set (EXE_TYPE MACOSX_BUNDLE)
endif()

アプリケーションのアイコンとか、EXEのタイプを設定してる。

if (ANDROID)
    add_library(AtomicPlayer SHARED ${SOURCE_FILES} ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/SDL/src/main/android/SDL_android_main.c)
else()
    # iOS AtomicPlayer currently disabled
    if (NOT IOS)
        add_executable(AtomicPlayer ${EXE_TYPE} ${SOURCE_FILES} ${ATOMIC_PLAYER_ICON})
    endif()
endif()

if (NOT IOS)
    target_link_libraries(AtomicPlayer AtomicJS AtomicPlayerLib AtomicPlayerJS Atomic)
endif()

AtomicPlayerの実行可能ファイルを作り、そいつに、AtomicJS、AtomicPlayerLib、AtomicPlayerJS、Atomicをリンク

if (APPLE)

  if (NOT IOS)

    set (TARGET_PROPERTIES MACOSX_BUNDLE_INFO_PLIST MacOSXBundleInfo.plist.template)

  else()

#    set_target_properties(AtomicPlayer PROPERTIES
#      MACOSX_BUNDLE_GUI_IDENTIFIER "com.atomicgameengine.atomicplayer"
#      XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
#      XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT "dwarf-with-dsym"
#      XCODE_ATTRIBUTE_INFOPLIST_PREPROCESS YES
#      XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET 9.3
#      XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2" # iPhone/iPad
#      XCODE_ATTRIBUTE_COMBINE_HIDPI_IMAGES NO
#    )

#    set (TARGET_PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${ATOMIC_SOURCE_DIR}/Build/CMake/Modules/iOSBundleInfo.plist.template)

  endif()

endif(APPLE)


if (TARGET_PROPERTIES)
    if (NOT IOS)
        set_target_properties (AtomicPlayer PROPERTIES ${TARGET_PROPERTIES})
    endif()
endif ()

ここはなんか、Macの.app形式のアプリ作るんやったらお決まりっぽい処理。 参考

次はー、AtomicJSだな

/Source/AtomicJS/CMakeLists.txt
file (GLOB JAVASCRIPT_SOURCE Javascript/*.cpp Javascript/*.h)

GroupSources("Javascript")

if (NOT WIN32)
    # for kNet
    add_definitions (-DUNIX)
endif()

file (GLOB JAVASCRIPT_BINDINGS_SOURCE ${ATOMIC_SOURCE_DIR}/Artifacts/Build/Source/Generated/Javascript/Packages/Atomic/*.cpp)

set (SOURCE_FILES ${JAVASCRIPT_SOURCE} ${JAVASCRIPT_BINDINGS_SOURCE})

add_library(AtomicJS ${SOURCE_FILES})
target_link_libraries(AtomicJS Atomic)
if (ATOMIC_DESKTOP)
    add_dependencies(AtomicJS AtomicToolCheckScripts)
endif ()

ライブラリAtomicJSにAtomicをリンク add_dependencies()はターゲットを他のターゲットに依存させるらしいけど、いまいちわからん。

/Source/AtomicPlayerJS/CMakeLists.txt
include_directories (${ATOMIC_SOURCE_DIR}/Source/ThirdParty)
file (GLOB_RECURSE SOURCE_FILES *.cpp *.h)

file (GLOB JAVASCRIPT_BINDINGS_SOURCE ${ATOMIC_SOURCE_DIR}/Artifacts/Build/Source/Generated/Javascript/Packages/AtomicPlayer/*.cpp)

set (SOURCE_FILES ${SOURCE_FILES} ${JAVASCRIPT_BINDINGS_SOURCE} )

add_library(AtomicPlayerJS ${SOURCE_FILES})

target_link_libraries(AtomicPlayerJS AtomicPlayerLib)

if (ATOMIC_DESKTOP)
    add_dependencies(AtomicPlayerJS AtomicToolCheckScripts)
endif ()

ライブラリAtomiPlayerJSを用意して、そいつにAtomicPlayerLibをリンク
で、AtomicToolCheckScriptsに依存させる。

/Source/AtomicWebView/CMakeLists.txt
file (GLOB_RECURSE SOURCE_FILES *.cpp *.h)

file (GLOB JAVASCRIPT_BINDINGS_SOURCE ${ATOMIC_SOURCE_DIR}/Artifacts/Build/Source/Generated/Javascript/Packages/WebView/*.cpp)

if (APPLE)
    set (PLATFORM_SOURCE WebBrowserHost.mm)
endif()

set (SOURCE_FILES ${SOURCE_FILES} ${JAVASCRIPT_BINDINGS_SOURCE} ${PLATFORM_SOURCE} )

add_library(AtomicWebView ${SOURCE_FILES})
target_link_libraries(AtomicWebView Atomic)
add_dependencies(AtomicWebView AtomicToolCheckScripts)

ライブラリAtomicWebViewを用意して、Atomicをリンク
で、AtomicToolCheckScriptsに依存させる。

/Source/AtomicApp/CMakeLists.txt
file (GLOB_RECURSE SOURCE_FILES *.cpp *.h)

add_library(AtomicApp ${SOURCE_FILES})
target_link_libraries(AtomicApp Atomic)
if (ATOMIC_DESKTOP)
    add_dependencies(AtomicApp AtomicToolCheckScripts)
endif ()
GroupSources("Player")

ライブラリAtomicAppを用意して、Atomicをリンク
で、AtomicToolCheckScriptsに依存させる

/Source/AtomicNET/CMakeLists.txt
add_subdirectory(NETScript)
add_subdirectory(NETNative)
/Source/AtomicNET/NETScript/CMakeLists.txt
set (CSATOMICNETSCRIPTNATIVEDIR "${ATOMIC_SOURCE_DIR}/Artifacts/Build/Source/Generated/CSharp/Packages/AtomicNETScript/Native")
set (JSATOMICNETSCRIPTDIR "${ATOMIC_SOURCE_DIR}/Artifacts/Build/Source/Generated/Javascript/Packages/AtomicNETScript")

file ( GLOB ATOMICNETSCRIPT_BINDINGS_SOURCE ${CSATOMICNETSCRIPTNATIVEDIR}/*.cpp ${CSATOMICNETSCRIPTNATIVEDIR}/*.h
                                            ${JSATOMICNETSCRIPTDIR}/*.cpp ${JSATOMICNETSCRIPTDIR}/*.h )

file (GLOB_RECURSE SOURCE_FILES *.cpp *.h)

add_library(AtomicNETScript ${SOURCE_FILES})
target_link_libraries(AtomicNETScript Atomic)
add_library(AtomicNETScriptBindings ${ATOMICNETSCRIPT_BINDINGS_SOURCE})
target_link_libraries(AtomicNETScriptBindings Atomic)
if (ATOMIC_DESKTOP)
    add_dependencies(AtomicNETScriptBindings AtomicToolCheckScripts)
endif ()

ライブラリAtomicNETScriptを用意して、Atomicをリンク
ライブラリAtomicNETScriptBindingsを用意して、Atomicをリンク で、AtomicNETScriptBindingsをAtomicToolCheckScriptsに依存させる。

/Source/AtomicNET/NETNative/CMakeLists.txt
set (CSATOMICDIR "${ATOMIC_SOURCE_DIR}/Artifacts/Build/Source/Generated/CSharp/Packages/")

file (GLOB CSHARP_BINDINGS_SOURCE ${CSATOMICDIR}/Atomic/Native/*.cpp ${CSATOMICDIR}/Atomic/Native/*.h
                                  ${CSATOMICDIR}/AtomicNETNative/Native/*.cpp ${CSATOMICDIR}/AtomicNETNative/Native/*.h
                                  ${CSATOMICDIR}/AtomicNETScript/Native/*.cpp ${CSATOMICDIR}/AtomicNETScript/Native/*.h
                                  ${CSATOMICDIR}/AtomicApp/Native/*.cpp ${CSATOMICDIR}/AtomicApp/Native/*.h
                                  ${CSATOMICDIR}/AtomicPlayer/Native/*.cpp ${CSATOMICDIR}/AtomicPlayer/Native/*.h )

file (GLOB SOURCE_FILES *.cpp *.h)

if (NOT IOS AND NOT ANDROID AND NOT WEB)
    file (GLOB DESKTOP_SOURCE_FILES Desktop/*.cpp Desktop/*.h)
    set (SOURCE_FILES ${SOURCE_FILES} ${DESKTOP_SOURCE_FILES})
endif()

if (ANDROID)
    set (SOURCE_FILES ${SOURCE_FILES} ${ATOMIC_SOURCE_DIR}/Source/ThirdParty/SDL/src/main/android/SDL_android_main.c)
endif()

add_library(AtomicNETNative SHARED ${SOURCE_FILES} ${CSHARP_BINDINGS_SOURCE})

if (ATOMIC_DESKTOP)
    add_dependencies(AtomicNETNative AtomicToolCheckScripts)
endif ()
target_link_libraries(AtomicNETNative AtomicApp AtomicNETScriptBindings AtomicNETScript AtomicJS AtomicPlayerLib AtomicPlayerJS Atomic)
target_include_directories(AtomicNETNative PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

共有ライブラリ、AtomicNETNativeを用意し、AtomicToolCheckScriptsに依存させる。
で、AtomicApp, AtomicNETScriptBindings, AtomicNETScript, AtomicJS, AtomicPlayerLib, AtomicPlayerJS, Atomicをリンク

if (APPLE)
    if (NOT IOS)
        target_link_libraries( AtomicNETNative "-stdlib=libc++ -framework AudioToolbox -framework Carbon -framework Cocoa -framework CoreAudio -framework CoreVideo -framework ForceFeedback -framework IOKit -framework OpenGL -framework CoreServices -framework Security -framework SystemConfiguration")
    else()
        set_target_properties(AtomicNETNative PROPERTIES
            FRAMEWORK TRUE
            MACOSX_FRAMEWORK_IDENTIFIER com.atomicgameengine.atomicnetframework
            MACOSX_FRAMEWORK_INFO_PLIST ${ATOMIC_SOURCE_DIR}/Build/CMake/IOS/AtomicNET.framework.plist
            # PUBLIC_HEADER dynamicFramework.h
            XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
        )
        target_link_libraries( AtomicNETNative "-framework AudioToolbox -framework AVFoundation -framework CoreAudio -framework CoreGraphics -framework Foundation -framework OpenGLES -framework QuartzCore -framework UIKit -framework CoreMotion -framework GameController")
    endif()
endif()

AtomicNETNativeにOSXフレームワーク
AudioToolbox
AVFoundation
CoreAudio
CoreGraphics
Foundation
OpenGLES
QuartzCore
UIKit
CoreMotion
GameController
をリンク

if (WIN32)
    set (ATOMICNET_NATIVE_PLATFORM Windows)
elseif(APPLE)
    if (IOS)
        set (ATOMICNET_NATIVE_PLATFORM iOS)
    else()
        set (ATOMICNET_NATIVE_PLATFORM Mac)
    endif()
elseif(LINUX)
    set (ATOMICNET_NATIVE_PLATFORM Linux)
elseif(ANDROID)
    set (ATOMICNET_NATIVE_PLATFORM Android)
endif()

set (ATOMICNET_NATIVE_DIR "${ATOMIC_SOURCE_DIR}/Artifacts/AtomicNET/$<$<CONFIG:debug>:Debug>$<$<CONFIG:release>:Release>/Native/${ATOMICNET_NATIVE_PLATFORM}")

if (NOT IOS)
    add_custom_command( TARGET AtomicNETNative POST_BUILD
                        COMMAND "${CMAKE_COMMAND}" ARGS -E make_directory "\"${ATOMICNET_NATIVE_DIR}\""
                        COMMAND "${CMAKE_COMMAND}" ARGS -E copy_if_different \"$<TARGET_FILE:AtomicNETNative>\" "\"${ATOMICNET_NATIVE_DIR}\"" )
else()
    # See BuildIOS.js for handling of the AtomicNETNative framework, including install_name_tool modification, etc
    # Handling it here was causing issues with certain builds of XCode and where it thought the TARGET_FILE was...
endif()

if (WIN32)
    # Copy the D3D shader compiler (for pre-Windows 8)
    add_custom_command( TARGET AtomicNETNative POST_BUILD
                        COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different \"${D3DCOMPILER_47_DLL}\" \"${ATOMICNET_NATIVE_DIR}/D3DCompiler_47.dll\" )
endif(WIN32)

add_custom_command()のところはよく分からんけど、とりあえず、AtomicNETNativeがビルドされた後に、後ろのコマンドが実行されるっぽい。

次、

/Source/AtomicTool/CMakeLists.txt

次回

/Source/Tools/CMakeLists.txt

次回

/Source/ToolCore/CMakeLists.txt
add_definitions(-DCPLUSPLUS_WITHOUT_QT)

file (GLOB_RECURSE SOURCE_FILES *.cpp *.h)

if (APPLE)
    file (GLOB_RECURSE OBJC_FILES *.mm )
    set (SOURCE_FILES ${SOURCE_FILES} ${OBJC_FILES})
endif()

add_library(ToolCore ${SOURCE_FILES})

target_link_libraries(ToolCore Assimp Poco Atomic)

if (ATOMIC_XCODE)
    target_compile_definitions(ToolCore PRIVATE -DATOMIC_XCODE)
endif ()

ライブラリToolCoreを用意して、Assimp、Poco、Atomicをリンク

/Source/ToolCoreJS/CMakeLists.txt
file (GLOB_RECURSE SOURCE_FILES *.cpp *.h)

file (GLOB JAVASCRIPT_BINDINGS_SOURCE ${ATOMIC_SOURCE_DIR}/Artifacts/Build/Source/Generated/Javascript/Packages/ToolCore/*.cpp)

set (SOURCE_FILES ${SOURCE_FILES} ${JAVASCRIPT_BINDINGS_SOURCE} )

add_library(ToolCoreJS ${SOURCE_FILES})

target_link_libraries(ToolCoreJS ToolCore Assimp)

add_dependencies(ToolCoreJS AtomicToolCheckScripts)

ToolCoreJSを用意して、ToolCore、Assimpをリンク
で、AtomicToolCheckScriptsに依存させる

今回はこんなところで終了。大分雑だがとりあえず進んでる。