blob: d5c134e833d5dcb13fc12a043456b8570f6d98a5 [file] [log] [blame]
Tomasz Wasilczykcd674732024-06-25 10:30:30 -07001if ("${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
Tomasz Wasilczyk1e831bf2024-05-10 15:15:21 -070010function(add_aidl_library NAME LANG AIDLROOT SOURCES AIDLFLAGS)
Hao Chen1c8ea5b2023-10-20 23:03:45 +000011 if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.20")
12 cmake_policy(SET CMP0116 NEW)
13 endif()
14
Tomasz Wasilczyk1e831bf2024-05-10 15:15:21 -070015 # 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
Hao Chen1c8ea5b2023-10-20 23:03:45 +000021 set(GEN_DIR "${CMAKE_CURRENT_BINARY_DIR}/.intermediates/${NAME}-source")
22 set(GEN_SOURCES)
Tomasz Wasilczyk1e831bf2024-05-10 15:15:21 -070023 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
Hao Chen1c8ea5b2023-10-20 23:03:45 +000036 set(DEPFILE_ARG)
Tomasz Wasilczyk2493fcc2024-06-20 15:29:09 -070037 if (NOT ${CMAKE_GENERATOR} STREQUAL "Unix Makefiles")
Hao Chen1c8ea5b2023-10-20 23:03:45 +000038 set(DEPFILE_ARG DEPFILE "${GEN_SOURCE}.d")
39 endif()
Tomasz Wasilczyk1e831bf2024-05-10 15:15:21 -070040
Hao Chen1c8ea5b2023-10-20 23:03:45 +000041 add_custom_command(
42 OUTPUT "${GEN_SOURCE}"
Tomasz Wasilczyk1e831bf2024-05-10 15:15:21 -070043 MAIN_DEPENDENCY "${SOURCE_FULL}"
Hao Chen1c8ea5b2023-10-20 23:03:45 +000044 ${DEPFILE_ARG}
45 COMMAND "${AIDL_BIN}"
46 ARGS
47 --lang=${LANG}
Tomasz Wasilczyk1e831bf2024-05-10 15:15:21 -070048 --include="${AIDLROOT}"
Hao Chen1c8ea5b2023-10-20 23:03:45 +000049 --dep="${GEN_SOURCE}.d"
50 --out="${GEN_DIR}"
51 --header_out="${GEN_DIR}/include"
52 --ninja
53 --structured
54 --min_sdk_version=current
Tomasz Wasilczyk1e831bf2024-05-10 15:15:21 -070055 ${STABILITY_FLAG}
Hao Chen1c8ea5b2023-10-20 23:03:45 +000056 ${AIDLFLAGS}
Tomasz Wasilczyk1e831bf2024-05-10 15:15:21 -070057 "${SOURCE_FULL}"
Hao Chen1c8ea5b2023-10-20 23:03:45 +000058 )
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"
Hao Chen1c8ea5b2023-10-20 23:03:45 +000067 )
Tomasz Wasilczyk1e831bf2024-05-10 15:15:21 -070068
Tomasz Wasilczyk2493fcc2024-06-20 15:29:09 -070069 if (${LANG} STREQUAL "ndk")
Tomasz Wasilczyk1e831bf2024-05-10 15:15:21 -070070 set(BINDER_LIB_NAME "libbinder_ndk_sdk")
71 else()
72 set(BINDER_LIB_NAME "libbinder_sdk")
73 endif()
Hao Chen1c8ea5b2023-10-20 23:03:45 +000074 target_link_libraries(${NAME}
Tomasz Wasilczyk1e831bf2024-05-10 15:15:21 -070075 ${BINDER_LIB_NAME}
Hao Chen1c8ea5b2023-10-20 23:03:45 +000076 )
77endfunction()