81 lines · plain
1if (NOT DEFINED LLDB_RPC_GEN_EXE)2 message(FATAL_ERROR3 "Unable to generate lldb-rpc sources because LLDB_RPC_GEN_EXE is not4 defined. If you are cross-compiling, please build lldb-rpc-gen for your host5 platform.")6endif()7set(lldb_rpc_generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated")8set(lldb_rpc_server_generated_source_dir "${lldb_rpc_generated_dir}/server")9 10file(GLOB api_headers ${LLDB_SOURCE_DIR}/include/lldb/API/SB*.h)11# We don't generate SBCommunication12list(REMOVE_ITEM api_headers ${LLDB_SOURCE_DIR}/include/lldb/API/SBCommunication.h)13# SBDefines.h is mostly definitions and forward declarations, nothing to14# generate.15list(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 in18# the directory with the generated sources because BYPRODUCTS needs to be known19# at configure time but the files are generated at build time.20set(lldb_rpc_gen_byproducts21 ${lldb_rpc_generated_dir}/SBClasses.def22 ${lldb_rpc_generated_dir}/SBAPI.def23 ${lldb_rpc_generated_dir}/lldb.py24 ${lldb_rpc_server_generated_source_dir}/SBAPI.h25)26 27set(lldb_rpc_gen_server_impl_files)28foreach(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 38endforeach()39 40# Make sure that the clang-resource-dir is set correctly or else the tool will41# fail to run. This is only needed when we do a standalone build.42set(clang_resource_dir_arg)43if (TARGET clang-resource-headers)44 set(clang_resource_headers_dir45 $<TARGET_PROPERTY:clang-resource-headers,INTERFACE_INCLUDE_DIRECTORIES>)46 set(clang_resource_dir_arg --extra-arg="-resource-dir=${clang_resource_headers_dir}/..")47else()48 set(clang_resource_dir_arg --extra-arg="-resource-dir=${LLDB_EXTERNAL_CLANG_RESOURCE_DIR}")49endif()50 51set(sysroot_arg)52if (DEFINED TOOLCHAIN_TARGET_SYSROOTFS)53 set(sysroot_arg --extra-arg="-resource-dir=${TOOLCHAIN_TARGET_SYSROOTFS}")54endif()55 56add_custom_command(OUTPUT ${lldb_rpc_gen_byproducts}57 COMMAND ${CMAKE_COMMAND} -E make_directory58 ${lldb_rpc_generated_dir}59 60 COMMAND ${CMAKE_COMMAND} -E make_directory61 ${lldb_rpc_server_generated_source_dir}62 63 COMMAND ${LLDB_RPC_GEN_EXE}64 -p ${CMAKE_BINARY_DIR}65 --output-dir=${lldb_rpc_generated_dir}66 ${sysroot_arg}67 --extra-arg="-USWIG"68 ${api_headers}69 70 DEPENDS ${LLDB_RPC_GEN_EXE} ${api_headers}71 COMMENT "Generating sources for lldb-rpc-server..."72 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}73)74 75add_custom_target(lldb-rpc-generate-sources76 DEPENDS77 ${lldb_rpc_gen_byproducts}78 lldb-sbapi-dwarf-enums)79 80add_dependencies(lldb-rpc-generate-sources clang-resource-headers)81