• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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