mirror of
https://github.com/pytorch/pytorch.git
synced 2025-10-20 21:14:14 +08:00
Migrate PyTorch to C++17 (#85969)
With CUDA-10.2 gone we can finally do it!
This PR mostly contains build system related changes, invasive functional ones are to be followed.
Among many expected tweaks to the build system, here are few unexpected ones:
- Force onnx_proto project to be updated to C++17 to avoid `duplicate symbols` error when compiled by gcc-7.5.0, as storage rule for `constexpr` changed in C++17, but gcc does not seem to follow it
- Do not use `std::apply` on CUDA but rely on the built-in variant, as it results in test failures when CUDA runtime picks host rather than device function when `std::apply` is invoked from CUDA code.
- `std::decay_t` -> `::std::decay_t` and `std::move`->`::std::move` as VC++ for some reason claims that `std` symbol is ambigious
- Disable use of `std::aligned_alloc` on Android, as its `libc++` does not implement it.
Some prerequisites:
- https://github.com/pytorch/pytorch/pull/89297
- https://github.com/pytorch/pytorch/pull/89605
- https://github.com/pytorch/pytorch/pull/90228
- https://github.com/pytorch/pytorch/pull/90389
- https://github.com/pytorch/pytorch/pull/90379
- https://github.com/pytorch/pytorch/pull/89570
- https://github.com/facebookincubator/gloo/pull/336
- https://github.com/facebookincubator/gloo/pull/343
- 919676fb32
Fixes https://github.com/pytorch/pytorch/issues/56055
Pull Request resolved: https://github.com/pytorch/pytorch/pull/85969
Approved by: https://github.com/ezyang, https://github.com/kulinseth
This commit is contained in:
committed by
PyTorch MergeBot
parent
f2d95765e4
commit
36ac095ff8
@ -20,6 +20,11 @@ do
|
|||||||
touch "$file" || true
|
touch "$file" || true
|
||||||
done < <(find /var/lib/jenkins/.gradle -type f -print0)
|
done < <(find /var/lib/jenkins/.gradle -type f -print0)
|
||||||
|
|
||||||
|
# Patch pocketfft (as Android does not have aligned_alloc even if compiled with c++17
|
||||||
|
if [ -f ~/workspace/third_party/pocketfft/pocketfft_hdronly.h ]; then
|
||||||
|
sed -i -e "s/#if __cplusplus >= 201703L/#if 0/" ~/workspace/third_party/pocketfft/pocketfft_hdronly.h
|
||||||
|
fi
|
||||||
|
|
||||||
export GRADLE_LOCAL_PROPERTIES=~/workspace/android/local.properties
|
export GRADLE_LOCAL_PROPERTIES=~/workspace/android/local.properties
|
||||||
rm -f $GRADLE_LOCAL_PROPERTIES
|
rm -f $GRADLE_LOCAL_PROPERTIES
|
||||||
echo "sdk.dir=/opt/android/sdk" >> $GRADLE_LOCAL_PROPERTIES
|
echo "sdk.dir=/opt/android/sdk" >> $GRADLE_LOCAL_PROPERTIES
|
||||||
|
@ -31,9 +31,9 @@ string(FIND "${CMAKE_CXX_FLAGS}" "-std=c++" env_cxx_standard)
|
|||||||
if(env_cxx_standard GREATER -1)
|
if(env_cxx_standard GREATER -1)
|
||||||
message(
|
message(
|
||||||
WARNING "C++ standard version definition detected in environment variable."
|
WARNING "C++ standard version definition detected in environment variable."
|
||||||
"PyTorch requires -std=c++14. Please remove -std=c++ settings in your environment.")
|
"PyTorch requires -std=c++17. Please remove -std=c++ settings in your environment.")
|
||||||
endif()
|
endif()
|
||||||
set(CMAKE_CXX_STANDARD 14 CACHE STRING "The C++ standard whose features are requested to build this target.")
|
set(CMAKE_CXX_STANDARD 17 CACHE STRING "The C++ standard whose features are requested to build this target.")
|
||||||
set(CMAKE_C_STANDARD 11 CACHE STRING "The C standard whose features are requested to build this target.")
|
set(CMAKE_C_STANDARD 11 CACHE STRING "The C standard whose features are requested to build this target.")
|
||||||
|
|
||||||
if(DEFINED GLIBCXX_USE_CXX11_ABI)
|
if(DEFINED GLIBCXX_USE_CXX11_ABI)
|
||||||
@ -884,7 +884,6 @@ if(NOT MSVC)
|
|||||||
append_cxx_flag_if_supported("-Wno-unused-private-field" CMAKE_CXX_FLAGS)
|
append_cxx_flag_if_supported("-Wno-unused-private-field" CMAKE_CXX_FLAGS)
|
||||||
append_cxx_flag_if_supported("-Wno-inconsistent-missing-override" CMAKE_CXX_FLAGS)
|
append_cxx_flag_if_supported("-Wno-inconsistent-missing-override" CMAKE_CXX_FLAGS)
|
||||||
append_cxx_flag_if_supported("-Wno-aligned-allocation-unavailable" CMAKE_CXX_FLAGS)
|
append_cxx_flag_if_supported("-Wno-aligned-allocation-unavailable" CMAKE_CXX_FLAGS)
|
||||||
append_cxx_flag_if_supported("-Wno-c++14-extensions" CMAKE_CXX_FLAGS)
|
|
||||||
append_cxx_flag_if_supported("-Wno-constexpr-not-const" CMAKE_CXX_FLAGS)
|
append_cxx_flag_if_supported("-Wno-constexpr-not-const" CMAKE_CXX_FLAGS)
|
||||||
append_cxx_flag_if_supported("-Wno-missing-braces" CMAKE_CXX_FLAGS)
|
append_cxx_flag_if_supported("-Wno-missing-braces" CMAKE_CXX_FLAGS)
|
||||||
append_cxx_flag_if_supported("-Wunused-lambda-capture" CMAKE_CXX_FLAGS)
|
append_cxx_flag_if_supported("-Wunused-lambda-capture" CMAKE_CXX_FLAGS)
|
||||||
@ -989,7 +988,6 @@ if(APPLE)
|
|||||||
endif()
|
endif()
|
||||||
append_cxx_flag_if_supported("-Wno-unused-private-field" CMAKE_CXX_FLAGS)
|
append_cxx_flag_if_supported("-Wno-unused-private-field" CMAKE_CXX_FLAGS)
|
||||||
append_cxx_flag_if_supported("-Wno-missing-braces" CMAKE_CXX_FLAGS)
|
append_cxx_flag_if_supported("-Wno-missing-braces" CMAKE_CXX_FLAGS)
|
||||||
append_cxx_flag_if_supported("-Wno-c++14-extensions" CMAKE_CXX_FLAGS)
|
|
||||||
append_cxx_flag_if_supported("-Wno-constexpr-not-const" CMAKE_CXX_FLAGS)
|
append_cxx_flag_if_supported("-Wno-constexpr-not-const" CMAKE_CXX_FLAGS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ endif()
|
|||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 14 CACHE STRING "The C++ standard whose features are requested to build this target.")
|
set(CMAKE_CXX_STANDARD 17 CACHE STRING "The C++ standard whose features are requested to build this target.")
|
||||||
set(CMAKE_VERBOSE_MAKEFILE ON)
|
set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||||
message(STATUS "ANDROID_STL:${ANDROID_STL}")
|
message(STATUS "ANDROID_STL:${ANDROID_STL}")
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.4.1)
|
cmake_minimum_required(VERSION 3.4.1)
|
||||||
project(pytorch_vision_jni CXX)
|
project(pytorch_vision_jni CXX)
|
||||||
set(CMAKE_CXX_STANDARD 14 CACHE STRING "The C++ standard whose features are requested to build this target.")
|
set(CMAKE_CXX_STANDARD 17 CACHE STRING "The C++ standard whose features are requested to build this target.")
|
||||||
set(CMAKE_VERBOSE_MAKEFILE ON)
|
set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||||
|
|
||||||
set(pytorch_vision_cpp_DIR ${CMAKE_CURRENT_LIST_DIR}/src/main/cpp)
|
set(pytorch_vision_cpp_DIR ${CMAKE_CURRENT_LIST_DIR}/src/main/cpp)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.4.1)
|
cmake_minimum_required(VERSION 3.4.1)
|
||||||
set(PROJECT_NAME pytorch_testapp_jni)
|
set(PROJECT_NAME pytorch_testapp_jni)
|
||||||
project(${PROJECT_NAME} CXX)
|
project(${PROJECT_NAME} CXX)
|
||||||
set(CMAKE_CXX_STANDARD 14 CACHE STRING "The C++ standard whose features are requested to build this target.")
|
set(CMAKE_CXX_STANDARD 17 CACHE STRING "The C++ standard whose features are requested to build this target.")
|
||||||
set(CMAKE_VERBOSE_MAKEFILE ON)
|
set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||||
|
|
||||||
set(build_DIR ${CMAKE_SOURCE_DIR}/build)
|
set(build_DIR ${CMAKE_SOURCE_DIR}/build)
|
||||||
|
@ -577,14 +577,16 @@ namespace impl {
|
|||||||
// Decay ReturnType to ReturnType_ so that if a reference gets returned, we actually store it by value
|
// Decay ReturnType to ReturnType_ so that if a reference gets returned, we actually store it by value
|
||||||
// and don't get a dangling reference. This is only required because some kernels still return `Tensor&`.
|
// and don't get a dangling reference. This is only required because some kernels still return `Tensor&`.
|
||||||
#ifdef __cpp_if_constexpr
|
#ifdef __cpp_if_constexpr
|
||||||
using ReturnType_ = std::decay_t<ReturnType>;
|
// [Note: VC++ and 'std': ambiguous symbol]
|
||||||
|
using ReturnType_ = ::std::decay_t<ReturnType>;
|
||||||
ReturnType_ output = call_functor_with_args_from_stack<KernelFunctor, AllowDeprecatedTypes>(functor, dispatchKeySet, stack);
|
ReturnType_ output = call_functor_with_args_from_stack<KernelFunctor, AllowDeprecatedTypes>(functor, dispatchKeySet, stack);
|
||||||
#else
|
#else
|
||||||
using ReturnType_ = std::decay_t<typename decltype(delay_check)::template type_identity<ReturnType>>;
|
using ReturnType_ = std::decay_t<typename decltype(delay_check)::template type_identity<ReturnType>>;
|
||||||
ReturnType_ output = call_functor_with_args_from_stack<KernelFunctor, AllowDeprecatedTypes>(functor, dispatchKeySet, delay_check(stack));
|
ReturnType_ output = call_functor_with_args_from_stack<KernelFunctor, AllowDeprecatedTypes>(functor, dispatchKeySet, delay_check(stack));
|
||||||
#endif
|
#endif
|
||||||
torch::jit::drop(*stack, num_inputs);
|
torch::jit::drop(*stack, num_inputs);
|
||||||
push_outputs<ReturnType_, AllowDeprecatedTypes>::call(std::move(output), stack);
|
// See note [ VC++ and 'std': ambiguous symbol]
|
||||||
|
push_outputs<ReturnType_, AllowDeprecatedTypes>::call(::std::move(output), stack);
|
||||||
#ifdef __cpp_if_constexpr
|
#ifdef __cpp_if_constexpr
|
||||||
} else {
|
} else {
|
||||||
#else
|
#else
|
||||||
|
@ -511,8 +511,8 @@ struct ApplyGridSample<scalar_t, 2, GridSamplerInterpolation::Bilinear,
|
|||||||
auto sw = n * e;
|
auto sw = n * e;
|
||||||
auto se = n * w;
|
auto se = n * w;
|
||||||
|
|
||||||
auto i_x_w = convert_to_int_of_same_size(x_w);
|
auto i_x_w = convert_to_int_of_same_size<scalar_t>(x_w);
|
||||||
auto i_y_n = convert_to_int_of_same_size(y_n);
|
auto i_y_n = convert_to_int_of_same_size<scalar_t>(y_n);
|
||||||
auto i_x_e = i_x_w + iVec(1);
|
auto i_x_e = i_x_w + iVec(1);
|
||||||
auto i_y_s = i_y_n + iVec(1);
|
auto i_y_s = i_y_n + iVec(1);
|
||||||
|
|
||||||
|
@ -1532,7 +1532,7 @@ NvrtcFunction jit_pwise_function(
|
|||||||
&program, code.c_str(), nullptr, 0, nullptr, nullptr));
|
&program, code.c_str(), nullptr, 0, nullptr, nullptr));
|
||||||
|
|
||||||
#ifdef USE_ROCM
|
#ifdef USE_ROCM
|
||||||
std::vector<const char*> args = {"--std=c++14"};
|
std::vector<const char*> args = {"--std=c++17"};
|
||||||
#else
|
#else
|
||||||
// Constructs nvrtc build arguments
|
// Constructs nvrtc build arguments
|
||||||
// CUDA 11.1 allows going directly to SASS (sm_) instead of PTX (compute_)
|
// CUDA 11.1 allows going directly to SASS (sm_) instead of PTX (compute_)
|
||||||
@ -1547,7 +1547,7 @@ NvrtcFunction jit_pwise_function(
|
|||||||
std::to_string(cuda_minor);
|
std::to_string(cuda_minor);
|
||||||
// NOLINTNEXTLINE(cppcoreguidelines-init-variables)
|
// NOLINTNEXTLINE(cppcoreguidelines-init-variables)
|
||||||
std::vector<const char*> args = {
|
std::vector<const char*> args = {
|
||||||
"--std=c++14", compute.c_str(), "-default-device"};
|
"--std=c++17", compute.c_str(), "-default-device"};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
|
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
|
||||||
project(c10 CXX)
|
project(c10 CXX)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 14 CACHE STRING "The C++ standard whose features are requested to build this target.")
|
set(CMAKE_CXX_STANDARD 17 CACHE STRING "The C++ standard whose features are requested to build this target.")
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
# Main build file for the C10 library.
|
# Main build file for the C10 library.
|
||||||
|
@ -140,7 +140,7 @@ using void_t = typename make_void<Ts...>::type;
|
|||||||
#define CUDA_HOST_DEVICE C10_HOST_DEVICE
|
#define CUDA_HOST_DEVICE C10_HOST_DEVICE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cpp_lib_apply
|
#if defined(__cpp_lib_apply) && !defined(__CUDA_ARCH__)
|
||||||
|
|
||||||
template <class F, class Tuple>
|
template <class F, class Tuple>
|
||||||
CUDA_HOST_DEVICE inline constexpr decltype(auto) apply(F&& f, Tuple&& t) {
|
CUDA_HOST_DEVICE inline constexpr decltype(auto) apply(F&& f, Tuple&& t) {
|
||||||
|
@ -1321,7 +1321,7 @@ if(USE_ROCM)
|
|||||||
list(APPEND HIP_CXX_FLAGS -Wno-implicit-int-float-conversion)
|
list(APPEND HIP_CXX_FLAGS -Wno-implicit-int-float-conversion)
|
||||||
list(APPEND HIP_CXX_FLAGS -DCAFFE2_USE_MIOPEN)
|
list(APPEND HIP_CXX_FLAGS -DCAFFE2_USE_MIOPEN)
|
||||||
list(APPEND HIP_CXX_FLAGS -DTHRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_HIP)
|
list(APPEND HIP_CXX_FLAGS -DTHRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_HIP)
|
||||||
list(APPEND HIP_CXX_FLAGS -std=c++14)
|
list(APPEND HIP_CXX_FLAGS -std=c++17)
|
||||||
add_definitions(-DROCM_VERSION=${ROCM_VERSION_DEV_INT})
|
add_definitions(-DROCM_VERSION=${ROCM_VERSION_DEV_INT})
|
||||||
add_definitions(-DTORCH_HIP_VERSION=${TORCH_HIP_VERSION})
|
add_definitions(-DTORCH_HIP_VERSION=${TORCH_HIP_VERSION})
|
||||||
message("TORCH_HIP_VERSION=${TORCH_HIP_VERSION} is added as a compiler defines")
|
message("TORCH_HIP_VERSION=${TORCH_HIP_VERSION} is added as a compiler defines")
|
||||||
@ -1585,6 +1585,9 @@ if(CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO AND NOT INTERN_DISABLE_ONNX)
|
|||||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/../caffe2/onnx/torch_ops")
|
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/../caffe2/onnx/torch_ops")
|
||||||
if(NOT USE_SYSTEM_ONNX)
|
if(NOT USE_SYSTEM_ONNX)
|
||||||
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../third_party/onnx EXCLUDE_FROM_ALL)
|
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../third_party/onnx EXCLUDE_FROM_ALL)
|
||||||
|
if(NOT MSVC)
|
||||||
|
set_target_properties(onnx_proto PROPERTIES CXX_STANDARD 17)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../third_party/foxi EXCLUDE_FROM_ALL)
|
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../third_party/foxi EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
@ -1687,7 +1690,7 @@ if(NOT INTERN_BUILD_MOBILE)
|
|||||||
string(APPEND CMAKE_CUDA_FLAGS " -Wno-deprecated-gpu-targets --expt-extended-lambda")
|
string(APPEND CMAKE_CUDA_FLAGS " -Wno-deprecated-gpu-targets --expt-extended-lambda")
|
||||||
|
|
||||||
if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
set(CMAKE_CXX_STANDARD 14 CACHE STRING "The C++ standard whose features are requested to build this target.")
|
set(CMAKE_CXX_STANDARD 17 CACHE STRING "The C++ standard whose features are requested to build this target.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# use cub in a safe manner, see:
|
# use cub in a safe manner, see:
|
||||||
|
@ -31,12 +31,14 @@ if(NOT SYSTEM_PROTOBUF)
|
|||||||
# https://github.com/protocolbuffers/protobuf/commit/0400cca3236de1ca303af38bf81eab332d042b7c
|
# https://github.com/protocolbuffers/protobuf/commit/0400cca3236de1ca303af38bf81eab332d042b7c
|
||||||
# changes PROTOBUF_CONSTEXPR to constexpr, which breaks windows
|
# changes PROTOBUF_CONSTEXPR to constexpr, which breaks windows
|
||||||
# build.
|
# build.
|
||||||
string(
|
if(MSVC)
|
||||||
REGEX REPLACE
|
string(
|
||||||
"static constexpr ([^ ]+) ([^ ]+) ="
|
REGEX REPLACE
|
||||||
"static \\1 const \\2 ="
|
"static constexpr ([^ ]+) ([^ ]+) ="
|
||||||
content
|
"static \\1 const \\2 ="
|
||||||
"${content}")
|
content
|
||||||
|
"${content}")
|
||||||
|
endif()
|
||||||
|
|
||||||
foreach(ns ${NAMESPACES})
|
foreach(ns ${NAMESPACES})
|
||||||
# Insert "const ::std::string& GetEmptyStringAlreadyInited();" within
|
# Insert "const ::std::string& GetEmptyStringAlreadyInited();" within
|
||||||
|
@ -407,7 +407,7 @@ endmacro()
|
|||||||
# Usage:
|
# Usage:
|
||||||
# torch_compile_options(lib_name)
|
# torch_compile_options(lib_name)
|
||||||
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 17)
|
||||||
set(private_compile_options "")
|
set(private_compile_options "")
|
||||||
|
|
||||||
# ---[ Check if warnings should be errors.
|
# ---[ Check if warnings should be errors.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.12)
|
cmake_minimum_required(VERSION 3.12)
|
||||||
project(functorch)
|
project(functorch)
|
||||||
set(CMAKE_CXX_STANDARD 14)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
include(CMakePackageConfigHelpers)
|
include(CMakePackageConfigHelpers)
|
||||||
|
@ -253,7 +253,7 @@
|
|||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
@ -312,7 +312,7 @@
|
|||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
@ -165,6 +165,11 @@ fi
|
|||||||
# Use-specified CMake arguments go last to allow overridding defaults
|
# Use-specified CMake arguments go last to allow overridding defaults
|
||||||
CMAKE_ARGS+=($@)
|
CMAKE_ARGS+=($@)
|
||||||
|
|
||||||
|
# Patch pocketfft (as Android does not have aligned_alloc even if compiled with c++17
|
||||||
|
if [ -f third_party/pocketfft/pocketfft_hdronly.h ]; then
|
||||||
|
sed -i -e "s/#if __cplusplus >= 201703L/#if 0/" third_party/pocketfft/pocketfft_hdronly.h
|
||||||
|
fi
|
||||||
|
|
||||||
# Now, actually build the Android target.
|
# Now, actually build the Android target.
|
||||||
BUILD_ROOT=${BUILD_ROOT:-"$CAFFE2_ROOT/build_android"}
|
BUILD_ROOT=${BUILD_ROOT:-"$CAFFE2_ROOT/build_android"}
|
||||||
INSTALL_PREFIX=${BUILD_ROOT}/install
|
INSTALL_PREFIX=${BUILD_ROOT}/install
|
||||||
|
@ -9,9 +9,9 @@ endif()
|
|||||||
find_package(Torch REQUIRED)
|
find_package(Torch REQUIRED)
|
||||||
|
|
||||||
add_library(custom_backend SHARED custom_backend.cpp)
|
add_library(custom_backend SHARED custom_backend.cpp)
|
||||||
set_property(TARGET custom_backend PROPERTY CXX_STANDARD 14)
|
set_property(TARGET custom_backend PROPERTY CXX_STANDARD 17)
|
||||||
target_link_libraries(custom_backend "${TORCH_LIBRARIES}")
|
target_link_libraries(custom_backend "${TORCH_LIBRARIES}")
|
||||||
|
|
||||||
add_executable(test_custom_backend test_custom_backend.cpp)
|
add_executable(test_custom_backend test_custom_backend.cpp)
|
||||||
set_property(TARGET test_custom_backend PROPERTY CXX_STANDARD 14)
|
set_property(TARGET test_custom_backend PROPERTY CXX_STANDARD 17)
|
||||||
target_link_libraries(test_custom_backend custom_backend)
|
target_link_libraries(test_custom_backend custom_backend)
|
||||||
|
@ -9,12 +9,12 @@ endif()
|
|||||||
find_package(Torch REQUIRED)
|
find_package(Torch REQUIRED)
|
||||||
|
|
||||||
add_library(custom_ops SHARED op.cpp)
|
add_library(custom_ops SHARED op.cpp)
|
||||||
set_property(TARGET custom_ops PROPERTY CXX_STANDARD 14)
|
set_property(TARGET custom_ops PROPERTY CXX_STANDARD 17)
|
||||||
|
|
||||||
target_compile_features(custom_ops PUBLIC cxx_range_for)
|
target_compile_features(custom_ops PUBLIC cxx_range_for)
|
||||||
target_link_libraries(custom_ops "${TORCH_LIBRARIES}")
|
target_link_libraries(custom_ops "${TORCH_LIBRARIES}")
|
||||||
target_compile_definitions(custom_ops PRIVATE custom_ops_EXPORTS)
|
target_compile_definitions(custom_ops PRIVATE custom_ops_EXPORTS)
|
||||||
|
|
||||||
add_executable(test_custom_ops test_custom_ops.cpp)
|
add_executable(test_custom_ops test_custom_ops.cpp)
|
||||||
set_property(TARGET test_custom_ops PROPERTY CXX_STANDARD 14)
|
set_property(TARGET test_custom_ops PROPERTY CXX_STANDARD 17)
|
||||||
target_link_libraries(test_custom_ops custom_ops)
|
target_link_libraries(test_custom_ops custom_ops)
|
||||||
|
@ -9,5 +9,5 @@ endif()
|
|||||||
find_package(Torch REQUIRED)
|
find_package(Torch REQUIRED)
|
||||||
|
|
||||||
add_executable(test_jit_hooks test_jit_hooks.cpp)
|
add_executable(test_jit_hooks test_jit_hooks.cpp)
|
||||||
set_property(TARGET test_jit_hooks PROPERTY CXX_STANDARD 14)
|
set_property(TARGET test_jit_hooks PROPERTY CXX_STANDARD 17)
|
||||||
target_link_libraries(test_jit_hooks "${TORCH_LIBRARIES}")
|
target_link_libraries(test_jit_hooks "${TORCH_LIBRARIES}")
|
||||||
|
@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.1)
|
|||||||
|
|
||||||
project(custom_build_project)
|
project(custom_build_project)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 14 CACHE STRING "The C++ standard whose features are requested to build this target.")
|
set(CMAKE_CXX_STANDARD 17 CACHE STRING "The C++ standard whose features are requested to build this target.")
|
||||||
|
|
||||||
# Find torch library
|
# Find torch library
|
||||||
find_package(Torch REQUIRED)
|
find_package(Torch REQUIRED)
|
||||||
|
@ -329,7 +329,7 @@ def get_warning_all_flag(warning_all=True):
|
|||||||
|
|
||||||
|
|
||||||
def cpp_flags():
|
def cpp_flags():
|
||||||
return "-std=c++14 -Wno-unused-variable"
|
return "-std=c++17 -Wno-unused-variable"
|
||||||
|
|
||||||
|
|
||||||
def optimization_flags():
|
def optimization_flags():
|
||||||
|
@ -1009,7 +1009,7 @@ std::pair<NvrtcFunction, std::string> nvrtcCompile(
|
|||||||
});
|
});
|
||||||
|
|
||||||
#ifdef USE_ROCM
|
#ifdef USE_ROCM
|
||||||
std::vector<const char*> args = {"--std=c++14"};
|
std::vector<const char*> args = {"--std=c++17"};
|
||||||
#if ROCM_VERSION >= 40200
|
#if ROCM_VERSION >= 40200
|
||||||
args.push_back("-hip-pch");
|
args.push_back("-hip-pch");
|
||||||
#endif
|
#endif
|
||||||
@ -1036,7 +1036,7 @@ std::pair<NvrtcFunction, std::string> nvrtcCompile(
|
|||||||
std::to_string(minor);
|
std::to_string(minor);
|
||||||
// NOLINTNEXTLINE(cppcoreguidelines-init-variables)
|
// NOLINTNEXTLINE(cppcoreguidelines-init-variables)
|
||||||
std::vector<const char*> args = {
|
std::vector<const char*> args = {
|
||||||
"--std=c++14", compute.c_str(), "-default-device"};
|
"--std=c++17", compute.c_str(), "-default-device"};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const bool disable_fma = isOptionDisabled(DisableOption::Fma);
|
const bool disable_fma = isOptionDisabled(DisableOption::Fma);
|
||||||
|
@ -263,7 +263,7 @@ static const std::string compile_string =
|
|||||||
#ifndef __PPC64__
|
#ifndef __PPC64__
|
||||||
// "-march=native "
|
// "-march=native "
|
||||||
#endif
|
#endif
|
||||||
"-std=c++14 -fPIC ${fopenmp} -shared \"${cpp_file}\" -o \"${so_file}\" -lm";
|
"-std=c++17 -fPIC ${fopenmp} -shared \"${cpp_file}\" -o \"${so_file}\" -lm";
|
||||||
#endif
|
#endif
|
||||||
static void runCompiler(
|
static void runCompiler(
|
||||||
const std::string& cpp_file,
|
const std::string& cpp_file,
|
||||||
|
@ -127,7 +127,7 @@ FusedKernelCUDA::FusedKernelCUDA(
|
|||||||
&program, code_.c_str(), nullptr, 0, nullptr, nullptr));
|
&program, code_.c_str(), nullptr, 0, nullptr, nullptr));
|
||||||
|
|
||||||
#if defined(USE_ROCM)
|
#if defined(USE_ROCM)
|
||||||
std::vector<const char*> args = {"--std=c++14"};
|
std::vector<const char*> args = {"--std=c++17"};
|
||||||
#if ROCM_VERSION >= 40200
|
#if ROCM_VERSION >= 40200
|
||||||
args.push_back("-hip-pch");
|
args.push_back("-hip-pch");
|
||||||
#endif
|
#endif
|
||||||
@ -148,7 +148,7 @@ FusedKernelCUDA::FusedKernelCUDA(
|
|||||||
std::to_string(major) + std::to_string(minor);
|
std::to_string(major) + std::to_string(minor);
|
||||||
// NOLINTNEXTLINE(cppcoreguidelines-init-variables)
|
// NOLINTNEXTLINE(cppcoreguidelines-init-variables)
|
||||||
const std::vector<const char*> args = {
|
const std::vector<const char*> args = {
|
||||||
"--std=c++14", compute.c_str(), "-default-device"};
|
"--std=c++17", compute.c_str(), "-default-device"};
|
||||||
#endif
|
#endif
|
||||||
const auto result =
|
const auto result =
|
||||||
nvrtc().nvrtcCompileProgram(program, args.size(), args.data());
|
nvrtc().nvrtcCompileProgram(program, args.size(), args.data());
|
||||||
|
@ -1314,7 +1314,7 @@ void CudaCodeGen::CompileToNVRTC(
|
|||||||
&program, code.c_str(), nullptr, 0, nullptr, nullptr));
|
&program, code.c_str(), nullptr, 0, nullptr, nullptr));
|
||||||
|
|
||||||
#if defined(USE_ROCM)
|
#if defined(USE_ROCM)
|
||||||
std::vector<const char*> args = {"--std=c++14"};
|
std::vector<const char*> args = {"--std=c++17"};
|
||||||
#if ROCM_VERSION >= 40200
|
#if ROCM_VERSION >= 40200
|
||||||
args.push_back("-hip-pch");
|
args.push_back("-hip-pch");
|
||||||
#endif
|
#endif
|
||||||
@ -1335,7 +1335,7 @@ void CudaCodeGen::CompileToNVRTC(
|
|||||||
std::to_string(major) + std::to_string(minor);
|
std::to_string(major) + std::to_string(minor);
|
||||||
// NOLINTNEXTLINE(cppcoreguidelines-init-variables)
|
// NOLINTNEXTLINE(cppcoreguidelines-init-variables)
|
||||||
const std::vector<const char*> args = {
|
const std::vector<const char*> args = {
|
||||||
"--std=c++14", compute.c_str(), "-default-device"};
|
"--std=c++17", compute.c_str(), "-default-device"};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
auto result = nvrtc().nvrtcCompileProgram(program, args.size(), args.data());
|
auto result = nvrtc().nvrtcCompileProgram(program, args.size(), args.data());
|
||||||
|
@ -29,7 +29,7 @@ target_include_directories(shm PUBLIC
|
|||||||
set_target_properties(shm PROPERTIES
|
set_target_properties(shm PROPERTIES
|
||||||
PREFIX "lib"
|
PREFIX "lib"
|
||||||
IMPORT_PREFIX "lib"
|
IMPORT_PREFIX "lib"
|
||||||
CXX_STANDARD 14)
|
CXX_STANDARD 17)
|
||||||
target_link_libraries(shm PUBLIC torch)
|
target_link_libraries(shm PUBLIC torch)
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
|
@ -431,7 +431,7 @@ class BuildExtension(build_ext, object):
|
|||||||
A custom :mod:`setuptools` build extension .
|
A custom :mod:`setuptools` build extension .
|
||||||
|
|
||||||
This :class:`setuptools.build_ext` subclass takes care of passing the
|
This :class:`setuptools.build_ext` subclass takes care of passing the
|
||||||
minimum required compiler flags (e.g. ``-std=c++14``) as well as mixed
|
minimum required compiler flags (e.g. ``-std=c++17``) as well as mixed
|
||||||
C++/CUDA compilation (and support for CUDA files in general).
|
C++/CUDA compilation (and support for CUDA files in general).
|
||||||
|
|
||||||
When using :class:`BuildExtension`, it is allowed to supply a dictionary
|
When using :class:`BuildExtension`, it is allowed to supply a dictionary
|
||||||
@ -535,12 +535,12 @@ class BuildExtension(build_ext, object):
|
|||||||
else:
|
else:
|
||||||
original_compile = self.compiler._compile
|
original_compile = self.compiler._compile
|
||||||
|
|
||||||
def append_std14_if_no_std_present(cflags) -> None:
|
def append_std17_if_no_std_present(cflags) -> None:
|
||||||
# NVCC does not allow multiple -std to be passed, so we avoid
|
# NVCC does not allow multiple -std to be passed, so we avoid
|
||||||
# overriding the option if the user explicitly passed it.
|
# overriding the option if the user explicitly passed it.
|
||||||
cpp_format_prefix = '/{}:' if self.compiler.compiler_type == 'msvc' else '-{}='
|
cpp_format_prefix = '/{}:' if self.compiler.compiler_type == 'msvc' else '-{}='
|
||||||
cpp_flag_prefix = cpp_format_prefix.format('std')
|
cpp_flag_prefix = cpp_format_prefix.format('std')
|
||||||
cpp_flag = cpp_flag_prefix + 'c++14'
|
cpp_flag = cpp_flag_prefix + 'c++17'
|
||||||
if not any(flag.startswith(cpp_flag_prefix) for flag in cflags):
|
if not any(flag.startswith(cpp_flag_prefix) for flag in cflags):
|
||||||
cflags.append(cpp_flag)
|
cflags.append(cpp_flag)
|
||||||
|
|
||||||
@ -585,7 +585,7 @@ class BuildExtension(build_ext, object):
|
|||||||
cflags = cflags['cxx']
|
cflags = cflags['cxx']
|
||||||
if IS_HIP_EXTENSION:
|
if IS_HIP_EXTENSION:
|
||||||
cflags = COMMON_HIP_FLAGS + cflags
|
cflags = COMMON_HIP_FLAGS + cflags
|
||||||
append_std14_if_no_std_present(cflags)
|
append_std17_if_no_std_present(cflags)
|
||||||
|
|
||||||
original_compile(obj, src, ext, cc_args, cflags, pp_opts)
|
original_compile(obj, src, ext, cc_args, cflags, pp_opts)
|
||||||
finally:
|
finally:
|
||||||
@ -634,7 +634,7 @@ class BuildExtension(build_ext, object):
|
|||||||
post_cflags = list(extra_postargs)
|
post_cflags = list(extra_postargs)
|
||||||
if IS_HIP_EXTENSION:
|
if IS_HIP_EXTENSION:
|
||||||
post_cflags = COMMON_HIP_FLAGS + post_cflags
|
post_cflags = COMMON_HIP_FLAGS + post_cflags
|
||||||
append_std14_if_no_std_present(post_cflags)
|
append_std17_if_no_std_present(post_cflags)
|
||||||
|
|
||||||
cuda_post_cflags = None
|
cuda_post_cflags = None
|
||||||
cuda_cflags = None
|
cuda_cflags = None
|
||||||
@ -649,7 +649,7 @@ class BuildExtension(build_ext, object):
|
|||||||
cuda_post_cflags = COMMON_HIP_FLAGS + COMMON_HIPCC_FLAGS + cuda_post_cflags
|
cuda_post_cflags = COMMON_HIP_FLAGS + COMMON_HIPCC_FLAGS + cuda_post_cflags
|
||||||
else:
|
else:
|
||||||
cuda_post_cflags = unix_cuda_flags(cuda_post_cflags)
|
cuda_post_cflags = unix_cuda_flags(cuda_post_cflags)
|
||||||
append_std14_if_no_std_present(cuda_post_cflags)
|
append_std17_if_no_std_present(cuda_post_cflags)
|
||||||
cuda_cflags = [shlex.quote(f) for f in cuda_cflags]
|
cuda_cflags = [shlex.quote(f) for f in cuda_cflags]
|
||||||
cuda_post_cflags = [shlex.quote(f) for f in cuda_post_cflags]
|
cuda_post_cflags = [shlex.quote(f) for f in cuda_post_cflags]
|
||||||
|
|
||||||
@ -785,7 +785,7 @@ class BuildExtension(build_ext, object):
|
|||||||
post_cflags = extra_postargs['cxx']
|
post_cflags = extra_postargs['cxx']
|
||||||
else:
|
else:
|
||||||
post_cflags = list(extra_postargs)
|
post_cflags = list(extra_postargs)
|
||||||
append_std14_if_no_std_present(post_cflags)
|
append_std17_if_no_std_present(post_cflags)
|
||||||
|
|
||||||
cuda_post_cflags = None
|
cuda_post_cflags = None
|
||||||
cuda_cflags = None
|
cuda_cflags = None
|
||||||
@ -1994,7 +1994,7 @@ def _write_ninja_file_to_build_library(path,
|
|||||||
cflags = common_cflags + COMMON_MSVC_FLAGS + extra_cflags
|
cflags = common_cflags + COMMON_MSVC_FLAGS + extra_cflags
|
||||||
cflags = _nt_quote_args(cflags)
|
cflags = _nt_quote_args(cflags)
|
||||||
else:
|
else:
|
||||||
cflags = common_cflags + ['-fPIC', '-std=c++14'] + extra_cflags
|
cflags = common_cflags + ['-fPIC', '-std=c++17'] + extra_cflags
|
||||||
|
|
||||||
if with_cuda and IS_HIP_EXTENSION:
|
if with_cuda and IS_HIP_EXTENSION:
|
||||||
cuda_flags = ['-DWITH_HIP'] + cflags + COMMON_HIP_FLAGS + COMMON_HIPCC_FLAGS
|
cuda_flags = ['-DWITH_HIP'] + cflags + COMMON_HIP_FLAGS + COMMON_HIPCC_FLAGS
|
||||||
@ -2013,7 +2013,7 @@ def _write_ninja_file_to_build_library(path,
|
|||||||
cuda_flags += ['--compiler-options', "'-fPIC'"]
|
cuda_flags += ['--compiler-options', "'-fPIC'"]
|
||||||
cuda_flags += extra_cuda_cflags
|
cuda_flags += extra_cuda_cflags
|
||||||
if not any(flag.startswith('-std=') for flag in cuda_flags):
|
if not any(flag.startswith('-std=') for flag in cuda_flags):
|
||||||
cuda_flags.append('-std=c++14')
|
cuda_flags.append('-std=c++17')
|
||||||
if os.getenv("CC") is not None:
|
if os.getenv("CC") is not None:
|
||||||
cuda_flags = ['-ccbin', os.getenv("CC")] + cuda_flags
|
cuda_flags = ['-ccbin', os.getenv("CC")] + cuda_flags
|
||||||
else:
|
else:
|
||||||
|
Reference in New Issue
Block a user