From e8681a9b373070fcddceda48da088673a2a0627f Mon Sep 17 00:00:00 2001 From: Benjamin Worpitz Date: Sun, 13 May 2018 17:21:13 +0200 Subject: [PATCH] Add support for detecting CUDA (#71) * add support for detecting CUDA * add test for new make macro --- include/boost/predef/language.h | 1 + include/boost/predef/language/cuda.h | 52 ++++++++++++++++++++++++++++ include/boost/predef/make.h | 2 ++ test/make.cpp | 1 + 4 files changed, 56 insertions(+) create mode 100644 include/boost/predef/language/cuda.h diff --git a/include/boost/predef/language.h b/include/boost/predef/language.h index 0a317d5..9ce3cc9 100644 --- a/include/boost/predef/language.h +++ b/include/boost/predef/language.h @@ -13,5 +13,6 @@ http://www.boost.org/LICENSE_1_0.txt) #include #include #include +#include #endif diff --git a/include/boost/predef/language/cuda.h b/include/boost/predef/language/cuda.h new file mode 100644 index 0000000..5c5fed3 --- /dev/null +++ b/include/boost/predef/language/cuda.h @@ -0,0 +1,52 @@ +/* +Copyright Benjamin Worpitz 2018 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef BOOST_PREDEF_LANGUAGE_CUDA_H +#define BOOST_PREDEF_LANGUAGE_CUDA_H + +#include +#include + +/*` +[heading `BOOST_LANG_CUDA`] + +[@https://en.wikipedia.org/wiki/CUDA CUDA C/C++] language. +If available, the version is detected as VV.RR.P. + +[table + [[__predef_symbol__] [__predef_version__]] + + [[`__CUDACC__`] [__predef_detection__]] + [[`__CUDA__`] [__predef_detection__]] + + [[`CUDA_VERSION`] [VV.RR.P]] + ] + */ + +#define BOOST_LANG_CUDA BOOST_VERSION_NUMBER_NOT_AVAILABLE + +#if defined(__CUDACC__) || defined(__CUDA__) +# undef BOOST_LANG_CUDA +# include +# if defined(CUDA_VERSION) +# define BOOST_LANG_CUDA BOOST_PREDEF_MAKE_10_VVRRP(CUDA_VERSION) +# else +# define BOOST_LANG_CUDA BOOST_VERSION_NUMBER_AVAILABLE +# endif +#endif + +#if BOOST_LANG_CUDA +# define BOOST_LANG_CUDA_AVAILABLE +#endif + +#define BOOST_LANG_CUDA_NAME "CUDA C/C++" + + +#endif + +#include +BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_CUDA,BOOST_LANG_CUDA_NAME) diff --git a/include/boost/predef/make.h b/include/boost/predef/make.h index 36b891a..e9ba6c8 100644 --- a/include/boost/predef/make.h +++ b/include/boost/predef/make.h @@ -64,6 +64,8 @@ Macros are: #define BOOST_PREDEF_MAKE_10_VV00(V) BOOST_VERSION_NUMBER(((V)/100)%100,0,0) /*` `BOOST_PREDEF_MAKE_10_VVRR(V)` */ #define BOOST_PREDEF_MAKE_10_VVRR(V) BOOST_VERSION_NUMBER(((V)/100)%100,(V)%100,0) +/*` `BOOST_PREDEF_MAKE_10_VVRRP(V)` */ +#define BOOST_PREDEF_MAKE_10_VVRRP(V) BOOST_VERSION_NUMBER(((V)/1000)%100,((V)/10)%100,(V)%10) /*` `BOOST_PREDEF_MAKE_10_VVRRPP(V)` */ #define BOOST_PREDEF_MAKE_10_VVRRPP(V) BOOST_VERSION_NUMBER(((V)/10000)%100,((V)/100)%100,(V)%100) /*` `BOOST_PREDEF_MAKE_10_VVRRPPP(V)` */ diff --git a/test/make.cpp b/test/make.cpp index d288833..0e19f02 100644 --- a/test/make.cpp +++ b/test/make.cpp @@ -42,6 +42,7 @@ void test_BOOST_VERSION_NUMBER() PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VPPP(9999) == BOOST_VERSION_NUMBER(9,0,999)); PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVRRPP(999999) == BOOST_VERSION_NUMBER(99,99,99)); PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVRR(9999) == BOOST_VERSION_NUMBER(99,99,0)); + PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VVRRP(98765) == BOOST_VERSION_NUMBER(98,76,5)); PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VRPP(9999) == BOOST_VERSION_NUMBER(9,9,99)); PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VRRPP(99999) == BOOST_VERSION_NUMBER(9,99,99)); PREDEF_CHECK(BOOST_PREDEF_MAKE_10_VRPPPP(460002) == BOOST_VERSION_NUMBER(4,6,2));