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