1# 2# Copyright (C) 2020 Huawei Technologies Co, Ltd. 3# 4 5cmake_minimum_required(VERSION 3.18) 6 7project(PluginPNG) 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 14list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") 15 16find_package(AGPBaseAPI REQUIRED) 17find_package(AGPEngineAPI REQUIRED) 18 19#This sets the CORE_ROOT_DIRECTORY (location of source/sdk) IF not defined before. 20#(if not defined we expect that the LumeEngine folder contains the source/binary/whatever of engine) 21set(CORE_ROOT_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/LumeEngine" CACHE PATH "Path engine sdk root dir") 22if (EXISTS "${CORE_ROOT_DIRECTORY}/cmake/cmake_tools.cmake") 23 #if using binary release, cmake_tools.cmake should define the targets also.. (not done yet) 24 include(${CORE_ROOT_DIRECTORY}/cmake/cmake_tools.cmake) 25else() 26 message(FATAL_ERROR "Engine core root directory not found") 27endif() 28 29option(CORE_PNG_BUILD_ENGINE "Build AGPEngine from CORE_ROOT_DIRECTORY. " ON) 30 31if (EXISTS "${CORE_ROOT_DIRECTORY}/CMakeLists.txt") 32 message("Found engine source in ${CORE_ROOT_DIRECTORY}") 33 if (NOT TARGET AGPEngine::AGPEngineAPI) 34 if (CORE_PNG_BUILD_ENGINE) 35 message("AGPEngine::AGPEngineAPI target does not exist yet, so add engine from the submodule") 36 add_subdirectory("${CORE_ROOT_DIRECTORY}/" LumeEngine) 37 endif() 38 endif() 39endif() 40 41add_subdirectory(3rdparty) 42 43set(loader 44 src/png/image_loader_png.cpp 45 src/png/image_loader_png.h 46) 47 48source_group(TREE ${CMAKE_CURRENT_LIST_DIR} FILES ${loader} src/component_dll.cpp) 49 50# 51# Collect version information from git. 52# 53add_custom_command( 54 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_version.cpp 55 ${CMAKE_CURRENT_BINARY_DIR}/version.cpp 56 COMMAND ${CMAKE_COMMAND} -P 57 ${CMAKE_CURRENT_SOURCE_DIR}/version.cmake 58) 59 60# 61# Plugin API 62# 63add_library(PluginPNGAPI INTERFACE) 64add_library(PluginPNG::PluginPNGAPI ALIAS PluginPNGAPI) 65 66set (PluginPNGAPI_HeaderPath 67 $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/api>$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}/api> 68) 69 70set(png_api 71 png/implementation_uids.h 72) 73 74set_list_prefix(Api_Sources_Generator png_api "${PluginPNGAPI_HeaderPath}/") 75target_sources(PluginPNGAPI INTERFACE ${Api_Sources_Generator}) 76 77set_list_prefix(Api_Sources_Build png_api "${CMAKE_CURRENT_LIST_DIR}/api/") 78source_group(TREE ${CMAKE_CURRENT_LIST_DIR}/api 79 PREFIX api 80 FILES ${Api_Sources_Build} 81) 82 83target_include_directories(PluginPNGAPI SYSTEM INTERFACE ${PluginPNGAPI_HeaderPath}) 84target_link_libraries(PluginPNGAPI INTERFACE 85 AGPBase::AGPBaseAPI 86 AGPEngine::AGPEngineAPI 87) 88 89install(TARGETS PluginPNGAPI 90 EXPORT PluginPNGAPITargets 91 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/$<CONFIG> 92 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/$<CONFIG> 93 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}/$<CONFIG> 94 INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} 95) 96 97include(CMakePackageConfigHelpers) 98configure_package_config_file( 99 "${PROJECT_SOURCE_DIR}/cmake/PluginPNGAPIConfig.cmake.in" 100 "${PROJECT_BINARY_DIR}/cmake/PluginPNGAPIConfig.cmake" 101 INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PluginPNGAPI 102) 103 104install(EXPORT PluginPNGAPITargets 105 FILE PluginPNGAPITargets.cmake 106 NAMESPACE PluginPNG:: 107 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PluginPNGAPI 108) 109 110install(FILES "${PROJECT_BINARY_DIR}/cmake/PluginPNGAPIConfig.cmake" 111 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PluginPNGAPI 112) 113 114install(DIRECTORY api/ 115 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/api 116) 117 118export(EXPORT PluginPNGAPITargets 119 FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/PluginPNGAPITargets.cmake" 120 NAMESPACE PluginPNG:: 121) 122 123# 124# Plugin library. 125# 126add_library(PluginPNG SHARED 127 src/component_dll.cpp 128 ${loader} 129 ${CMAKE_CURRENT_BINARY_DIR}/version.cpp 130) 131add_library(PluginPNG::PluginPNG ALIAS PluginPNG) 132 133target_include_directories(PluginPNG PRIVATE src) 134target_compile_definitions(PluginPNG PRIVATE CORE_PLUGIN=1) 135target_link_libraries(PluginPNG PRIVATE 136 AGPBase::AGPBaseAPI 137 AGPEngine::AGPEngineAPI 138 PluginPNG::PluginPNGAPI 139 png_static 140) 141 142set_target_properties(PluginPNG PROPERTIES 143 CXX_VISIBILITY_PRESET hidden 144 VISIBILITY_INLINES_HIDDEN 1) 145 146set_target_properties(PluginPNG PROPERTIES FOLDER SamplePlugins) 147 148append_link_flags(PluginPNG "${BASE_SO_LINK_FLAGS}") 149 150if (ANDROID) 151 append_link_flags(PluginPNG "-Wl,--exclude-libs,ALL") 152 153 # Note: Stripping the android release native lib by default also in RelWithDebInfo. 154 # (Android Gradle plugin uses RelWithDebInfo for the release build and the strips later 155 # when packaging the apk). This was requested by the HQ to produce stripped .so by 156 # default in the relase aar. This needs to be removed if debugging the release build is 157 # necessary (or for getting symbol names from crash dumps). 158 target_link_options(PluginPNG PRIVATE "$<$<CONFIG:RelWithDebInfo>:-s>") 159endif() 160 161setup_warnings(PluginPNG) 162 163disable_rtti(PluginPNG) 164 165include(CMakePackageConfigHelpers) 166 167configure_package_config_file( 168 "${PROJECT_SOURCE_DIR}/cmake/PluginPNGConfig.cmake.in" 169 "${PROJECT_BINARY_DIR}/cmake/PluginPNGConfig.cmake" 170 INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PluginPNG 171) 172 173install(TARGETS PluginPNG 174 EXPORT PluginPNGTargets 175 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}/$<CONFIG> 176) 177 178install(EXPORT PluginPNGTargets 179 FILE PluginPNGTargets.cmake 180 NAMESPACE PluginPNG:: 181 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PluginPNG 182) 183 184install(FILES "${PROJECT_BINARY_DIR}/cmake/PluginPNGConfig.cmake" 185 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PluginPNG 186) 187 188export(EXPORT PluginPNGTargets 189 FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/PluginPNGTargets.cmake" 190 NAMESPACE PluginPNG:: 191) 192