|
| 1 | +if (NOT DEFINED LLDB_RPC_GEN_EXE) |
| 2 | + message(FATAL_ERROR |
| 3 | + "Unable to generate lldb-rpc sources because LLDB_RPC_GEN_EXE is not |
| 4 | + defined. If you are cross-compiling, please build lldb-rpc-gen for your host |
| 5 | + platform.") |
| 6 | +endif() |
| 7 | +set(lldb_rpc_generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated") |
| 8 | +set(lldb_rpc_server_generated_source_dir "${lldb_rpc_generated_dir}/server") |
| 9 | + |
| 10 | +file(GLOB api_headers ${LLDB_SOURCE_DIR}/include/lldb/API/SB*.h) |
| 11 | +# We don't generate SBCommunication |
| 12 | +list(REMOVE_ITEM api_headers ${LLDB_SOURCE_DIR}/include/lldb/API/SBCommunication.h) |
| 13 | +# SBDefines.h is mostly definitions and forward declarations, nothing to |
| 14 | +# generate. |
| 15 | +list(REMOVE_ITEM api_headers ${LLDB_SOURCE_DIR}/include/lldb/API/SBDefines.h) |
| 16 | + |
| 17 | +# Generate the list of byproducts. Note that we cannot just glob the files in |
| 18 | +# the directory with the generated sources because BYPRODUCTS needs to be known |
| 19 | +# at configure time but the files are generated at build time. |
| 20 | +set(lldb_rpc_gen_byproducts |
| 21 | + ${lldb_rpc_generated_dir}/SBClasses.def |
| 22 | + ${lldb_rpc_generated_dir}/SBAPI.def |
| 23 | + ${lldb_rpc_generated_dir}/lldb.py |
| 24 | + ${lldb_rpc_server_generated_source_dir}/SBAPI.h |
| 25 | +) |
| 26 | + |
| 27 | +set(lldb_rpc_gen_server_impl_files) |
| 28 | +foreach(path ${api_headers}) |
| 29 | + get_filename_component(filename_no_ext ${path} NAME_WLE) |
| 30 | + |
| 31 | + set(server_header_file "Server_${filename_no_ext}.h") |
| 32 | + list(APPEND lldb_rpc_gen_byproducts "${lldb_rpc_server_generated_source_dir}/${server_header_file}") |
| 33 | + |
| 34 | + set(server_impl_file "Server_${filename_no_ext}.cpp") |
| 35 | + list(APPEND lldb_rpc_gen_byproducts "${lldb_rpc_server_generated_source_dir}/${server_impl_file}") |
| 36 | + list(APPEND lldb_rpc_gen_server_impl_files "${lldb_rpc_server_generated_source_dir}/${server_impl_file}") |
| 37 | + |
| 38 | +endforeach() |
| 39 | + |
| 40 | +# Make sure that the clang-resource-dir is set correctly or else the tool will |
| 41 | +# fail to run. This is only needed when we do a standalone build. |
| 42 | +set(clang_resource_dir_arg) |
| 43 | +if (TARGET clang-resource-headers) |
| 44 | + set(clang_resource_headers_dir |
| 45 | + $<TARGET_PROPERTY:clang-resource-headers,INTERFACE_INCLUDE_DIRECTORIES>) |
| 46 | + set(clang_resource_dir_arg --extra-arg="-resource-dir=${clang_resource_headers_dir}/..") |
| 47 | +else() |
| 48 | + set(clang_resource_dir_arg --extra-arg="-resource-dir=${LLDB_EXTERNAL_CLANG_RESOURCE_DIR}") |
| 49 | +endif() |
| 50 | + |
| 51 | +add_custom_command(OUTPUT ${lldb_rpc_gen_byproducts} |
| 52 | + COMMAND ${CMAKE_COMMAND} -E make_directory |
| 53 | + ${lldb_rpc_generated_dir} |
| 54 | + |
| 55 | + COMMAND ${CMAKE_COMMAND} -E make_directory |
| 56 | + ${lldb_rpc_server_generated_source_dir} |
| 57 | + |
| 58 | + COMMAND ${LLDB_RPC_GEN_EXE} |
| 59 | + -p ${CMAKE_BINARY_DIR} |
| 60 | + --output-dir=${lldb_rpc_generated_dir} |
| 61 | + ${clang_resource_dir_arg} |
| 62 | + --extra-arg="-USWIG" |
| 63 | + ${api_headers} |
| 64 | + |
| 65 | + DEPENDS ${LLDB_RPC_GEN_EXE} ${api_headers} |
| 66 | + COMMENT "Generating sources for lldb-rpc-server..." |
| 67 | + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} |
| 68 | +) |
| 69 | + |
| 70 | +add_custom_target(lldb-rpc-generate-sources |
| 71 | + DEPENDS |
| 72 | + ${lldb_rpc_gen_byproducts} |
| 73 | + lldb-sbapi-dwarf-enums) |
| 74 | + |
| 75 | +add_dependencies(lldb-rpc-generate-sources clang-resource-headers) |
0 commit comments