run_nvcc.cmake
上传用户:chinafayin
上传日期:2022-04-05
资源大小:153k
文件大小:6k
源码类别:

并行计算

开发平台:

Visual C++

  1. # This file runs the nvcc commands to produce the desired output file along with
  2. # the dependency file needed by CMake to compute dependencies.  In addition the
  3. # file checks the output of each command and if the command fails it deletes the
  4. # output files.
  5. # Input variables
  6. #
  7. # verbose:BOOL=<>          OFF: Be as quiet as possible (default)
  8. #                          ON : Describe each step
  9. #
  10. # Set these up as variables to make reading the generated file easier
  11. set(CMAKE_COMMAND "@CMAKE_COMMAND@")
  12. set(source_file "@source_file@")
  13. set(generated_file "@generated_file@")
  14. set(NVCC_generated_dependency_file "@NVCC_generated_dependency_file@")
  15. set(cmake_dependency_file "@cmake_dependency_file@")
  16. set(CUDA_make2cmake "@CUDA_make2cmake@")
  17. set(generated_cubin_file "@generated_cubin_file@")
  18. set(CUDA_parse_cubin "@CUDA_parse_cubin@")
  19. set(build_cubin @build_cubin@)
  20. set(CUDA_NVCC "@CUDA_NVCC@")
  21. set(CUDA_NVCC_FLAGS "@CUDA_NVCC_FLAGS@")
  22. set(nvcc_flags "@nvcc_flags@")
  23. set(CUDA_NVCC_INCLUDE_ARGS "@CUDA_NVCC_INCLUDE_ARGS@")
  24. set(format_flag "@format_flag@")
  25. if(DEFINED CCBIN)
  26.   set(CCBIN -ccbin "${CCBIN}")
  27. endif()
  28. if(debug)
  29.   set(CMAKE_COMMAND "C:/code/CMake-cuda-staging/build-32/src/debug/args.exe")
  30.   set(CUDA_NVCC "C:/code/CMake-cuda-staging/build-32/src/debug/args.exe")
  31. endif()
  32. # cuda_execute_process - Executes a command with optional command echo and status message.
  33. #
  34. #   status  - Status message to print if verbose is true
  35. #   command - COMMAND argument from the usual execute_process argument structure
  36. #   ARGN    - Remaining arguments are the command with arguments
  37. #
  38. #   CUDA_result - return value from running the command
  39. #
  40. # Make this a macro instead of a function, so that things like RESULT_VARIABLE
  41. # and other return variables are present after executing the process.
  42. macro(cuda_execute_process status command)
  43.   set(_command ${command})
  44.   if(NOT _command STREQUAL "COMMAND")
  45.     message(FATAL_ERROR "Malformed call to cuda_execute_process.  Missing COMMAND as second argument. (command = ${command})")
  46.   endif()
  47.   if(verbose)
  48.     execute_process(COMMAND "${CMAKE_COMMAND}" -E echo -- ${status})
  49.     # Now we need to build up our command string.  We are accounting for quotes
  50.     # and spaces, anything else is left up to the user to fix if they want to
  51.     # copy and paste a runnable command line.
  52.     set(cuda_execute_process_string)
  53.     foreach(arg ${ARGN})
  54.       # If there are quotes, excape them, so they come through.
  55.       string(REPLACE """ "\"" arg ${arg})
  56.       # Args with spaces need quotes around them to get them to be parsed as a single argument.
  57.       if(arg MATCHES " ")
  58.         list(APPEND cuda_execute_process_string ""${arg}"")
  59.       else()
  60.         list(APPEND cuda_execute_process_string ${arg})
  61.       endif()
  62.     endforeach()
  63.     # Echo the command
  64.     execute_process(COMMAND ${CMAKE_COMMAND} -E echo ${cuda_execute_process_string})
  65.   endif(verbose)
  66.   # Run the command
  67.   execute_process(COMMAND ${ARGN} RESULT_VARIABLE CUDA_result )
  68. endmacro()
  69. # Delete the target file
  70. cuda_execute_process(
  71.   "Removing ${generated_file}"
  72.   COMMAND "${CMAKE_COMMAND}" -E remove "${generated_file}"
  73.   )
  74. # Generate the dependency file
  75. cuda_execute_process(
  76.   "Generating dependency file: ${NVCC_generated_dependency_file}"
  77.   COMMAND "${CUDA_NVCC}"
  78.   "${source_file}"
  79.   ${CUDA_NVCC_FLAGS}
  80.   ${nvcc_flags}
  81.   ${CCBIN}
  82.   -DNVCC
  83.   -M
  84.   -o "${NVCC_generated_dependency_file}"
  85.   ${CUDA_NVCC_INCLUDE_ARGS}
  86.   )
  87. if(CUDA_result)
  88.   message(FATAL_ERROR "Error generating ${generated_file}")
  89. endif()
  90. # Generate the cmake readable dependency file to a temp file.  Don't put the
  91. # quotes just around the filenames for the input_file and output_file variables.
  92. # CMake will pass the quotes through and not be able to find the file.
  93. cuda_execute_process(
  94.   "Generating temporary cmake readable file: ${cmake_dependency_file}.tmp"
  95.   COMMAND "${CMAKE_COMMAND}"
  96.   -D "input_file:FILEPATH=${NVCC_generated_dependency_file}"
  97.   -D "output_file:FILEPATH=${cmake_dependency_file}.tmp"
  98.   -P "${CUDA_make2cmake}"
  99.   )
  100. if(CUDA_result)
  101.   message(FATAL_ERROR "Error generating ${generated_file}")
  102. endif()
  103. # Copy the file if it is different
  104. cuda_execute_process(
  105.   "Copy if different ${cmake_dependency_file}.tmp to ${cmake_dependency_file}"
  106.   COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${cmake_dependency_file}.tmp" "${cmake_dependency_file}"
  107.   )
  108. if(CUDA_result)
  109.   message(FATAL_ERROR "Error generating ${generated_file}")
  110. endif()
  111. # Delete the temporary file
  112. cuda_execute_process(
  113.   "Removing ${cmake_dependency_file}.tmp and ${NVCC_generated_dependency_file}"
  114.   COMMAND "${CMAKE_COMMAND}" -E remove "${cmake_dependency_file}.tmp" "${NVCC_generated_dependency_file}"
  115.   )
  116. if(CUDA_result)
  117.   message(FATAL_ERROR "Error generating ${generated_file}")
  118. endif()
  119. # Generate the code
  120. cuda_execute_process(
  121.   "Generating ${generated_file}"
  122.   COMMAND "${CUDA_NVCC}"
  123.   "${source_file}"
  124.   ${CUDA_NVCC_FLAGS}
  125.   ${nvcc_flags}
  126.   ${CCBIN}
  127.   -DNVCC
  128.   ${format_flag} -o "${generated_file}"
  129.   ${CUDA_NVCC_INCLUDE_ARGS}
  130.   )
  131. if(CUDA_result)
  132.   # Since nvcc can sometimes leave half done files make sure that we delete the output file.
  133.   cuda_execute_process(
  134.     "Removing ${generated_file}"
  135.     COMMAND "${CMAKE_COMMAND}" -E remove "${generated_file}"
  136.     )
  137.   message(FATAL_ERROR "Error generating file ${generated_file}")
  138. else()
  139.   message("Generated ${generated_file} successfully.")
  140. endif()
  141. # Cubin resource report commands.
  142. if( build_cubin )
  143.   # Run with -cubin to produce resource usage report.
  144.   cuda_execute_process(
  145.     "Generating ${generated_cubin_file}"
  146.     COMMAND "${CUDA_NVCC}"
  147.     "${source_file}"
  148.     ${CUDA_NVCC_FLAGS}
  149.     ${nvcc_flags}
  150.     ${CCBIN}
  151.     -DNVCC
  152.     -cubin
  153.     -o "${generated_cubin_file}"
  154.     ${CUDA_NVCC_INCLUDE_ARGS}
  155.     )
  156.   # Execute the parser script.
  157.   cuda_execute_process(
  158.     "Executing the parser script"
  159.     COMMAND  "${CMAKE_COMMAND}"
  160.     -D "input_file:STRING=${generated_cubin_file}"
  161.     -P "${CUDA_parse_cubin}"
  162.     )
  163. endif( build_cubin )