| function(add_aidl_library NAME LANG AIDLROOT SOURCES AIDLFLAGS) |
| if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.20") |
| cmake_policy(SET CMP0116 NEW) |
| endif() |
| |
| # Strip trailing slash |
| get_filename_component(AIDLROOT_TRAILING "${AIDLROOT}" NAME) |
| if ("${AIDLROOT_TRAILING}" STREQUAL "") |
| get_filename_component(AIDLROOT "${AIDLROOT}foo" DIRECTORY) |
| endif() |
| |
| set(GEN_DIR "${CMAKE_CURRENT_BINARY_DIR}/.intermediates/${NAME}-source") |
| set(GEN_SOURCES) |
| foreach (SOURCE ${SOURCES}) |
| set(SOURCE_FULL ${AIDLROOT}/${SOURCE}) |
| get_filename_component(SOURCE_WLE ${SOURCE} NAME_WLE) |
| get_filename_component(SOURCE_SUBDIR ${SOURCE} DIRECTORY) |
| set(GEN_SOURCE "${GEN_DIR}/${SOURCE_SUBDIR}/${SOURCE_WLE}.cpp") |
| |
| file(READ "${SOURCE}" SOURCE_CONTENTS) |
| string(FIND "${SOURCE_CONTENTS}" "@VintfStability" VINTF_MATCH) |
| set(STABILITY_FLAG) |
| if (${VINTF_MATCH} GREATER_EQUAL 0) |
| set(STABILITY_FLAG --stability vintf) |
| endif() |
| |
| set(DEPFILE_ARG) |
| if (NOT ${CMAKE_GENERATOR} MATCHES "Unix Makefiles") |
| set(DEPFILE_ARG DEPFILE "${GEN_SOURCE}.d") |
| endif() |
| |
| add_custom_command( |
| OUTPUT "${GEN_SOURCE}" |
| MAIN_DEPENDENCY "${SOURCE_FULL}" |
| ${DEPFILE_ARG} |
| COMMAND "${AIDL_BIN}" |
| ARGS |
| --lang=${LANG} |
| --include="${AIDLROOT}" |
| --dep="${GEN_SOURCE}.d" |
| --out="${GEN_DIR}" |
| --header_out="${GEN_DIR}/include" |
| --ninja |
| --structured |
| --min_sdk_version=current |
| ${STABILITY_FLAG} |
| ${AIDLFLAGS} |
| "${SOURCE_FULL}" |
| ) |
| list(APPEND GEN_SOURCES "${GEN_SOURCE}") |
| endforeach() |
| |
| add_library(${NAME} ${GEN_SOURCES}) |
| |
| target_include_directories(${NAME} |
| PUBLIC |
| "${GEN_DIR}/include" |
| ) |
| |
| if (${LANG} MATCHES "ndk") |
| set(BINDER_LIB_NAME "libbinder_ndk_sdk") |
| else() |
| set(BINDER_LIB_NAME "libbinder_sdk") |
| endif() |
| target_link_libraries(${NAME} |
| ${BINDER_LIB_NAME} |
| ) |
| endfunction() |