brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.0 KiB · 9a0e4d4 Raw
237 lines · plain
1add_mlir_library(MLIRTargetLLVM2  ModuleToObject.cpp3 4  ADDITIONAL_HEADER_DIRS5  ${MLIR_MAIN_INCLUDE_DIR}/mlir/Target/LLVM6 7  DEPENDS8  intrinsics_gen9 10  LINK_COMPONENTS11  BitWriter12  Core13  IPO14  IRReader15  Linker16  MC17  Passes18  Support19  Target20  LINK_LIBS PUBLIC21  MLIRExecutionEngineUtils22  MLIRTargetLLVMIRExport23)24 25if ("NVPTX" IN_LIST LLVM_TARGETS_TO_BUILD)26  set(NVPTX_LIBS27    NVPTXCodeGen28    NVPTXDesc29    NVPTXInfo30  )31endif()32 33add_mlir_dialect_library(MLIRNVVMTarget34  NVVM/Target.cpp35 36  OBJECT37 38  ADDITIONAL_HEADER_DIRS39  ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/LLVMIR40 41  LINK_COMPONENTS42  ${NVPTX_LIBS}43 44  LINK_LIBS PUBLIC45  MLIRIR46  MLIRExecutionEngineUtils47  MLIRSupport48  MLIRGPUDialect49  MLIRTargetLLVM50  MLIRNVVMToLLVMIRTranslation51  )52 53if ("NVPTX" IN_LIST LLVM_TARGETS_TO_BUILD)54  # Find the CUDA toolkit.55  find_package(CUDAToolkit)56 57  if(CUDAToolkit_FOUND)58    # Get the CUDA toolkit path. The path is needed for detecting `libdevice.bc`.59    # These extra steps are needed because of a bug on CMake.60    # See: https://gitlab.kitware.com/cmake/cmake/-/issues/2485861    # TODO: Bump the MLIR CMake version to 3.26.4 and switch to62    # ${CUDAToolkit_LIBRARY_ROOT}63    if(NOT DEFINED CUDAToolkit_LIBRARY_ROOT)64      get_filename_component(MLIR_CUDAToolkit_ROOT ${CUDAToolkit_BIN_DIR}65                             DIRECTORY ABSOLUTE)66    else()67      set(MLIR_CUDAToolkit_ROOT ${CUDAToolkit_LIBRARY_ROOT})68    endif()69 70    # Add the `nvptxcompiler` library.71    if(MLIR_ENABLE_NVPTXCOMPILER)72      # Find the `nvptxcompiler` library.73      # TODO: Bump the MLIR CMake version to 3.25 and use `CUDA::nvptxcompiler_static`.74      find_library(MLIR_NVPTXCOMPILER_LIB_PATH nvptxcompiler_static75                  PATHS ${CUDAToolkit_LIBRARY_DIR} NO_DEFAULT_PATH)76 77      # Fail if `nvptxcompiler_static` couldn't be found.78      if(MLIR_NVPTXCOMPILER_LIB_PATH STREQUAL "MLIR_NVPTXCOMPILER_LIB_PATH-NOTFOUND")79        message(FATAL_ERROR80                "Requested using the `nvptxcompiler` library backend but it couldn't be found.")81      endif()82 83      add_library(MLIR_NVPTXCOMPILER_LIB STATIC IMPORTED GLOBAL)84      # Downstream projects can modify this path and use it in CMake. For example:85      # add_library(MLIR_NVPTXCOMPILER_LIB STATIC IMPORTED GLOBAL)86      # set_property(TARGET MLIR_NVPTXCOMPILER_LIB PROPERTY IMPORTED_LOCATION ${...})  87      # where `...` is to be replaced with the path to the library.88      set_property(TARGET MLIR_NVPTXCOMPILER_LIB PROPERTY IMPORTED_LOCATION ${MLIR_NVPTXCOMPILER_LIB_PATH})89      # Link against `nvptxcompiler_static`. TODO: use `CUDA::nvptxcompiler_static`.90      target_link_libraries(MLIRNVVMTarget PRIVATE MLIR_NVPTXCOMPILER_LIB)91      target_include_directories(obj.MLIRNVVMTarget PUBLIC ${CUDAToolkit_INCLUDE_DIRS})92 93      # Add the `nvfatbin` library.94      find_library(MLIR_NVFATBIN_LIB_PATH nvfatbin_static95                  PATHS ${CUDAToolkit_LIBRARY_DIR} NO_DEFAULT_PATH)96      # Fail if `nvfatbin_static` couldn't be found.97      if(MLIR_NVFATBIN_LIB_PATH STREQUAL "MLIR_NVFATBIN_LIB_PATH-NOTFOUND")98        message(FATAL_ERROR99                "Requested using the static `nvptxcompiler` library which requires the \100                'nvfatbin` library, but it couldn't be found.")101      endif()102 103      add_library(MLIR_NVFATBIN_LIB STATIC IMPORTED GLOBAL)104      set_property(TARGET MLIR_NVFATBIN_LIB PROPERTY IMPORTED_LOCATION ${MLIR_NVFATBIN_LIB_PATH})  105      target_link_libraries(MLIRNVVMTarget PRIVATE MLIR_NVFATBIN_LIB)106    endif()107  else()108    # Fail if `MLIR_ENABLE_NVPTXCOMPILER` is enabled and the toolkit couldn't be found.109    if(MLIR_ENABLE_NVPTXCOMPILER)110      message(FATAL_ERROR111              "Requested using the `nvptxcompiler` library backend but it couldn't be found.")112    endif()113  endif()114  message(VERBOSE "MLIR default CUDA toolkit path: ${MLIR_CUDAToolkit_ROOT}")115 116  # Define the `CUDAToolkit` path.117  target_compile_definitions(obj.MLIRNVVMTarget118    PRIVATE119    __DEFAULT_CUDATOOLKIT_PATH__="${MLIR_CUDAToolkit_ROOT}"120  )121endif()122 123 124function(embed_binary_to_src file output_file symbol)125    file(READ ${file} filedata HEX)126    # Convert hex data for C compatibility127    string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," filedata ${filedata})128    # Write data to output file129    file(WRITE ${output_file} "const unsigned char ${symbol}[] = {${filedata}};\nconst int ${symbol}_size = sizeof(${symbol});\n")130endfunction()131 132set(MLIR_NVVM_EMBED_LIBDEVICE 0 CACHE BOOL "Embed CUDA libdevice.bc in the binary at build time instead of looking it up at runtime")133if (MLIR_NVVM_EMBED_LIBDEVICE)134  if (NOT MLIR_NVVM_LIBDEVICE_PATH)135    if(CUDAToolkit_FOUND)136      find_file(MLIR_NVVM_LIBDEVICE_PATH libdevice.10.bc137                PATHS ${CUDAToolkit_LIBRARY_ROOT}138                PATH_SUFFIXES "nvvm/libdevice" NO_DEFAULT_PATH REQUIRED)139    else()140      message(FATAL_ERROR141              "Requested using the `nvptxcompiler` library backend but it couldn't be found.")142    endif()143  endif()144  145  embed_binary_to_src(${MLIR_NVVM_LIBDEVICE_PATH} ${CMAKE_CURRENT_BINARY_DIR}/libdevice_embedded.c _mlir_embedded_libdevice)146  add_mlir_library(MLIRNVVMLibdevice147    ${CMAKE_CURRENT_BINARY_DIR}/libdevice_embedded.c148  )149  target_link_libraries(MLIRNVVMTarget PRIVATE MLIRNVVMLibdevice)150  target_compile_definitions(obj.MLIRNVVMTarget151    PRIVATE152    MLIR_NVVM_EMBED_LIBDEVICE=1153  )154else()155  target_compile_definitions(obj.MLIRNVVMTarget156    PRIVATE157    MLIR_NVVM_EMBED_LIBDEVICE=0158  )159endif()160 161 162if (MLIR_ENABLE_ROCM_CONVERSIONS)163  set(AMDGPU_LIBS164    AMDGPUAsmParser165    AMDGPUCodeGen166    AMDGPUDesc167    AMDGPUInfo168  )169endif()170 171add_mlir_dialect_library(MLIRROCDLTarget172  ROCDL/Target.cpp173  ROCDL/Utils.cpp174 175  OBJECT176 177  LINK_COMPONENTS178  FrontendOffloading179  MCParser180  ${AMDGPU_LIBS}181 182  LINK_LIBS PUBLIC183  MLIRIR184  MLIRExecutionEngineUtils185  MLIRSupport186  MLIRGPUDialect187  MLIRTargetLLVM188  MLIRROCDLToLLVMIRTranslation189  )190 191if(MLIR_ENABLE_ROCM_CONVERSIONS)192  if (DEFINED ROCM_PATH)193    set(DEFAULT_ROCM_PATH "${ROCM_PATH}" CACHE PATH "Fallback path to search for ROCm installs")194  elseif(DEFINED ENV{ROCM_PATH})195    set(DEFAULT_ROCM_PATH "$ENV{ROCM_PATH}" CACHE PATH "Fallback path to search for ROCm installs")196  else()197    if (WIN32)198      # Avoid setting an UNIX path for Windows.199      # TODO: Eventually migrate to FindHIP once it becomes a part of CMake.200      set(DEFAULT_ROCM_PATH "" CACHE PATH "Fallback path to search for ROCm installs")201    else()202      set(DEFAULT_ROCM_PATH "/opt/rocm" CACHE PATH "Fallback path to search for ROCm installs")203    endif()204  endif()205  message(VERBOSE "MLIR Default ROCM toolkit path: ${DEFAULT_ROCM_PATH}")206 207  target_compile_definitions(obj.MLIRROCDLTarget208    PRIVATE209    __DEFAULT_ROCM_PATH__="${DEFAULT_ROCM_PATH}"210  )211endif()212 213if ("SPIRV" IN_LIST LLVM_TARGETS_TO_BUILD)214  set(SPIRV_LIBS215    SPIRVCodeGen216    SPIRVDesc217    SPIRVInfo218  )219endif()220 221add_mlir_dialect_library(MLIRXeVMTarget222  XeVM/Target.cpp223 224  OBJECT225 226  LINK_COMPONENTS227  ${SPIRV_LIBS}228 229  LINK_LIBS PUBLIC230  MLIRIR231  MLIRExecutionEngineUtils232  MLIRSupport233  MLIRGPUDialect234  MLIRTargetLLVM235  MLIRXeVMToLLVMIRTranslation236)237