if (NOT DEFINED LLDB_RPC_GEN_EXE) message(FATAL_ERROR "Unable to generate lldb-rpc sources because LLDB_RPC_GEN_EXE is not defined. If you are cross-compiling, please build lldb-rpc-gen for your host platform.") endif() set(lldb_rpc_generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated") set(lldb_rpc_server_generated_source_dir "${lldb_rpc_generated_dir}/server") file(GLOB api_headers ${LLDB_SOURCE_DIR}/include/lldb/API/SB*.h) # We don't generate SBCommunication list(REMOVE_ITEM api_headers ${LLDB_SOURCE_DIR}/include/lldb/API/SBCommunication.h) # SBDefines.h is mostly definitions and forward declarations, nothing to # generate. list(REMOVE_ITEM api_headers ${LLDB_SOURCE_DIR}/include/lldb/API/SBDefines.h) # Generate the list of byproducts. Note that we cannot just glob the files in # the directory with the generated sources because BYPRODUCTS needs to be known # at configure time but the files are generated at build time. set(lldb_rpc_gen_byproducts ${lldb_rpc_generated_dir}/SBClasses.def ${lldb_rpc_generated_dir}/SBAPI.def ${lldb_rpc_generated_dir}/lldb.py ${lldb_rpc_server_generated_source_dir}/SBAPI.h ) set(lldb_rpc_gen_server_impl_files) foreach(path ${api_headers}) get_filename_component(filename_no_ext ${path} NAME_WLE) set(server_header_file "Server_${filename_no_ext}.h") list(APPEND lldb_rpc_gen_byproducts "${lldb_rpc_server_generated_source_dir}/${server_header_file}") set(server_impl_file "Server_${filename_no_ext}.cpp") list(APPEND lldb_rpc_gen_byproducts "${lldb_rpc_server_generated_source_dir}/${server_impl_file}") list(APPEND lldb_rpc_gen_server_impl_files "${lldb_rpc_server_generated_source_dir}/${server_impl_file}") endforeach() # Make sure that the clang-resource-dir is set correctly or else the tool will # fail to run. This is only needed when we do a standalone build. set(clang_resource_dir_arg) if (TARGET clang-resource-headers) set(clang_resource_headers_dir $) set(clang_resource_dir_arg --extra-arg="-resource-dir=${clang_resource_headers_dir}/..") else() set(clang_resource_dir_arg --extra-arg="-resource-dir=${LLDB_EXTERNAL_CLANG_RESOURCE_DIR}") endif() set(sysroot_arg) if (DEFINED TOOLCHAIN_TARGET_SYSROOTFS) set(sysroot_arg --extra-arg="-resource-dir=${TOOLCHAIN_TARGET_SYSROOTFS}") endif() add_custom_command(OUTPUT ${lldb_rpc_gen_byproducts} COMMAND ${CMAKE_COMMAND} -E make_directory ${lldb_rpc_generated_dir} COMMAND ${CMAKE_COMMAND} -E make_directory ${lldb_rpc_server_generated_source_dir} COMMAND ${LLDB_RPC_GEN_EXE} -p ${CMAKE_BINARY_DIR} --output-dir=${lldb_rpc_generated_dir} ${sysroot_arg} --extra-arg="-USWIG" ${api_headers} DEPENDS ${LLDB_RPC_GEN_EXE} ${api_headers} COMMENT "Generating sources for lldb-rpc-server..." WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) add_custom_target(lldb-rpc-generate-sources DEPENDS ${lldb_rpc_gen_byproducts} lldb-sbapi-dwarf-enums) add_dependencies(lldb-rpc-generate-sources clang-resource-headers)