mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-06 12:20:52 +01:00
[cmake] clean up cmake/Utils.cmake (#47923)
Summary: Consolidate into cmake/public/utils.cmake Pull Request resolved: https://github.com/pytorch/pytorch/pull/47923 Reviewed By: samestep Differential Revision: D24955961 Pulled By: walterddr fbshipit-source-id: 9d5f6af2b353a8c6f6d521c841fd0989393755cd
This commit is contained in:
parent
cd4aa9c95c
commit
147a48fb27
|
|
@ -455,8 +455,6 @@ if(INTERN_BUILD_MOBILE AND NOT BUILD_CAFFE2_MOBILE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# ---[ Utils
|
# ---[ Utils
|
||||||
# TODO: merge the following 3 files into cmake/public/utils.cmake.
|
|
||||||
include(cmake/Utils.cmake)
|
|
||||||
include(cmake/public/utils.cmake)
|
include(cmake/public/utils.cmake)
|
||||||
|
|
||||||
# ---[ Version numbers for generated libraries
|
# ---[ Version numbers for generated libraries
|
||||||
|
|
|
||||||
|
|
@ -1,240 +0,0 @@
|
||||||
################################################################################################
|
|
||||||
# Exclude and prepend functionalities
|
|
||||||
function(exclude OUTPUT INPUT)
|
|
||||||
set(EXCLUDES ${ARGN})
|
|
||||||
foreach(EXCLUDE ${EXCLUDES})
|
|
||||||
list(REMOVE_ITEM INPUT "${EXCLUDE}")
|
|
||||||
endforeach()
|
|
||||||
set(${OUTPUT} ${INPUT} PARENT_SCOPE)
|
|
||||||
endfunction(exclude)
|
|
||||||
|
|
||||||
function(prepend OUTPUT PREPEND)
|
|
||||||
set(OUT "")
|
|
||||||
foreach(ITEM ${ARGN})
|
|
||||||
list(APPEND OUT "${PREPEND}${ITEM}")
|
|
||||||
endforeach()
|
|
||||||
set(${OUTPUT} ${OUT} PARENT_SCOPE)
|
|
||||||
endfunction(prepend)
|
|
||||||
|
|
||||||
|
|
||||||
################################################################################################
|
|
||||||
# Clears variables from list
|
|
||||||
# Usage:
|
|
||||||
# caffe_clear_vars(<variables_list>)
|
|
||||||
macro(caffe_clear_vars)
|
|
||||||
foreach(_var ${ARGN})
|
|
||||||
unset(${_var})
|
|
||||||
endforeach()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
################################################################################################
|
|
||||||
# Prints list element per line
|
|
||||||
# Usage:
|
|
||||||
# caffe_print_list(<list>)
|
|
||||||
function(caffe_print_list)
|
|
||||||
foreach(e ${ARGN})
|
|
||||||
message(STATUS ${e})
|
|
||||||
endforeach()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
################################################################################################
|
|
||||||
# Reads set of version defines from the header file
|
|
||||||
# Usage:
|
|
||||||
# caffe_parse_header(<file> <define1> <define2> <define3> ..)
|
|
||||||
macro(caffe_parse_header FILENAME FILE_VAR)
|
|
||||||
set(vars_regex "")
|
|
||||||
set(__parnet_scope OFF)
|
|
||||||
set(__add_cache OFF)
|
|
||||||
foreach(name ${ARGN})
|
|
||||||
if("${name}" STREQUAL "PARENT_SCOPE")
|
|
||||||
set(__parnet_scope ON)
|
|
||||||
elseif("${name}" STREQUAL "CACHE")
|
|
||||||
set(__add_cache ON)
|
|
||||||
elseif(vars_regex)
|
|
||||||
set(vars_regex "${vars_regex}|${name}")
|
|
||||||
else()
|
|
||||||
set(vars_regex "${name}")
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
if(EXISTS "${FILENAME}")
|
|
||||||
file(STRINGS "${FILENAME}" ${FILE_VAR} REGEX "#define[ \t]+(${vars_regex})[ \t]+[0-9]+" )
|
|
||||||
else()
|
|
||||||
unset(${FILE_VAR})
|
|
||||||
endif()
|
|
||||||
foreach(name ${ARGN})
|
|
||||||
if(NOT "${name}" STREQUAL "PARENT_SCOPE" AND NOT "${name}" STREQUAL "CACHE")
|
|
||||||
if(${FILE_VAR})
|
|
||||||
if(${FILE_VAR} MATCHES ".+[ \t]${name}[ \t]+([0-9]+).*")
|
|
||||||
string(REGEX REPLACE ".+[ \t]${name}[ \t]+([0-9]+).*" "\\1" ${name} "${${FILE_VAR}}")
|
|
||||||
else()
|
|
||||||
set(${name} "")
|
|
||||||
endif()
|
|
||||||
if(__add_cache)
|
|
||||||
set(${name} ${${name}} CACHE INTERNAL "${name} parsed from ${FILENAME}" FORCE)
|
|
||||||
elseif(__parnet_scope)
|
|
||||||
set(${name} "${${name}}" PARENT_SCOPE)
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
unset(${name} CACHE)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
################################################################################################
|
|
||||||
# Reads single version define from the header file and parses it
|
|
||||||
# Usage:
|
|
||||||
# caffe_parse_header_single_define(<library_name> <file> <define_name>)
|
|
||||||
function(caffe_parse_header_single_define LIBNAME HDR_PATH VARNAME)
|
|
||||||
set(${LIBNAME}_H "")
|
|
||||||
if(EXISTS "${HDR_PATH}")
|
|
||||||
file(STRINGS "${HDR_PATH}" ${LIBNAME}_H REGEX "^#define[ \t]+${VARNAME}[ \t]+\"[^\"]*\".*$" LIMIT_COUNT 1)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(${LIBNAME}_H)
|
|
||||||
string(REGEX REPLACE "^.*[ \t]${VARNAME}[ \t]+\"([0-9]+).*$" "\\1" ${LIBNAME}_VERSION_MAJOR "${${LIBNAME}_H}")
|
|
||||||
string(REGEX REPLACE "^.*[ \t]${VARNAME}[ \t]+\"[0-9]+\\.([0-9]+).*$" "\\1" ${LIBNAME}_VERSION_MINOR "${${LIBNAME}_H}")
|
|
||||||
string(REGEX REPLACE "^.*[ \t]${VARNAME}[ \t]+\"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" ${LIBNAME}_VERSION_PATCH "${${LIBNAME}_H}")
|
|
||||||
set(${LIBNAME}_VERSION_MAJOR ${${LIBNAME}_VERSION_MAJOR} ${ARGN} PARENT_SCOPE)
|
|
||||||
set(${LIBNAME}_VERSION_MINOR ${${LIBNAME}_VERSION_MINOR} ${ARGN} PARENT_SCOPE)
|
|
||||||
set(${LIBNAME}_VERSION_PATCH ${${LIBNAME}_VERSION_PATCH} ${ARGN} PARENT_SCOPE)
|
|
||||||
set(${LIBNAME}_VERSION_STRING "${${LIBNAME}_VERSION_MAJOR}.${${LIBNAME}_VERSION_MINOR}.${${LIBNAME}_VERSION_PATCH}" PARENT_SCOPE)
|
|
||||||
|
|
||||||
# append a TWEAK version if it exists:
|
|
||||||
set(${LIBNAME}_VERSION_TWEAK "")
|
|
||||||
if("${${LIBNAME}_H}" MATCHES "^.*[ \t]${VARNAME}[ \t]+\"[0-9]+\\.[0-9]+\\.[0-9]+\\.([0-9]+).*$")
|
|
||||||
set(${LIBNAME}_VERSION_TWEAK "${CMAKE_MATCH_1}" ${ARGN} PARENT_SCOPE)
|
|
||||||
endif()
|
|
||||||
if(${LIBNAME}_VERSION_TWEAK)
|
|
||||||
set(${LIBNAME}_VERSION_STRING "${${LIBNAME}_VERSION_STRING}.${${LIBNAME}_VERSION_TWEAK}" ${ARGN} PARENT_SCOPE)
|
|
||||||
else()
|
|
||||||
set(${LIBNAME}_VERSION_STRING "${${LIBNAME}_VERSION_STRING}" ${ARGN} PARENT_SCOPE)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
################################################################################################
|
|
||||||
# Parses a version string that might have values beyond major, minor, and patch
|
|
||||||
# and set version variables for the library.
|
|
||||||
# Usage:
|
|
||||||
# caffe2_parse_version_str(<library_name> <version_string>)
|
|
||||||
function(caffe2_parse_version_str LIBNAME VERSIONSTR)
|
|
||||||
string(REGEX REPLACE "^([0-9]+).*$" "\\1" ${LIBNAME}_VERSION_MAJOR "${VERSIONSTR}")
|
|
||||||
string(REGEX REPLACE "^[0-9]+\\.([0-9]+).*$" "\\1" ${LIBNAME}_VERSION_MINOR "${VERSIONSTR}")
|
|
||||||
string(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" ${LIBNAME}_VERSION_PATCH "${VERSIONSTR}")
|
|
||||||
set(${LIBNAME}_VERSION_MAJOR ${${LIBNAME}_VERSION_MAJOR} ${ARGN} PARENT_SCOPE)
|
|
||||||
set(${LIBNAME}_VERSION_MINOR ${${LIBNAME}_VERSION_MINOR} ${ARGN} PARENT_SCOPE)
|
|
||||||
set(${LIBNAME}_VERSION_PATCH ${${LIBNAME}_VERSION_PATCH} ${ARGN} PARENT_SCOPE)
|
|
||||||
set(${LIBNAME}_VERSION "${${LIBNAME}_VERSION_MAJOR}.${${LIBNAME}_VERSION_MINOR}.${${LIBNAME}_VERSION_PATCH}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
###
|
|
||||||
# Removes common indentation from a block of text to produce code suitable for
|
|
||||||
# setting to `python -c`, or using with pycmd. This allows multiline code to be
|
|
||||||
# nested nicely in the surrounding code structure.
|
|
||||||
#
|
|
||||||
# This function respsects PYTHON_EXECUTABLE if it defined, otherwise it uses
|
|
||||||
# `python` and hopes for the best. An error will be thrown if it is not found.
|
|
||||||
#
|
|
||||||
# Args:
|
|
||||||
# outvar : variable that will hold the stdout of the python command
|
|
||||||
# text : text to remove indentation from
|
|
||||||
#
|
|
||||||
function(dedent outvar text)
|
|
||||||
# Use PYTHON_EXECUTABLE if it is defined, otherwise default to python
|
|
||||||
if("${PYTHON_EXECUTABLE}" STREQUAL "")
|
|
||||||
set(_python_exe "python")
|
|
||||||
else()
|
|
||||||
set(_python_exe "${PYTHON_EXECUTABLE}")
|
|
||||||
endif()
|
|
||||||
set(_fixup_cmd "import sys; from textwrap import dedent; print(dedent(sys.stdin.read()))")
|
|
||||||
file(WRITE "${CMAKE_BINARY_DIR}/indented.txt" "${text}")
|
|
||||||
execute_process(
|
|
||||||
COMMAND "${_python_exe}" -c "${_fixup_cmd}"
|
|
||||||
INPUT_FILE "${CMAKE_BINARY_DIR}/indented.txt"
|
|
||||||
RESULT_VARIABLE _dedent_exitcode
|
|
||||||
OUTPUT_VARIABLE _dedent_text)
|
|
||||||
if(NOT _dedent_exitcode EQUAL 0)
|
|
||||||
message(ERROR " Failed to remove indentation from: \n\"\"\"\n${text}\n\"\"\"
|
|
||||||
Python dedent failed with error code: ${_dedent_exitcode}")
|
|
||||||
message(FATAL_ERROR " Python dedent failed with error code: ${_dedent_exitcode}")
|
|
||||||
endif()
|
|
||||||
# Remove supurflous newlines (artifacts of print)
|
|
||||||
string(STRIP "${_dedent_text}" _dedent_text)
|
|
||||||
set(${outvar} "${_dedent_text}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
|
|
||||||
function(pycmd_no_exit outvar exitcode cmd)
|
|
||||||
# Use PYTHON_EXECUTABLE if it is defined, otherwise default to python
|
|
||||||
if("${PYTHON_EXECUTABLE}" STREQUAL "")
|
|
||||||
set(_python_exe "python")
|
|
||||||
else()
|
|
||||||
set(_python_exe "${PYTHON_EXECUTABLE}")
|
|
||||||
endif()
|
|
||||||
# run the actual command
|
|
||||||
execute_process(
|
|
||||||
COMMAND "${_python_exe}" -c "${cmd}"
|
|
||||||
RESULT_VARIABLE _exitcode
|
|
||||||
OUTPUT_VARIABLE _output)
|
|
||||||
# Remove supurflous newlines (artifacts of print)
|
|
||||||
string(STRIP "${_output}" _output)
|
|
||||||
set(${outvar} "${_output}" PARENT_SCOPE)
|
|
||||||
set(${exitcode} "${_exitcode}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
|
|
||||||
###
|
|
||||||
# Helper function to run `python -c "<cmd>"` and capture the results of stdout
|
|
||||||
#
|
|
||||||
# Runs a python command and populates an outvar with the result of stdout.
|
|
||||||
# Common indentation in the text of `cmd` is removed before the command is
|
|
||||||
# executed, so the caller does not need to worry about indentation issues.
|
|
||||||
#
|
|
||||||
# This function respsects PYTHON_EXECUTABLE if it defined, otherwise it uses
|
|
||||||
# `python` and hopes for the best. An error will be thrown if it is not found.
|
|
||||||
#
|
|
||||||
# Args:
|
|
||||||
# outvar : variable that will hold the stdout of the python command
|
|
||||||
# cmd : text representing a (possibly multiline) block of python code
|
|
||||||
#
|
|
||||||
function(pycmd outvar cmd)
|
|
||||||
dedent(_dedent_cmd "${cmd}")
|
|
||||||
pycmd_no_exit(_output _exitcode "${_dedent_cmd}")
|
|
||||||
|
|
||||||
if(NOT _exitcode EQUAL 0)
|
|
||||||
message(ERROR " Failed when running python code: \"\"\"\n${_dedent_cmd}\n\"\"\"")
|
|
||||||
message(FATAL_ERROR " Python command failed with error code: ${_exitcode}")
|
|
||||||
endif()
|
|
||||||
# Remove supurflous newlines (artifacts of print)
|
|
||||||
string(STRIP "${_output}" _output)
|
|
||||||
set(${outvar} "${_output}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
###
|
|
||||||
# Helper function to print out everything that cmake knows about a target
|
|
||||||
#
|
|
||||||
# Copied from https://stackoverflow.com/questions/32183975/how-to-print-all-the-properties-of-a-target-in-cmake
|
|
||||||
# This isn't called anywhere, but it's very useful when debugging cmake
|
|
||||||
# NOTE: This doesn't work for INTERFACE_LIBRARY or INTERFACE_LINK_LIBRARY targets
|
|
||||||
|
|
||||||
function(print_target_properties tgt)
|
|
||||||
if(NOT TARGET ${tgt})
|
|
||||||
message("There is no target named '${tgt}'")
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Get a list of all cmake properties TODO cache this lazily somehow
|
|
||||||
execute_process(COMMAND cmake --help-property-list OUTPUT_VARIABLE CMAKE_PROPERTY_LIST)
|
|
||||||
string(REGEX REPLACE ";" "\\\\;" CMAKE_PROPERTY_LIST "${CMAKE_PROPERTY_LIST}")
|
|
||||||
string(REGEX REPLACE "\n" ";" CMAKE_PROPERTY_LIST "${CMAKE_PROPERTY_LIST}")
|
|
||||||
|
|
||||||
foreach(prop ${CMAKE_PROPERTY_LIST})
|
|
||||||
string(REPLACE "<CONFIG>" "${CMAKE_BUILD_TYPE}" prop ${prop})
|
|
||||||
get_property(propval TARGET ${tgt} PROPERTY ${prop} SET)
|
|
||||||
if(propval)
|
|
||||||
get_target_property(propval ${tgt} ${prop})
|
|
||||||
message("${tgt} ${prop} = ${propval}")
|
|
||||||
endif()
|
|
||||||
endforeach(prop)
|
|
||||||
endfunction(print_target_properties)
|
|
||||||
|
|
@ -1,3 +1,185 @@
|
||||||
|
################################################################################################
|
||||||
|
# Exclude and prepend functionalities
|
||||||
|
function(exclude OUTPUT INPUT)
|
||||||
|
set(EXCLUDES ${ARGN})
|
||||||
|
foreach(EXCLUDE ${EXCLUDES})
|
||||||
|
list(REMOVE_ITEM INPUT "${EXCLUDE}")
|
||||||
|
endforeach()
|
||||||
|
set(${OUTPUT} ${INPUT} PARENT_SCOPE)
|
||||||
|
endfunction(exclude)
|
||||||
|
|
||||||
|
function(prepend OUTPUT PREPEND)
|
||||||
|
set(OUT "")
|
||||||
|
foreach(ITEM ${ARGN})
|
||||||
|
list(APPEND OUT "${PREPEND}${ITEM}")
|
||||||
|
endforeach()
|
||||||
|
set(${OUTPUT} ${OUT} PARENT_SCOPE)
|
||||||
|
endfunction(prepend)
|
||||||
|
|
||||||
|
|
||||||
|
################################################################################################
|
||||||
|
# Clears variables from list
|
||||||
|
# Usage:
|
||||||
|
# caffe_clear_vars(<variables_list>)
|
||||||
|
macro(caffe_clear_vars)
|
||||||
|
foreach(_var ${ARGN})
|
||||||
|
unset(${_var})
|
||||||
|
endforeach()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
################################################################################################
|
||||||
|
# Prints list element per line
|
||||||
|
# Usage:
|
||||||
|
# caffe_print_list(<list>)
|
||||||
|
function(caffe_print_list)
|
||||||
|
foreach(e ${ARGN})
|
||||||
|
message(STATUS ${e})
|
||||||
|
endforeach()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
################################################################################################
|
||||||
|
# Reads set of version defines from the header file
|
||||||
|
# Usage:
|
||||||
|
# caffe_parse_header(<file> <define1> <define2> <define3> ..)
|
||||||
|
macro(caffe_parse_header FILENAME FILE_VAR)
|
||||||
|
set(vars_regex "")
|
||||||
|
set(__parnet_scope OFF)
|
||||||
|
set(__add_cache OFF)
|
||||||
|
foreach(name ${ARGN})
|
||||||
|
if("${name}" STREQUAL "PARENT_SCOPE")
|
||||||
|
set(__parnet_scope ON)
|
||||||
|
elseif("${name}" STREQUAL "CACHE")
|
||||||
|
set(__add_cache ON)
|
||||||
|
elseif(vars_regex)
|
||||||
|
set(vars_regex "${vars_regex}|${name}")
|
||||||
|
else()
|
||||||
|
set(vars_regex "${name}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
if(EXISTS "${FILENAME}")
|
||||||
|
file(STRINGS "${FILENAME}" ${FILE_VAR} REGEX "#define[ \t]+(${vars_regex})[ \t]+[0-9]+" )
|
||||||
|
else()
|
||||||
|
unset(${FILE_VAR})
|
||||||
|
endif()
|
||||||
|
foreach(name ${ARGN})
|
||||||
|
if(NOT "${name}" STREQUAL "PARENT_SCOPE" AND NOT "${name}" STREQUAL "CACHE")
|
||||||
|
if(${FILE_VAR})
|
||||||
|
if(${FILE_VAR} MATCHES ".+[ \t]${name}[ \t]+([0-9]+).*")
|
||||||
|
string(REGEX REPLACE ".+[ \t]${name}[ \t]+([0-9]+).*" "\\1" ${name} "${${FILE_VAR}}")
|
||||||
|
else()
|
||||||
|
set(${name} "")
|
||||||
|
endif()
|
||||||
|
if(__add_cache)
|
||||||
|
set(${name} ${${name}} CACHE INTERNAL "${name} parsed from ${FILENAME}" FORCE)
|
||||||
|
elseif(__parnet_scope)
|
||||||
|
set(${name} "${${name}}" PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
unset(${name} CACHE)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
################################################################################################
|
||||||
|
# Parses a version string that might have values beyond major, minor, and patch
|
||||||
|
# and set version variables for the library.
|
||||||
|
# Usage:
|
||||||
|
# caffe2_parse_version_str(<library_name> <version_string>)
|
||||||
|
function(caffe2_parse_version_str LIBNAME VERSIONSTR)
|
||||||
|
string(REGEX REPLACE "^([0-9]+).*$" "\\1" ${LIBNAME}_VERSION_MAJOR "${VERSIONSTR}")
|
||||||
|
string(REGEX REPLACE "^[0-9]+\\.([0-9]+).*$" "\\1" ${LIBNAME}_VERSION_MINOR "${VERSIONSTR}")
|
||||||
|
string(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" ${LIBNAME}_VERSION_PATCH "${VERSIONSTR}")
|
||||||
|
set(${LIBNAME}_VERSION_MAJOR ${${LIBNAME}_VERSION_MAJOR} ${ARGN} PARENT_SCOPE)
|
||||||
|
set(${LIBNAME}_VERSION_MINOR ${${LIBNAME}_VERSION_MINOR} ${ARGN} PARENT_SCOPE)
|
||||||
|
set(${LIBNAME}_VERSION_PATCH ${${LIBNAME}_VERSION_PATCH} ${ARGN} PARENT_SCOPE)
|
||||||
|
set(${LIBNAME}_VERSION "${${LIBNAME}_VERSION_MAJOR}.${${LIBNAME}_VERSION_MINOR}.${${LIBNAME}_VERSION_PATCH}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
###
|
||||||
|
# Removes common indentation from a block of text to produce code suitable for
|
||||||
|
# setting to `python -c`, or using with pycmd. This allows multiline code to be
|
||||||
|
# nested nicely in the surrounding code structure.
|
||||||
|
#
|
||||||
|
# This function respsects PYTHON_EXECUTABLE if it defined, otherwise it uses
|
||||||
|
# `python` and hopes for the best. An error will be thrown if it is not found.
|
||||||
|
#
|
||||||
|
# Args:
|
||||||
|
# outvar : variable that will hold the stdout of the python command
|
||||||
|
# text : text to remove indentation from
|
||||||
|
#
|
||||||
|
function(dedent outvar text)
|
||||||
|
# Use PYTHON_EXECUTABLE if it is defined, otherwise default to python
|
||||||
|
if("${PYTHON_EXECUTABLE}" STREQUAL "")
|
||||||
|
set(_python_exe "python")
|
||||||
|
else()
|
||||||
|
set(_python_exe "${PYTHON_EXECUTABLE}")
|
||||||
|
endif()
|
||||||
|
set(_fixup_cmd "import sys; from textwrap import dedent; print(dedent(sys.stdin.read()))")
|
||||||
|
file(WRITE "${CMAKE_BINARY_DIR}/indented.txt" "${text}")
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${_python_exe}" -c "${_fixup_cmd}"
|
||||||
|
INPUT_FILE "${CMAKE_BINARY_DIR}/indented.txt"
|
||||||
|
RESULT_VARIABLE _dedent_exitcode
|
||||||
|
OUTPUT_VARIABLE _dedent_text)
|
||||||
|
if(NOT _dedent_exitcode EQUAL 0)
|
||||||
|
message(ERROR " Failed to remove indentation from: \n\"\"\"\n${text}\n\"\"\"
|
||||||
|
Python dedent failed with error code: ${_dedent_exitcode}")
|
||||||
|
message(FATAL_ERROR " Python dedent failed with error code: ${_dedent_exitcode}")
|
||||||
|
endif()
|
||||||
|
# Remove supurflous newlines (artifacts of print)
|
||||||
|
string(STRIP "${_dedent_text}" _dedent_text)
|
||||||
|
set(${outvar} "${_dedent_text}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
|
||||||
|
function(pycmd_no_exit outvar exitcode cmd)
|
||||||
|
# Use PYTHON_EXECUTABLE if it is defined, otherwise default to python
|
||||||
|
if("${PYTHON_EXECUTABLE}" STREQUAL "")
|
||||||
|
set(_python_exe "python")
|
||||||
|
else()
|
||||||
|
set(_python_exe "${PYTHON_EXECUTABLE}")
|
||||||
|
endif()
|
||||||
|
# run the actual command
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${_python_exe}" -c "${cmd}"
|
||||||
|
RESULT_VARIABLE _exitcode
|
||||||
|
OUTPUT_VARIABLE _output)
|
||||||
|
# Remove supurflous newlines (artifacts of print)
|
||||||
|
string(STRIP "${_output}" _output)
|
||||||
|
set(${outvar} "${_output}" PARENT_SCOPE)
|
||||||
|
set(${exitcode} "${_exitcode}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
|
||||||
|
###
|
||||||
|
# Helper function to run `python -c "<cmd>"` and capture the results of stdout
|
||||||
|
#
|
||||||
|
# Runs a python command and populates an outvar with the result of stdout.
|
||||||
|
# Common indentation in the text of `cmd` is removed before the command is
|
||||||
|
# executed, so the caller does not need to worry about indentation issues.
|
||||||
|
#
|
||||||
|
# This function respsects PYTHON_EXECUTABLE if it defined, otherwise it uses
|
||||||
|
# `python` and hopes for the best. An error will be thrown if it is not found.
|
||||||
|
#
|
||||||
|
# Args:
|
||||||
|
# outvar : variable that will hold the stdout of the python command
|
||||||
|
# cmd : text representing a (possibly multiline) block of python code
|
||||||
|
#
|
||||||
|
function(pycmd outvar cmd)
|
||||||
|
dedent(_dedent_cmd "${cmd}")
|
||||||
|
pycmd_no_exit(_output _exitcode "${_dedent_cmd}")
|
||||||
|
|
||||||
|
if(NOT _exitcode EQUAL 0)
|
||||||
|
message(ERROR " Failed when running python code: \"\"\"\n${_dedent_cmd}\n\"\"\"")
|
||||||
|
message(FATAL_ERROR " Python command failed with error code: ${_exitcode}")
|
||||||
|
endif()
|
||||||
|
# Remove supurflous newlines (artifacts of print)
|
||||||
|
string(STRIP "${_output}" _output)
|
||||||
|
set(${outvar} "${_output}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Macro to update cached options.
|
# Macro to update cached options.
|
||||||
macro(caffe2_update_option variable value)
|
macro(caffe2_update_option variable value)
|
||||||
|
|
@ -156,21 +338,6 @@ function(caffe2_hip_binary_target target_name_or_src)
|
||||||
target_include_directories(${__target} PRIVATE ${Caffe2_HIP_INCLUDE})
|
target_include_directories(${__target} PRIVATE ${Caffe2_HIP_INCLUDE})
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
# Multiplex between loading executables for CUDA versus HIP (AMD Software Stack).
|
|
||||||
# Usage:
|
|
||||||
# torch_cuda_based_add_executable(cuda_target)
|
|
||||||
#
|
|
||||||
macro(torch_cuda_based_add_executable cuda_target)
|
|
||||||
if(USE_ROCM)
|
|
||||||
hip_add_executable(${cuda_target} ${ARGN})
|
|
||||||
elseif(USE_CUDA)
|
|
||||||
cuda_add_executable(${cuda_target} ${ARGN})
|
|
||||||
else()
|
|
||||||
|
|
||||||
endif()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Multiplex between adding libraries for CUDA versus HIP (AMD Software Stack).
|
# Multiplex between adding libraries for CUDA versus HIP (AMD Software Stack).
|
||||||
|
|
@ -222,6 +389,11 @@ endmacro()
|
||||||
function(torch_compile_options libname)
|
function(torch_compile_options libname)
|
||||||
set_property(TARGET ${libname} PROPERTY CXX_STANDARD 14)
|
set_property(TARGET ${libname} PROPERTY CXX_STANDARD 14)
|
||||||
|
|
||||||
|
# ---[ Check if warnings should be errors.
|
||||||
|
if(WERROR)
|
||||||
|
target_compile_options(${libname} PRIVATE -Werror)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(NOT INTERN_BUILD_MOBILE OR NOT BUILD_CAFFE2_MOBILE)
|
if(NOT INTERN_BUILD_MOBILE OR NOT BUILD_CAFFE2_MOBILE)
|
||||||
# until they can be unified, keep these lists synced with setup.py
|
# until they can be unified, keep these lists synced with setup.py
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
|
|
@ -274,7 +446,7 @@ function(torch_compile_options libname)
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
elseif(WERROR)
|
elseif(WERROR)
|
||||||
target_compile_options(${libname} PRIVATE -Werror -Wno-strict-overflow)
|
target_compile_options(${libname} PRIVATE -Wno-strict-overflow)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
@ -292,11 +464,6 @@ function(torch_compile_options libname)
|
||||||
# Use -O2 for release builds (-O3 doesn't improve perf, and -Os results in perf regression)
|
# Use -O2 for release builds (-O3 doesn't improve perf, and -Os results in perf regression)
|
||||||
target_compile_options(${libname} PRIVATE "$<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:-O2>")
|
target_compile_options(${libname} PRIVATE "$<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:-O2>")
|
||||||
|
|
||||||
# ---[ Check if warnings should be errors.
|
|
||||||
# TODO: Dedupe with WERROR check above
|
|
||||||
if(WERROR)
|
|
||||||
target_compile_options(${libname} PRIVATE -Werror)
|
|
||||||
endif()
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -317,3 +484,4 @@ function(torch_set_target_props libname)
|
||||||
set_target_properties(${libname} PROPERTIES STATIC_LIBRARY_FLAGS_DEBUG "/NODEFAULTLIB:${VCOMP_LIB}d")
|
set_target_properties(${libname} PROPERTIES STATIC_LIBRARY_FLAGS_DEBUG "/NODEFAULTLIB:${VCOMP_LIB}d")
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user