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