github.com/searKing/golang/go@v1.2.117/os/signal/cgo/include/boost/predef/compiler/nvcc.h (about)

     1  /*
     2  Copyright Benjamin Worpitz 2018
     3  Distributed under the Boost Software License, Version 1.0.
     4  (See accompanying file LICENSE_1_0.txt or copy at
     5  http://www.boost.org/LICENSE_1_0.txt)
     6  */
     7  
     8  #ifndef BOOST_PREDEF_COMPILER_NVCC_H
     9  #define BOOST_PREDEF_COMPILER_NVCC_H
    10  
    11  #include <boost/predef/version_number.h>
    12  #include <boost/predef/make.h>
    13  
    14  /* tag::reference[]
    15  = `BOOST_COMP_NVCC`
    16  
    17  https://en.wikipedia.org/wiki/NVIDIA_CUDA_Compiler[NVCC] compiler.
    18  Version number available as major, minor, and patch beginning with version 7.5.
    19  
    20  [options="header"]
    21  |===
    22  | {predef_symbol} | {predef_version}
    23  
    24  | `+__NVCC__+` | {predef_detection}
    25  
    26  | `+__CUDACC_VER_MAJOR__+`, `+__CUDACC_VER_MINOR__+`, `+__CUDACC_VER_BUILD__+` | V.R.P
    27  |===
    28  */ // end::reference[]
    29  
    30  #define BOOST_COMP_NVCC BOOST_VERSION_NUMBER_NOT_AVAILABLE
    31  
    32  #if defined(__NVCC__)
    33  #   if !defined(__CUDACC_VER_MAJOR__) || !defined(__CUDACC_VER_MINOR__) || !defined(__CUDACC_VER_BUILD__)
    34  #       define BOOST_COMP_NVCC_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
    35  #   else
    36  #       define BOOST_COMP_NVCC_DETECTION BOOST_VERSION_NUMBER(__CUDACC_VER_MAJOR__, __CUDACC_VER_MINOR__, __CUDACC_VER_BUILD__)
    37  #   endif
    38  #endif
    39  
    40  #ifdef BOOST_COMP_NVCC_DETECTION
    41  /*
    42  Always define BOOST_COMP_NVCC instead of BOOST_COMP_NVCC_EMULATED
    43  The nvcc compilation process is somewhat special as can be read here:
    44  https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#cuda-compilation-trajectory
    45  The nvcc compiler precompiles the input two times. Once for the device code
    46  being compiled by the cicc device compiler and once for the host code
    47  compiled by the real host compiler. NVCC uses gcc/clang/msvc/...
    48  depending on the host compiler being set on the command line.
    49  
    50  Predef (as a preprocessor only lib) detects the one doing the preprocessing
    51  as compiler and expects it to be the one doing the real compilation.
    52  This is not true for NVCC which is only doing the preprocessing and which
    53  is using another compiler for parts of its work. So for NVCC it should be
    54  allowed to set BOOST_COMP_NVCC additionally to the already detected host
    55  compiler because both is true: It is gcc/clang/... compiling the code, but it
    56  is also NVCC doing the preprocessing and adding some other quirks you may
    57  want to detect.
    58  
    59  This behavior is similar to what boost config is doing in `select_compiler_config.hpp`.
    60  There the NVCC detection is not handled as a real compiler (part of the
    61  #if-#elif) but as additional option before the real compiler.
    62  */
    63  #   undef BOOST_COMP_NVCC
    64  #   define BOOST_COMP_NVCC BOOST_COMP_NVCC_DETECTION
    65  #   define BOOST_COMP_NVCC_AVAILABLE
    66  #   include <boost/predef/detail/comp_detected.h>
    67  #endif
    68  
    69  #define BOOST_COMP_NVCC_NAME "NVCC"
    70  
    71  #endif
    72  
    73  #include <boost/predef/detail/test.h>
    74  BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_NVCC,BOOST_COMP_NVCC_NAME)