1# 2# Copyright (C) 2020 Huawei Technologies Co, Ltd. 3# 4 5cmake_minimum_required(VERSION 3.18) 6 7project(PluginJPG) 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_JPG_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_JPG_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/jpg/image_loader_jpg.cpp 45 src/jpg/image_loader_jpg.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(PluginJPGAPI INTERFACE) 64add_library(PluginJPG::PluginJPGAPI ALIAS PluginJPGAPI) 65 66set (PluginJPGAPI_HeaderPath 67 $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/api>$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}/api> 68) 69 70set(jpg_api 71 jpg/implementation_uids.h 72) 73 74set_list_prefix(Api_Sources_Generator jpg_api "${PluginJPGAPI_HeaderPath}/") 75target_sources(PluginJPGAPI INTERFACE ${Api_Sources_Generator}) 76 77set_list_prefix(Api_Sources_Build jpg_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(PluginJPGAPI SYSTEM INTERFACE ${PluginJPGAPI_HeaderPath}) 84target_link_libraries(PluginJPGAPI INTERFACE 85 AGPBase::AGPBaseAPI 86 AGPEngine::AGPEngineAPI 87) 88 89install(TARGETS PluginJPGAPI 90 EXPORT PluginJPGAPITargets 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/PluginJPGAPIConfig.cmake.in" 100 "${PROJECT_BINARY_DIR}/cmake/PluginJPGAPIConfig.cmake" 101 INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PluginJPGAPI 102) 103 104install(EXPORT PluginJPGAPITargets 105 FILE PluginJPGAPITargets.cmake 106 NAMESPACE PluginJPG:: 107 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PluginJPGAPI 108) 109 110install(FILES "${PROJECT_BINARY_DIR}/cmake/PluginJPGAPIConfig.cmake" 111 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PluginJPGAPI 112) 113 114install(DIRECTORY api/ 115 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/api 116) 117 118export(EXPORT PluginJPGAPITargets 119 FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/PluginJPGAPITargets.cmake" 120 NAMESPACE PluginJPG:: 121) 122 123# 124# Plugin library. 125# 126add_library(PluginJPG SHARED 127 src/component_dll.cpp 128 ${loader} 129 ${CMAKE_CURRENT_BINARY_DIR}/version.cpp 130) 131add_library(PluginJPG::PluginJPG ALIAS PluginJPG) 132 133target_include_directories(PluginJPG PRIVATE src) 134target_compile_definitions(PluginJPG PRIVATE CORE_PLUGIN=1) 135add_dependencies(PluginJPG libjpeg-turbo) 136 137get_target_property(JPEG_LINK_DIRS jpeg-static INTERFACE_LINK_DIRECTORIES) 138target_link_directories(PluginJPG PRIVATE ${JPEG_LINK_DIRS}) 139target_link_libraries(PluginJPG PRIVATE 140 AGPBase::AGPBaseAPI 141 AGPEngine::AGPEngineAPI 142 PluginJPG::PluginJPGAPI 143 jpeg-static 144) 145 146set_target_properties(PluginJPG PROPERTIES 147 CXX_VISIBILITY_PRESET hidden 148 VISIBILITY_INLINES_HIDDEN 1) 149 150set_target_properties(PluginJPG PROPERTIES FOLDER SamplePlugins) 151 152append_link_flags(PluginJPG "${BASE_SO_LINK_FLAGS}") 153 154if (ANDROID) 155 append_link_flags(PluginJPG "-Wl,--exclude-libs,ALL") 156 157 # Note: Stripping the android release native lib by default also in RelWithDebInfo. 158 # (Android Gradle plugin uses RelWithDebInfo for the release build and the strips later 159 # when packaging the apk). This was requested by the HQ to produce stripped .so by 160 # default in the relase aar. This needs to be removed if debugging the release build is 161 # necessary (or for getting symbol names from crash dumps). 162 target_link_options(PluginJPG PRIVATE "$<$<CONFIG:RelWithDebInfo>:-s>") 163endif() 164 165setup_warnings(PluginJPG) 166 167disable_rtti(PluginJPG) 168 169include(CMakePackageConfigHelpers) 170 171configure_package_config_file( 172 "${PROJECT_SOURCE_DIR}/cmake/PluginJPGConfig.cmake.in" 173 "${PROJECT_BINARY_DIR}/cmake/PluginJPGConfig.cmake" 174 INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PluginJPG 175) 176 177install(TARGETS PluginJPG 178 EXPORT PluginJPGTargets 179 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}/$<CONFIG> 180) 181 182install(EXPORT PluginJPGTargets 183 FILE PluginJPGTargets.cmake 184 NAMESPACE PluginJPG:: 185 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PluginJPG 186) 187 188install(FILES "${PROJECT_BINARY_DIR}/cmake/PluginJPGConfig.cmake" 189 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PluginJPG 190) 191 192export(EXPORT PluginJPGTargets 193 FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/PluginJPGTargets.cmake" 194 NAMESPACE PluginJPG:: 195) 196