1#
2# Copyright (C) 2020 Huawei Technologies Co, Ltd.
3#
4
5cmake_minimum_required(VERSION 3.18)
6
7project(PluginDotfield)
8
9# Setup c++17 standard and no extensions.
10set(CMAKE_CXX_STANDARD 17)
11set(CMAKE_CXX_STANDARD_REQUIRED ON)
12set(CMAKE_CXX_EXTENSIONS OFF)
13
14if (NOT DEFINED RENDER_ROOT_DIRECTORY)
15    set(RENDER_ROOT_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/LumeRender" CACHE PATH "Path render sdk root dir")
16endif()
17include(${RENDER_ROOT_DIRECTORY}/cmake/cmake_tools.cmake)
18
19list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
20
21if (NOT TARGET AGPEngine::AGPEngineAPI)
22    find_package(AGPEngineAPI REQUIRED)
23endif()
24if (NOT TARGET AGPEngine::ComponentHelperSDK)
25    find_package(ComponentHelperSDK REQUIRED)
26endif()
27if (NOT TARGET AGPRender::AGPRenderAPI)
28    find_package(AGPRenderAPI REQUIRED)
29endif()
30if (NOT TARGET AGP3D::AGP3DAPI)
31    find_package(AGP3DAPI REQUIRED)
32endif()
33
34set(lib_dest "lib/$<CONFIG>")
35set(inc_dest "include")
36
37#
38# Plugin API.
39#
40add_library(PluginDotfieldAPI INTERFACE)
41add_library(PluginDotfield::PluginDotfieldAPI ALIAS PluginDotfieldAPI)
42
43set (PluginDotfieldAPI_HeaderPath
44    $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/api>$<INSTALL_INTERFACE:${inc_dest}/api>
45)
46
47set(dotfield_api
48    dotfield/implementation_uids.h
49    dotfield/ecs/systems/dotfield_system.h
50    dotfield/ecs/components/dotfield_component.h
51    dotfield/render/intf_render_data_store_default_dotfield.h
52)
53
54set_list_prefix(Api_Sources_Generator dotfield_api "${PluginDotfieldAPI_HeaderPath}/")
55target_sources(PluginDotfieldAPI INTERFACE ${Api_Sources_Generator})
56
57set_list_prefix(Api_Sources_Build dotfield_api "${CMAKE_CURRENT_LIST_DIR}/api/")
58source_group(TREE ${CMAKE_CURRENT_LIST_DIR}/api
59    PREFIX api
60    FILES ${Api_Sources_Build}
61)
62
63target_include_directories(PluginDotfieldAPI SYSTEM INTERFACE ${PluginDotfieldAPI_HeaderPath})
64
65install(DIRECTORY api/ DESTINATION ${inc_dest}/api)
66
67install(TARGETS PluginDotfieldAPI EXPORT PluginDotfieldAPIConfig
68    DESTINATION ${lib_dest}
69)
70install(EXPORT PluginDotfieldAPIConfig
71    FILE PluginDotfieldAPIConfig.cmake
72    NAMESPACE PluginDotfield::
73    DESTINATION "share/cmake"
74)
75
76# Make it possible to import from a build tree.
77export(TARGETS PluginDotfieldAPI NAMESPACE PluginDotfield:: FILE PluginDotfieldAPIConfig.cmake)
78
79
80set(managers
81    src/components/dotfield_component.cpp
82)
83
84set(systems
85    src/systems/dotfield_system.cpp
86)
87
88set(nodes
89    src/render/render_data_store_default_dotfield.h
90    src/render/render_data_store_default_dotfield.cpp
91    src/render/render_node_dotfield_render.h
92    src/render/render_node_dotfield_render.cpp
93    src/render/render_node_dotfield_simulation.h
94    src/render/render_node_dotfield_simulation.cpp
95)
96
97set(data
98    assets/app/shaders/common/dotfield_common.h
99    assets/app/shaders/common/dotfield_struct_common.h
100
101    assets/app/shaders/computeshader/dotfield_simulation.comp
102    assets/app/shaders/computeshader/dotfield_simulation.shader
103
104    assets/app/shaders/shader/default_material_dotfield.vert
105    assets/app/shaders/shader/default_material_dotfield.frag
106    assets/app/shaders/shader/default_material_dotfield.shader
107
108    assets/app/pipelinelayouts/default_material_dotfield.shaderpl
109    assets/app/pipelinelayouts/dotfield_simulation.shaderpl
110
111    assets/app/vertexinputdeclarations/default_material_dotfield.shadervid
112)
113
114source_group(TREE ${CMAKE_CURRENT_LIST_DIR} FILES ${systems} ${managers} ${nodes} src/component_dll.cpp)
115source_group(TREE ${CMAKE_CURRENT_LIST_DIR} PREFIX assets FILES ${data})
116
117#
118# Collect version information from git.
119#
120add_custom_command(
121    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_version.cpp
122           ${CMAKE_CURRENT_BINARY_DIR}/version.cpp
123    COMMAND ${CMAKE_COMMAND} -P
124            ${CMAKE_CURRENT_SOURCE_DIR}/version.cmake
125)
126
127#
128# Plugin library.
129#
130add_library(PluginDotfield SHARED
131    src/component_dll.cpp
132    ${managers}
133    ${systems}
134    ${nodes}
135    ${data}
136	${CMAKE_CURRENT_BINARY_DIR}/version.cpp
137)
138
139target_include_directories(PluginDotfield PRIVATE api src assets)
140target_compile_definitions(PluginDotfield PRIVATE CORE_PLUGIN=1)
141target_link_libraries(PluginDotfield PRIVATE
142    AGPBase::AGPBaseAPI
143    AGPEngine::AGPEngineAPI
144    AGPEngine::ComponentHelperSDK
145    AGPRender::AGPRenderAPI
146    AGP3D::AGP3DAPI
147    PluginDotfield::PluginDotfieldAPI
148)
149
150setup_warnings(PluginDotfield)
151
152append_link_flags(PluginDotfield "${BASE_SO_LINK_FLAGS}")
153
154if (ANDROID)
155    append_link_flags(PluginDotfield "-Wl,--exclude-libs,ALL")
156endif()
157
158set_target_properties(PluginDotfield PROPERTIES
159    CXX_VISIBILITY_PRESET hidden
160    VISIBILITY_INLINES_HIDDEN 1)
161
162set_target_properties(PluginDotfield PROPERTIES FOLDER SamplePlugins)
163
164# Build shaders and assets
165compile_shaders(TARGET CompileDotfieldShaders SOURCE "${CMAKE_CURRENT_LIST_DIR}/assets/app/shaders" INCLUDE AGPRender::AGPRenderAPI AGP3D::AGP3DAPI)
166
167build_rofs(CompileDotfieldAssets PluginDotfield "${CMAKE_CURRENT_LIST_DIR}/assets/app" "/" "DOTFIELD_BIN" "DOTFIELD_BIN_SIZE" "dotfieldrofs")
168set_target_properties(CompileDotfieldAssets PROPERTIES FOLDER Tools)
169
170add_dependencies(CompileDotfieldAssets CompileDotfieldShaders)
171add_dependencies(PluginDotfield CompileDotfieldAssets)
172
173
174#
175# Export cmake "config" module.
176#
177install(TARGETS PluginDotfield EXPORT PluginDotfieldConfig
178    DESTINATION ${lib_dest}
179)
180install(EXPORT PluginDotfieldConfig
181    FILE PluginDotfieldConfig.cmake
182    NAMESPACE PluginDotfield::
183    DESTINATION "share/cmake"
184)
185
186# Make it possible to import from a build tree.
187export(TARGETS PluginDotfield NAMESPACE PluginDotfield:: FILE PluginDotfieldTargets.cmake)
188
189configure_file(cmake/PluginDotfieldConfig.cmake.in PluginDotfieldConfig.cmake @ONLY)
190install(FILES
191    "${CMAKE_CURRENT_BINARY_DIR}/PluginDotfieldConfig.cmake"
192    DESTINATION "share/cmake"
193)
194