xref: /aosp_15_r20/build/soong/cc/cmake_ext_add_aidl_library.txt (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
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