xref: /aosp_15_r20/external/armnn/delegate/armnnDelegateJNI/CMakeLists.txt (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker#
2*89c4ff92SAndroid Build Coastguard Worker# Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker# SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker#
5*89c4ff92SAndroid Build Coastguard Worker
6*89c4ff92SAndroid Build Coastguard Workercmake_minimum_required(VERSION 3.7.0)
7*89c4ff92SAndroid Build Coastguard Worker
8*89c4ff92SAndroid Build Coastguard Workerproject("armnn_delegate_jni")
9*89c4ff92SAndroid Build Coastguard Worker
10*89c4ff92SAndroid Build Coastguard Worker# JNI is needed for jni calls
11*89c4ff92SAndroid Build Coastguard Workerfind_package(JNI)
12*89c4ff92SAndroid Build Coastguard Worker
13*89c4ff92SAndroid Build Coastguard Workerlist(APPEND jni_delegate_sources
14*89c4ff92SAndroid Build Coastguard Worker        src/armnn_delegate_jni.cpp)
15*89c4ff92SAndroid Build Coastguard Worker
16*89c4ff92SAndroid Build Coastguard Worker# the backends under src/backends extend the list of
17*89c4ff92SAndroid Build Coastguard Worker# object libs armnn to include in the build
18*89c4ff92SAndroid Build Coastguard Worker# If armnn is a static library (which it should be to make armnn_delegate_jni a stand alone library) then
19*89c4ff92SAndroid Build Coastguard Worker# the object libraries of the backends need to be linked manually
20*89c4ff92SAndroid Build Coastguard Workerinclude(${ARMNN_SOURCE_DIR}/src/backends/backends.cmake)
21*89c4ff92SAndroid Build Coastguard Workerforeach(lib ${armnnLibraries})
22*89c4ff92SAndroid Build Coastguard Worker    message(STATUS "Adding object library dependency to armnn_delegate_jni: ${lib}")
23*89c4ff92SAndroid Build Coastguard Worker    list(APPEND jni_delegate_sources $<TARGET_OBJECTS:${lib}>)
24*89c4ff92SAndroid Build Coastguard Workerendforeach()
25*89c4ff92SAndroid Build Coastguard Worker
26*89c4ff92SAndroid Build Coastguard Workerif (JNI_FOUND)
27*89c4ff92SAndroid Build Coastguard Worker    message (STATUS "JNI_INCLUDE_DIRS=${JNI_INCLUDE_DIRS}")
28*89c4ff92SAndroid Build Coastguard Worker    message (STATUS "JNI_LIBRARIES=${JNI_LIBRARIES}")
29*89c4ff92SAndroid Build Coastguard Workerelse()
30*89c4ff92SAndroid Build Coastguard Worker    message (FATAL_ERROR "JNI library could not be found")
31*89c4ff92SAndroid Build Coastguard Workerendif()
32*89c4ff92SAndroid Build Coastguard Workerinclude_directories(${JNI_INCLUDE_DIRS})
33*89c4ff92SAndroid Build Coastguard Worker
34*89c4ff92SAndroid Build Coastguard Workeradd_library(armnn_delegate_jni SHARED ${jni_delegate_sources})
35*89c4ff92SAndroid Build Coastguard Worker
36*89c4ff92SAndroid Build Coastguard Workertarget_link_libraries(armnn_delegate_jni
37*89c4ff92SAndroid Build Coastguard Worker        PRIVATE
38*89c4ff92SAndroid Build Coastguard Worker            Armnn::Armnn
39*89c4ff92SAndroid Build Coastguard Worker            ArmnnDelegate::ArmnnDelegate
40*89c4ff92SAndroid Build Coastguard Worker        )
41*89c4ff92SAndroid Build Coastguard Worker
42*89c4ff92SAndroid Build Coastguard Worker# A version script is used to hide all symbols that are not required to use the jni interface
43*89c4ff92SAndroid Build Coastguard Worker# This is mostly required to avoid symbol conflicts between libc++_shared used to compile armnn
44*89c4ff92SAndroid Build Coastguard Worker# and an eventual other version used somewhere else: https://developer.android.com/ndk/guides/cpp-support
45*89c4ff92SAndroid Build Coastguard Worker#    This also requires to tell the compiler to link to the static version of libc++_shared. This can be accomplished
46*89c4ff92SAndroid Build Coastguard Worker#    by adding -DCMAKE_ANDROID_STL_TYPE=c++_static to the cmake command when building for android
47*89c4ff92SAndroid Build Coastguard Workerset(version_script "${CMAKE_CURRENT_SOURCE_DIR}/version_script")
48*89c4ff92SAndroid Build Coastguard Worker
49*89c4ff92SAndroid Build Coastguard Worker# Generate a map file for debug mode only
50*89c4ff92SAndroid Build Coastguard Workerset_property(TARGET armnn_delegate_jni APPEND_STRING PROPERTY
51*89c4ff92SAndroid Build Coastguard Worker        LINK_FLAGS " -Wl,--version-script=${version_script},-Map=mapfile.map")
52*89c4ff92SAndroid Build Coastguard Worker
53*89c4ff92SAndroid Build Coastguard Workerset_target_properties(armnn_delegate_jni PROPERTIES LINK_DEPENDS ${version_script})
54