| 
 | 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 | +set(lldb_rpc_lib_generated_source_dir "${lldb_rpc_generated_dir}/lib")  | 
 | 10 | +set(lldb_rpc_client_generated_source_dir "${lldb_rpc_generated_dir}/client")  | 
 | 11 | + | 
 | 12 | +file(GLOB api_headers ${LLDB_SOURCE_DIR}/include/lldb/API/SB*.h)  | 
 | 13 | +# We don't generate SBCommunication  | 
 | 14 | +list(REMOVE_ITEM api_headers ${LLDB_SOURCE_DIR}/include/lldb/API/SBCommunication.h)  | 
 | 15 | +# SBDefines.h is mostly definitions and forward declarations, nothing to  | 
 | 16 | +# generate.  | 
 | 17 | +list(REMOVE_ITEM api_headers ${LLDB_SOURCE_DIR}/include/lldb/API/SBDefines.h)  | 
 | 18 | + | 
 | 19 | +# Generate the list of byproducts. Note that we cannot just glob the files in  | 
 | 20 | +# the directory with the generated sources because BYPRODUCTS needs to be known  | 
 | 21 | +# at configure time but the files are generated at build time.  | 
 | 22 | +set(lldb_rpc_gen_byproducts  | 
 | 23 | +  ${lldb_rpc_generated_dir}/SBClasses.def  | 
 | 24 | +  ${lldb_rpc_generated_dir}/SBAPI.def  | 
 | 25 | +  ${lldb_rpc_generated_dir}/lldb.py  | 
 | 26 | +  ${lldb_rpc_server_generated_source_dir}/SBAPI.h  | 
 | 27 | +  ${lldb_rpc_lib_generated_source_dir}/LLDBRPC.h  | 
 | 28 | +)  | 
 | 29 | + | 
 | 30 | +set(lldb_rpc_gen_server_impl_files)  | 
 | 31 | +set(lldb_rpc_gen_lib_header_files)  | 
 | 32 | +set(lldb_rpc_gen_lib_impl_files)  | 
 | 33 | +foreach(path ${api_headers})  | 
 | 34 | +  get_filename_component(filename_no_ext ${path} NAME_WLE)  | 
 | 35 | + | 
 | 36 | +  set(server_header_file "Server_${filename_no_ext}.h")  | 
 | 37 | +  list(APPEND lldb_rpc_gen_byproducts "${lldb_rpc_server_generated_source_dir}/${server_header_file}")  | 
 | 38 | + | 
 | 39 | +  set(server_impl_file "Server_${filename_no_ext}.cpp")  | 
 | 40 | +  list(APPEND lldb_rpc_gen_byproducts "${lldb_rpc_server_generated_source_dir}/${server_impl_file}")  | 
 | 41 | +  list(APPEND lldb_rpc_gen_server_impl_files "${lldb_rpc_server_generated_source_dir}/${server_impl_file}")  | 
 | 42 | + | 
 | 43 | +  set(lib_header_file "${filename_no_ext}.h")  | 
 | 44 | +  list(APPEND lldb_rpc_gen_byproducts "${lldb_rpc_lib_generated_source_dir}/${lib_header_file}")  | 
 | 45 | +  list(APPEND lldb_rpc_gen_lib_header_files "${lldb_rpc_lib_generated_source_dir}/${lib_header_file}")  | 
 | 46 | + | 
 | 47 | +  set(lib_impl_file "${filename_no_ext}.cpp")  | 
 | 48 | +  list(APPEND lldb_rpc_gen_byproducts "${lldb_rpc_lib_generated_source_dir}/${lib_impl_file}")  | 
 | 49 | +  list(APPEND lldb_rpc_gen_lib_impl_files "${lldb_rpc_lib_generated_source_dir}/${lib_impl_file}")  | 
 | 50 | +endforeach()  | 
 | 51 | +list(APPEND lldb_rpc_gen_lib_impl_files "${CMAKE_CURRENT_BINARY_DIR}/generated/lib/RPCClientSideCallbacks.cpp")  | 
 | 52 | +list(APPEND lldb_rpc_gen_lib_header_files "${lldb_rpc_lib_generated_source_dir}/LLDBRPC.h")  | 
 | 53 | + | 
 | 54 | +# Make sure that the clang-resource-dir is set correctly or else the tool will  | 
 | 55 | +# fail to run. This is only needed when we do a standalone build.  | 
 | 56 | +set(clang_resource_dir_arg)  | 
 | 57 | +if (LLDB_BUILT_STANDALONE)  | 
 | 58 | +  if (TARGET clang-resource-headers)  | 
 | 59 | +    set(clang_resource_headers_dir  | 
 | 60 | +      $<TARGET_PROPERTY:clang-resource-headers,INTERFACE_INCLUDE_DIRECTORIES>)  | 
 | 61 | +    set(clang_resource_dir_arg --extra-arg="-resource-dir=${clang_resource_headers_dir}/..")  | 
 | 62 | +  else()  | 
 | 63 | +    set(clang_resource_dir_arg --extra-arg="-resource-dir=${LLDB_EXTERNAL_CLANG_RESOURCE_DIR}")  | 
 | 64 | +  endif()  | 
 | 65 | +endif()  | 
 | 66 | + | 
 | 67 | +add_custom_command(OUTPUT ${lldb_rpc_gen_byproducts}  | 
 | 68 | +  COMMAND ${CMAKE_COMMAND} -E make_directory  | 
 | 69 | +    ${lldb_rpc_generated_dir}  | 
 | 70 | + | 
 | 71 | +  COMMAND ${CMAKE_COMMAND} -E make_directory  | 
 | 72 | +    ${lldb_rpc_server_generated_source_dir}  | 
 | 73 | + | 
 | 74 | +  COMMAND ${CMAKE_COMMAND} -E make_directory  | 
 | 75 | +    ${lldb_rpc_lib_generated_source_dir}  | 
 | 76 | + | 
 | 77 | +  COMMAND ${CMAKE_COMMAND} -E make_directory  | 
 | 78 | +    ${lldb_rpc_client_generated_source_dir}  | 
 | 79 | + | 
 | 80 | +  COMMAND ${LLDB_RPC_GEN_EXE}  | 
 | 81 | +    -p ${CMAKE_BINARY_DIR}  | 
 | 82 | +    --output-dir=${lldb_rpc_generated_dir}  | 
 | 83 | +    ${clang_resource_dir_arg}  | 
 | 84 | +    --extra-arg="-USWIG"  | 
 | 85 | +    ${api_headers}  | 
 | 86 | + | 
 | 87 | +  DEPENDS ${LLDB_RPC_GEN_EXE} ${api_headers}  | 
 | 88 | +  COMMENT "Generating sources for lldb-rpc-server..."  | 
 | 89 | +  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}  | 
 | 90 | +)  | 
 | 91 | + | 
 | 92 | +add_custom_target(lldb-rpc-generate-sources  | 
 | 93 | +  DEPENDS  | 
 | 94 | +    ${lldb_rpc_gen_byproducts}  | 
 | 95 | +    lldb-sbapi-dwarf-enums)  | 
0 commit comments