• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#
2# Copyright (c) Huawei Technologies Co., Ltd. 2019-2020. All rights reserved.
3# Description: This script contains builds shared libraries for the engine
4# Author: Jani Kattelus
5# Create: 2020-01-28
6#
7# NOTE: this will not currently work standalone, since it fetches the library names from targets. could be fixed easily if needed.
8# also the names and dll options are kind of arbitrary at the moment.
9# also the resulting targets from here are referenced by the sample apps also.
10cmake_minimum_required(VERSION 3.18)
11project(AGPDLL)
12
13#this include file should actually come from engine. (usually one directory up from current dir)
14set(CORE_ROOT_DIRECTORY ".." CACHE PATH "Path engine sdk root dir")
15if (NOT EXISTS "${CORE_ROOT_DIRECTORY}/cmake/cmake_tools.cmake")
16    message(FATAL_ERROR "Engine core root directory not found")
17endif()
18
19list(APPEND CMAKE_MODULE_PATH "${CORE_ROOT_DIRECTORY}/cmake")
20
21if (NOT TARGET AGPBase::AGPBaseAPI)
22    find_package(AGPBaseAPI REQUIRED)
23endif()
24if (NOT TARGET AGPEngine::AGPEngineAPI)
25    find_package(AGPEngineAPI REQUIRED)
26endif()
27if (NOT TARGET AGPEngine::AGPEngine)
28    find_package(AGPEngine REQUIRED)
29endif()
30
31#1. generation of public symbol lists for def / linkerscripts.
32#2. "conversion" of libs to dll/so.
33
34#construct exports*.def with dumpsyms.bat (or shell script)
35#construct agpengine.version with dumpelf.bat (or shell script)
36#or build the GenerateDefines* targets. (which use cmake) (these targets are excluded from all, since they are supposed to be built manually when needed)
37add_custom_target(GenerateAllDefines COMMAND echo "Generated all defs / linker scripts.")
38set_target_properties(GenerateAllDefines PROPERTIES FOLDER Tools)
39#NOTE: we are explicitly setting the EXCLUDE_FROM_ALL  and  EXCLUDE_FROM_DEFAULT_BUILD (vsonly) properties to all generatedefine targets
40#since we do not want it to be built automatically. (custom targets should be automatically excluded, but in this case only the master target was correctly excluded.)
41set_target_properties(GenerateAllDefines PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1)
42
43if (${CMAKE_SIZEOF_VOID_P} EQUAL "4")
44    set(CORE_BITS 32)
45elseif (${CMAKE_SIZEOF_VOID_P} EQUAL "8")
46    set(CORE_BITS 64)
47endif()
48if(WIN32)
49    set(CORE_SYM_EXT _${CORE_BITS}.def)
50elseif(UNIX)
51    set(CORE_SYM_EXT _${CORE_BITS}.ld)
52elseif(OHOS)
53    set(CORE_SYM_EXT _${CORE_BITS}.ld)
54endif()
55
56add_custom_target(GenerateDefinesEngine
57    COMMAND ${CMAKE_COMMAND}
58            -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DANDROID_TOOLCHAIN_PREFIX=${ANDROID_TOOLCHAIN_PREFIX} -DVERSION_CODE=AGPEngineDLL_1.0
59            -P ${CORE_ROOT_DIRECTORY}/cmake/define.cmake ${CMAKE_CURRENT_LIST_DIR}/src/agpengine${CORE_SYM_EXT} $<TARGET_FILE:AGPEngine::AGPEngine>)
60set_target_properties(GenerateDefinesEngine PROPERTIES FOLDER Tools)
61add_dependencies(GenerateAllDefines AGPEngine::AGPEngine GenerateDefinesEngine)
62set_target_properties(GenerateDefinesEngine PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1)
63set_source_files_properties(${CMAKE_CURRENT_LIST_DIR}/src/agpengine${CORE_SYM_EXT} PROPERTIES GENERATED true )
64
65set(dll_sources src/exports.cpp)
66
67# collect build type flags..
68unset(build_flags)
69if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
70    set(build_flags ${build_flags} "CORE_PUBLIC=__declspec(dllimport)")
71else()
72    set(build_flags ${build_flags} "CORE_PUBLIC=")
73endif()
74
75#Link core engine.dll
76
77add_library(AGPEngineDLL SHARED
78    $<$<PLATFORM_ID:Windows>:${CMAKE_CURRENT_LIST_DIR}/src/agpengine${CORE_SYM_EXT}>
79    ${dll_sources}
80)
81
82target_link_libraries(AGPEngineDLL INTERFACE AGPEngine::AGPEngineAPI
83    PRIVATE
84    $<$<PLATFORM_ID:Linux>:-Wl,${CMAKE_CURRENT_LIST_DIR}/src/agpengine${CORE_SYM_EXT}>
85    $<$<PLATFORM_ID:Android>:-Wl,${CMAKE_CURRENT_LIST_DIR}/src/agpengine${CORE_SYM_EXT}>
86    $<$<PLATFORM_ID:OHOS>:-Wl,${CMAKE_CURRENT_LIST_DIR}/src/agpengine${CORE_SYM_EXT}>
87    $<$<PLATFORM_ID:Darwin>:-Wl,-exported_symbols_list>
88    $<$<PLATFORM_ID:Darwin>:-Wl,${CMAKE_CURRENT_LIST_DIR}/src/agpengine.exports>
89    AGPEngine::AGPEngine
90)
91
92target_compile_definitions(AGPEngineDLL INTERFACE ${build_flags})
93
94add_library(AGPEngine::AGPEngineDLL ALIAS AGPEngineDLL)
95
96append_link_flags(AGPEngineDLL "${BASE_SO_LINK_FLAGS}")
97
98setup_warnings(AGPEngineDLL)
99
100# Disable RTTI
101disable_rtti(AGPEngineDLL)
102
103# Sanitizers for unit tests
104if(CORE_UNIT_TESTS_ENABLED AND CORE_UNIT_TESTS_WITH_SANITIZERS AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") AND NOT ANDROID AND NOT OHOS)
105    target_compile_options(AGPEngineDLL PRIVATE -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer -fsanitize-recover=address)
106    target_link_options(AGPEngineDLL PRIVATE -fsanitize=address -fsanitize=undefined)
107endif()
108
109set_target_properties(AGPEngineDLL PROPERTIES FOLDER DLLs)
110
111include(CMakePackageConfigHelpers)
112
113configure_package_config_file(
114    "${PROJECT_SOURCE_DIR}/../cmake/AGPEngineDLLConfig.cmake.in"
115    "${PROJECT_BINARY_DIR}/cmake/AGPEngineDLLConfig.cmake"
116    INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/AGPEngineDLL
117)
118
119install(
120    TARGETS AGPEngineDLL
121    EXPORT AGPEngineDLLTargets
122    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/$<CONFIG>
123    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/$<CONFIG>
124    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}/$<CONFIG>
125    INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
126)
127
128install(
129    EXPORT AGPEngineDLLTargets
130    FILE AGPEngineDLLTargets.cmake
131    NAMESPACE AGPEngine::
132    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/AGPEngineDLL
133)
134
135install(FILES "${PROJECT_BINARY_DIR}/cmake/AGPEngineDLLConfig.cmake"
136    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/AGPEngineDLL
137)
138
139export(EXPORT AGPEngineDLLTargets
140       FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/AGPEngineDLLTargets.cmake"
141       NAMESPACE AGPEngine::
142)
143