| 
 | 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