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