1if ("${CMAKE_HOST_SYSTEM_PROCESSOR}" MATCHES "^(arm|aarch)") 2 set(PREBUILTS_BIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/prebuilts/host/linux_musl-arm64/bin") 3else() 4 set(PREBUILTS_BIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/prebuilts/host/linux-x86/bin") 5endif() 6if (NOT AIDL_BIN) 7 find_program(AIDL_BIN aidl REQUIRED HINTS "${PREBUILTS_BIN_DIR}") 8endif() 9 10function(add_aidl_library NAME LANG AIDLROOT SOURCES AIDLFLAGS) 11 if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.20") 12 cmake_policy(SET CMP0116 NEW) 13 endif() 14 15 # Strip trailing slash 16 get_filename_component(AIDLROOT_TRAILING "${AIDLROOT}" NAME) 17 if ("${AIDLROOT_TRAILING}" STREQUAL "") 18 get_filename_component(AIDLROOT "${AIDLROOT}foo" DIRECTORY) 19 endif() 20 21 set(GEN_DIR "${CMAKE_CURRENT_BINARY_DIR}/.intermediates/${NAME}-source") 22 set(GEN_SOURCES) 23 foreach (SOURCE ${SOURCES}) 24 set(SOURCE_FULL ${AIDLROOT}/${SOURCE}) 25 get_filename_component(SOURCE_WLE ${SOURCE} NAME_WLE) 26 get_filename_component(SOURCE_SUBDIR ${SOURCE} DIRECTORY) 27 set(GEN_SOURCE "${GEN_DIR}/${SOURCE_SUBDIR}/${SOURCE_WLE}.cpp") 28 29 file(READ "${SOURCE}" SOURCE_CONTENTS) 30 string(FIND "${SOURCE_CONTENTS}" "@VintfStability" VINTF_MATCH) 31 set(STABILITY_FLAG) 32 if (${VINTF_MATCH} GREATER_EQUAL 0) 33 set(STABILITY_FLAG --stability vintf) 34 endif() 35 36 set(DEPFILE_ARG) 37 if (NOT ${CMAKE_GENERATOR} STREQUAL "Unix Makefiles") 38 set(DEPFILE_ARG DEPFILE "${GEN_SOURCE}.d") 39 endif() 40 41 add_custom_command( 42 OUTPUT "${GEN_SOURCE}" 43 MAIN_DEPENDENCY "${SOURCE_FULL}" 44 ${DEPFILE_ARG} 45 COMMAND "${AIDL_BIN}" 46 ARGS 47 --lang=${LANG} 48 --include="${AIDLROOT}" 49 --dep="${GEN_SOURCE}.d" 50 --out="${GEN_DIR}" 51 --header_out="${GEN_DIR}/include" 52 --ninja 53 --structured 54 --min_sdk_version=current 55 ${STABILITY_FLAG} 56 ${AIDLFLAGS} 57 "${SOURCE_FULL}" 58 ) 59 list(APPEND GEN_SOURCES "${GEN_SOURCE}") 60 endforeach() 61 62 add_library(${NAME} ${GEN_SOURCES}) 63 64 target_include_directories(${NAME} 65 PUBLIC 66 "${GEN_DIR}/include" 67 ) 68 69 if (${LANG} STREQUAL "ndk") 70 set(BINDER_LIB_NAME "libbinder_ndk_sdk") 71 else() 72 set(BINDER_LIB_NAME "libbinder_sdk") 73 endif() 74 target_link_libraries(${NAME} 75 ${BINDER_LIB_NAME} 76 ) 77endfunction() 78