Skip to content

Commit

Permalink
remove option lists: issue kokkos#2329
Browse files Browse the repository at this point in the history
  • Loading branch information
jjwilke committed Sep 13, 2019
1 parent 655a7c2 commit 69a23e4
Show file tree
Hide file tree
Showing 6 changed files with 110 additions and 168 deletions.
24 changes: 5 additions & 19 deletions BUILD.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,13 +103,8 @@ endif()
# Kokkos Keyword Listing

## Device Backends
Device backends can either be enabled by specifiying `-DKokkos_ENABLE_X` or by passing all arguments as a string to
`-DKokkos_DEVICES=X,Y`. Note that the `Kokkos_ENABLE_X` options are case-sensitive and all upper case (except for OpenMP, which CMake style defines to be Camel Case).
Strings passed to `Kokkos_DEVICES` are not case-sensitive.
Device backends can be enabled by specifiying `-DKokkos_ENABLE_X`.

* Kokkos_DEVICES
* A list of devices to enable. Not case-sensitive.
* STRING Default: SERIAL
* Kokkos_ENABLE_CUDA
* Whether to build CUDA backend
* BOOL Default: OFF
Expand All @@ -130,13 +125,8 @@ Strings passed to `Kokkos_DEVICES` are not case-sensitive.
* BOOL Default: ON

## Enable Options
Options can either be enabled by specifiying `-DKokkos_ENABLE_X` or by passing all arguments as a string to
`-DKokkos_OPTIONS=X,Y`. Note that the `Kokkos_ENABLE_X` options are case-sensitive and all upper case.
Strings passed to `Kokkos_OPTIONS` are not case-sensitive.
Options can be enabled by specifiying `-DKokkos_ENABLE_X`.

* Kokkos_OPTIONS
* A list of options to enable. Not case-sensitive.
* STRING Default:
* Kokkos_ENABLE_AGGRESSIVE_VECTORIZATION
* Whether to aggressively vectorize loops
* BOOL Default: OFF
Expand Down Expand Up @@ -188,8 +178,8 @@ Strings passed to `Kokkos_OPTIONS` are not case-sensitive.

## Other Options
* Kokkos_CXX_STANDARD
* The C++ standard for Kokkos to use: c++11, c++14, or c++17
* STRING Default:
* The C++ standard for Kokkos to use: c++11, c++14, or c++17. This should be given in CMake style as 11, 14, or 17.
* STRING Default: 11
* Kokkos_SEPARATE_LIBS
* whether to build libkokkos or libkokkoscontainers, etc
* BOOL Default: OFF
Expand Down Expand Up @@ -229,12 +219,8 @@ The following options control activating and locating varial options TPLs.
* PATH Default:

## Architecture Keywords
Architecture-specific optimizations can either be enabled by specifiying `-DKokkos_ARCH_X` or by passing all arguments as a string to `-DKokkos_ARCH=X,Y`. Note that the `Kokkos_ARCH_X` options are case-sensitive and all upper case.
Strings passed to `Kokkos_ARCH` are not case-sensitive.
Architecture-specific optimizations can be enabled by specifiying `-DKokkos_ARCH_X`.

* Kokkos_ARCH
* Optimize for specific host architecture. Options are:, NONE, AMDAVX, ARMV80, ARMV81, ARMV8_THUNDERX, ARMV8_TX2, WSM, SNB, HSW, BDW, SKX, KNC, KNL, BGQ, POWER7, POWER8, POWER9, KEPLER, KEPLER30, KEPLER32, KEPLER35, KEPLER37, MAXWELL, MAXWELL50, MAXWELL52, MAXWELL53, PASCAL60, PASCAL61, VOLTA70, VOLTA72, TURING75, RYZEN, EPYC, KAVERI, CARRIZO, FIJI, VEGA, GFX901
* STRING Default: NONE
* Kokkos_ARCH_AMDAVX
* Whether to optimize for the AMDAVX architecture
* BOOL Default: OFF
Expand Down
13 changes: 0 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,19 +166,6 @@ To validate the Kokkos build, configure with
````
and run `make test` after completing the build.

There are different ways to configure Kokkos shown in the [build instructions](BUILD.md).
The above is equivalent to:
````
cmake $srcdir \
-DCMAKE_CXX_COMPILER=$path_to_compiler \
-DCMAKE_INSTALL_PREFIX=$path_to_install \
-DKokkos_DEVICES=OPENMP,SERIAL \
-DKokkos_ARCH=HSW \
-DKokkos_ENABLE_HWLOC=On \
-DKokkos_HWLOC_DIR=$path_to_hwloc
````
which provides a list of device backends and architecture optimizations to enable.

For your CMake project using Kokkos, code such as the following:

````
Expand Down
133 changes: 46 additions & 87 deletions cmake/kokkos_arch.cmake
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

FUNCTION(KOKKOS_ARCH_OPTION SUFFIX DOCSTRING)
FUNCTION(KOKKOS_ARCH_OPTION SUFFIX DEV_TYPE DESCRIPTION)
#all optimizations off by default
KOKKOS_OPTION(ARCH_${SUFFIX} OFF BOOL ${DOCSTRING})
KOKKOS_OPTION(ARCH_${SUFFIX} OFF BOOL "Optimize for ${DESCRIPTION} (${DEV_TYPE})")
IF (KOKKOS_ARCH_${SUFFIX})
LIST(APPEND KOKKOS_ENABLED_ARCH_LIST ${SUFFIX})
SET(KOKKOS_ENABLED_ARCH_LIST ${KOKKOS_ENABLED_ARCH_LIST} PARENT_SCOPE)
Expand Down Expand Up @@ -63,90 +63,51 @@ KOKKOS_CFG_DEPENDS(ARCH DEVICES)
KOKKOS_CFG_DEPENDS(ARCH OPTIONS)




#-------------------------------------------------------------------------------
# List of possible host architectures.
#-------------------------------------------------------------------------------
SET(KOKKOS_ARCH_LIST)
LIST(APPEND KOKKOS_ARCH_LIST
AMDAVX # (HOST) AMD chip
ARMV80 # (HOST) ARMv8.0 Compatible CPU
ARMV81 # (HOST) ARMv8.1 Compatible CPU
ARMV8_THUNDERX # (HOST) ARMv8 Cavium ThunderX CPU
ARMV8_TX2 # (HOST) ARMv8 Cavium ThunderX2 CPU
WSM # (HOST) Intel Westmere CPU
SNB # (HOST) Intel Sandy/Ivy Bridge CPUs
HSW # (HOST) Intel Haswell CPUs
BDW # (HOST) Intel Broadwell Xeon E-class CPUs
SKX # (HOST) Intel Sky Lake Xeon E-class HPC CPUs (AVX512)
KNC # (HOST) Intel Knights Corner Xeon Phi
KNL # (HOST) Intel Knights Landing Xeon Phi
BGQ # (HOST) IBM Blue Gene Q
POWER7 # (HOST) IBM POWER7 CPUs
POWER8 # (HOST) IBM POWER8 CPUs
POWER9 # (HOST) IBM POWER9 CPUs
KEPLER # (GPU) NVIDIA Kepler default (generation CC 3.5)
KEPLER30 # (GPU) NVIDIA Kepler generation CC 3.0
KEPLER32 # (GPU) NVIDIA Kepler generation CC 3.2
KEPLER35 # (GPU) NVIDIA Kepler generation CC 3.5
KEPLER37 # (GPU) NVIDIA Kepler generation CC 3.7
MAXWELL # (GPU) NVIDIA Maxwell default (generation CC 5.0)
MAXWELL50 # (GPU) NVIDIA Maxwell generation CC 5.0
MAXWELL52 # (GPU) NVIDIA Maxwell generation CC 5.2
MAXWELL53 # (GPU) NVIDIA Maxwell generation CC 5.3
PASCAL60 # (GPU) NVIDIA Pascal generation CC 6.0
PASCAL61 # (GPU) NVIDIA Pascal generation CC 6.1
VOLTA70 # (GPU) NVIDIA Volta generation CC 7.0
VOLTA72 # (GPU) NVIDIA Volta generation CC 7.2
TURING75 # (GPU) NVIDIA Turing generation CC 7.5
RYZEN
EPYC
KAVERI
CARRIZO
FIJI
VEGA
GFX901
)
STRING(REPLACE ";" ", " KOKKOS_INTERNAL_ARCH_DOCSTR "${KOKKOS_ARCH_LIST}")
SET(KOKKOS_INTERNAL_ARCH_DOCSTR "${tmpr}${KOKKOS_INTERNAL_ARCH_DOCSTR}")


# Setting this variable to a value other than "None" can improve host
# performance by turning on architecture specific code.
# NOT SET is used to determine if the option is passed in. It is reset to
# default "None" down below.
KOKKOS_OPTION(ARCH "" STRING "Optimize for specific host architecture. Options are: ${KOKKOS_INTERNAL_ARCH_DOCSTR}")

# Ensure that KOKKOS_ARCH is in the ARCH_LIST
IF (KOKKOS_ARCH MATCHES ",")
MESSAGE(WARNING "-- Detected a comma in: KOKKOS_ARCH=`${KOKKOS_ARCH}`")
MESSAGE("-- Although we prefer KOKKOS_ARCH to be semicolon-delimited, we do allow")
MESSAGE("-- comma-delimited values for compatibility with scripts (see github.com/trilinos/Trilinos/issues/2330)")
STRING(REPLACE "," ";" KOKKOS_ARCH "${KOKKOS_ARCH}")
MESSAGE("-- Commas were changed to semicolons, now KOKKOS_ARCH=`${KOKKOS_ARCH}`")
ENDIF()

IF (KOKKOS_ARCH MATCHES "-")
STRING(REPLACE "-" "_" KOKKOS_ARCH "${KOKKOS_ARCH}")
ENDIF()



FOREACH(Arch ${KOKKOS_ARCH})
STRING(TOUPPER ${Arch} ARCH)
#force on all the architectures in the list
IF (NOT ${ARCH} IN_LIST KOKKOS_ARCH_LIST)
MESSAGE(FATAL_ERROR "`${Arch}` is not an accepted value in KOKKOS_ARCH=`${KOKKOS_ARCH}`."
" Please pick from these choices: ${KOKKOS_INTERNAL_ARCH_DOCSTR}")
ENDIF()
SET(Kokkos_ARCH_${ARCH} ON CACHE BOOL "optimize for architecture ${Arch}" FORCE)
MESSAGE(STATUS "Setting Kokkos_ARCH_${ARCH}=ON from Kokkos_ARCH")
ENDFOREACH()

FOREACH(Arch ${KOKKOS_ARCH_LIST})
KOKKOS_ARCH_OPTION(${Arch} "Whether to optimize for the ${Arch} architecture")
ENDFOREACH()
KOKKOS_ARCH_OPTION(AMDAVX HOST "AMD chip")
KOKKOS_ARCH_OPTION(ARMV80 HOST "ARMv8.0 Compatible CPU")
KOKKOS_ARCH_OPTION(ARMV81 HOST "ARMv8.1 Compatible CPU")
KOKKOS_ARCH_OPTION(ARMV8_THUNDERX HOST "ARMv8 Cavium ThunderX CPU")
KOKKOS_ARCH_OPTION(ARMV8_TX2 HOST "ARMv8 Cavium ThunderX2 CPU")
KOKKOS_ARCH_OPTION(WSM HOST "Intel Westmere CPU")
KOKKOS_ARCH_OPTION(SNB HOST "Intel Sandy/Ivy Bridge CPUs")
KOKKOS_ARCH_OPTION(HSW HOST "Intel Haswell CPUs")
KOKKOS_ARCH_OPTION(BDW HOST "Intel Broadwell Xeon E-class CPUs")
KOKKOS_ARCH_OPTION(SKX HOST "Intel Sky Lake Xeon E-class HPC CPUs (AVX512)")
KOKKOS_ARCH_OPTION(KNC HOST "Intel Knights Corner Xeon Phi")
KOKKOS_ARCH_OPTION(KNL HOST "Intel Knights Landing Xeon Phi")
KOKKOS_ARCH_OPTION(BGQ HOST "IBM Blue Gene Q")
KOKKOS_ARCH_OPTION(POWER7 HOST "IBM POWER7 CPUs")
KOKKOS_ARCH_OPTION(POWER8 HOST "IBM POWER8 CPUs")
KOKKOS_ARCH_OPTION(POWER9 HOST "IBM POWER9 CPUs")
KOKKOS_ARCH_OPTION(KEPLER GPU "NVIDIA Kepler default (generation CC 3.5)")
KOKKOS_ARCH_OPTION(KEPLER30 GPU "NVIDIA Kepler generation CC 3.0")
KOKKOS_ARCH_OPTION(KEPLER32 GPU "NVIDIA Kepler generation CC 3.2")
KOKKOS_ARCH_OPTION(KEPLER35 GPU "NVIDIA Kepler generation CC 3.5")
KOKKOS_ARCH_OPTION(KEPLER37 GPU "NVIDIA Kepler generation CC 3.7")
KOKKOS_ARCH_OPTION(MAXWELL GPU "NVIDIA Maxwell default (generation CC 5.0)")
KOKKOS_ARCH_OPTION(MAXWELL50 GPU "NVIDIA Maxwell generation CC 5.0")
KOKKOS_ARCH_OPTION(MAXWELL52 GPU "NVIDIA Maxwell generation CC 5.2")
KOKKOS_ARCH_OPTION(MAXWELL53 GPU "NVIDIA Maxwell generation CC 5.3")
KOKKOS_ARCH_OPTION(PASCAL60 GPU "NVIDIA Pascal generation CC 6.0")
KOKKOS_ARCH_OPTION(PASCAL61 GPU "NVIDIA Pascal generation CC 6.1")
KOKKOS_ARCH_OPTION(VOLTA70 GPU "NVIDIA Volta generation CC 7.0")
KOKKOS_ARCH_OPTION(VOLTA72 GPU "NVIDIA Volta generation CC 7.2")
KOKKOS_ARCH_OPTION(TURING75 GPU "NVIDIA Turing generation CC 7.5")
KOKKOS_ARCH_OPTION(RYZEN HOST "AMD Ryzen architecture")
KOKKOS_ARCH_OPTION(EPYC HOST "AMD Epyc architecture")
KOKKOS_ARCH_OPTION(KAVERI APU "AMD Kaveri architecture")
KOKKOS_ARCH_OPTION(CARRIZO APU "AMD Carrizo architecture")
KOKKOS_ARCH_OPTION(FIJI GPU "AMD Fiji architecture")
KOKKOS_ARCH_OPTION(VEGA GPU "AMD Vega architecture")
KOKKOS_ARCH_OPTION(GFX901 GPU "AMD GFX architecture")

KOKKOS_DEPRECATED_LIST(ARCH ARCH)

IF(KOKKOS_ENABLE_COMPILER_WARNINGS)
SET(COMMON_WARNINGS
Expand Down Expand Up @@ -390,9 +351,9 @@ CHECK_CUDA_ARCH(TURING75 sm_75)
#Let's just always print things
MESSAGE(STATUS "Execution Spaces:")
IF(KOKKOS_ENABLE_CUDA)
MESSAGE(STATUS " Device Parallel: Cuda")
MESSAGE(STATUS " Device Parallel: CUDA")
ELSE()
MESSAGE(STATUS " Device Parallel: None")
MESSAGE(STATUS " Device Parallel: NONE")
ENDIF()

IF(KOKKOS_ENABLE_OPENMP)
Expand All @@ -416,9 +377,7 @@ ENDIF()

MESSAGE(STATUS "")
MESSAGE(STATUS "Architectures:")
FOREACH(Arch ${KOKKOS_ARCH_LIST})
STRING(TOUPPER ${Arch} ARCH)
IF (KOKKOS_ARCH_${ARCH})
MESSAGE(STATUS " ${Arch}")
ENDIF()
FOREACH(Arch ${KOKKOS_ENABLED_ARCH_LIST})
MESSAGE(STATUS " ${Arch}")
ENDFOREACH()

47 changes: 27 additions & 20 deletions cmake/kokkos_enable_devices.cmake
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@

FUNCTION(KOKKOS_DEVICE_OPTION SUFFIX DEFAULT DOCSTRING)
FUNCTION(KOKKOS_DEVICE_OPTION SUFFIX DEFAULT DEV_TYPE DOCSTRING)
KOKKOS_OPTION(ENABLE_${SUFFIX} ${DEFAULT} BOOL ${DOCSTRING})
STRING(TOUPPER ${SUFFIX} UC_NAME)
IF (KOKKOS_ENABLE_${UC_NAME})
Expand All @@ -8,42 +8,49 @@ FUNCTION(KOKKOS_DEVICE_OPTION SUFFIX DEFAULT DOCSTRING)
SET(KOKKOS_ENABLED_DEVICES ${KOKKOS_ENABLED_DEVICES} PARENT_SCOPE)
ENDIF()
SET(KOKKOS_ENABLE_${UC_NAME} ${KOKKOS_ENABLE_${UC_NAME}} PARENT_SCOPE)
IF (KOKKOS_ENABLE_${UC_NAME} AND DEV_TYPE STREQUAL "HOST")
SET(KOKKOS_HAS_HOST ON PARENT_SCOPE)
ENDIF()
ENDFUNCTION()

KOKKOS_CFG_DEPENDS(DEVICES NONE)

KOKKOS_OPTION(DEVICES "SERIAL" STRING "A list of devices to enable")
IF (KOKKOS_DEVICES MATCHES ",")
MESSAGE(WARNING "-- Detected a comma in: Kokkos_DEVICES=`${KOKKOS_DEVICES}`")
MESSAGE("-- Although we prefer KOKKOS_DEVICES to be semicolon-delimited, we do allow")
MESSAGE("-- comma-delimited values for compatibility with scripts (see github.com/trilinos/Trilinos/issues/2330)")
STRING(REPLACE "," ";" KOKKOS_DEVICES "${KOKKOS_DEVICES}")
MESSAGE("-- Commas were changed to semicolons, now Kokkos_DEVICES=`${KOKKOS_DEVICES}`")
ENDIF()
# Put a check in just in case people are using this option
KOKKOS_DEPRECATED_LIST(DEVICES ENABLE)

FOREACH(DEV ${KOKKOS_DEVICES})
STRING(TOUPPER ${DEV} UC_NAME)
SET(Kokkos_ENABLE_${UC_NAME} On)
MESSAGE(STATUS "Setting Kokkos_ENABLE_${UC_NAME}=ON from Kokkos_DEVICES")
ENDFOREACH()
KOKKOS_DEVICE_OPTION(SERIAL ON "Whether to build serial backend")
KOKKOS_DEVICE_OPTION(PTHREAD OFF "Whether to build Pthread backend")
KOKKOS_DEVICE_OPTION(ROCM OFF "Whether to build AMD ROCm backend")

KOKKOS_DEVICE_OPTION(PTHREAD OFF HOST "Whether to build Pthread backend")
IF (KOKKOS_ENABLE_PTHREAD)
#patch the naming here
SET(KOKKOS_ENABLE_THREADS ON)
ENDIF()
KOKKOS_DEVICE_OPTION(ROCM OFF DEVICE "Whether to build AMD ROCm backend")

IF(Trilinos_ENABLE_Kokkos AND Trilinos_ENABLE_OpenMP)
SET(OMP_DEFAULT ON)
ELSE()
SET(OMP_DEFAULT OFF)
ENDIF()
KOKKOS_DEVICE_OPTION(OPENMP ${OMP_DEFAULT} "Whether to build OpenMP backend")
KOKKOS_DEVICE_OPTION(OPENMP ${OMP_DEFAULT} HOST "Whether to build OpenMP backend")

IF(Trilinos_ENABLE_Kokkos AND TPL_ENABLE_CUDA)
SET(CUDA_DEFAULT ON)
ELSE()
SET(CUDA_DEFAULT OFF)
ENDIF()
KOKKOS_DEVICE_OPTION(CUDA ${CUDA_DEFAULT} "Whether to build CUDA backend")
KOKKOS_DEVICE_OPTION(CUDA ${CUDA_DEFAULT} DEVICE "Whether to build CUDA backend")

IF (KOKKOS_ENABLE_CUDA)
GLOBAL_SET(KOKKOS_DONT_ALLOW_EXTENSIONS "CUDA enabled")
GLOBAL_SET(KOKKOS_DONT_ALLOW_EXTENSIONS "CUDA enabled")
ENDIF()

# We want this to default to OFF for cache reasons
# Someone may later activative OpenMP, at which point SERIAL should be OFF
# If have default to ON, both serial and OpenMP would both be on which
# would be behavior inconsistent with -DOpenMP=X...
KOKKOS_DEVICE_OPTION(SERIAL OFF HOST "Whether to build serial backend")
# If we have no other hosts, turn serial on
IF (NOT KOKKOS_HAS_HOST)
SET(KOKKOS_ENABLE_SERIAL ON)
ENDIF()

31 changes: 2 additions & 29 deletions cmake/kokkos_enable_options.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -22,35 +22,8 @@ ENDFUNCTION()
# Certain defaults will depend on knowing the enabled devices
KOKKOS_CFG_DEPENDS(OPTIONS DEVICES)

KOKKOS_OPTION(OPTIONS "" STRING "A list of options to enable")
IF (KOKKOS_OPTIONS MATCHES ",")
MESSAGE(WARNING "-- Detected a comma in: Kokkos_OPTIONS=`${KOKKOS_OPTIONS}`")
MESSAGE("-- Although we prefer Kokkos_OPTIONS to be semicolon-delimited, we do allow")
MESSAGE("-- comma-delimited values for compatibility with scripts (see github.com/trilinos/Trilinos/issues/2330)")
STRING(REPLACE "," ";" KOKKOS_OPTIONS "${KOKKOS_OPTIONS}")
MESSAGE("-- Commas were changed to semicolons, now Kokkos_OPTIONS=`${KOKKOS_OPTIONS}`")
ENDIF()

FOREACH(OPT ${KOKKOS_OPTIONS})
STRING(TOUPPER ${OPT} UC_NAME)
SET(ENABLE_FLAG ON)
IF (UC_NAME MATCHES "ENABLE")
ELSE()
IF (UC_NAME MATCHES "DISABLE")
STRING(REPLACE "DISABLE" "ENABLE" UC_NAME "${UC_NAME}")
SET(ENABLE_FLAG OFF)
ELSE()
IF (UC_NAME MATCHES "AGGRESSIVE_VECTORIZATION")
SET(UC_NAME OPT_RANGE_${UC_NAME})
ELSE()
SET(UC_NAME ENABLE_${UC_NAME})
ENDIF()
ENDIF()
ENDIF()
SET(ENABLE_NAME Kokkos_${UC_NAME})
MESSAGE(STATUS "Setting ${ENABLE_NAME}=${ENABLE_FLAG} from KOKKOS_OPTIONS")
GLOBAL_SET(${ENABLE_NAME} ${ENABLE_FLAG})
ENDFOREACH()
# Put a check in just in case people are using this option
KOKKOS_DEPRECATED_LIST(OPTIONS ENABLE)

KOKKOS_OPTION(SEPARATE_LIBS OFF BOOL "whether to build libkokkos or libkokkoscontainers, etc")
KOKKOS_ENABLE_OPTION(CUDA_RELOCATABLE_DEVICE_CODE OFF "Whether to enable relocatable device code (RDC) for CUDA")
Expand Down
30 changes: 30 additions & 0 deletions cmake/kokkos_functions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,36 @@

# Validate options are given with correct case and define an internal
# upper-case version for use within

#
#
# @FUNCTION: kokkos_deprecated_list
#
# Function that checks if a deprecated list option like Kokkos_ARCH was given.
# This prints an error and prevents configure from completing.
# It attempts to print a helpful message about updating the options for the new CMake.
# Kokkos_${SUFFIX} is the name of the option (like Kokkos_ARCH) being checked.
# Kokkos_${PREFIX}_X is the name of new option to be defined from a list X,Y,Z,...
FUNCTION(kokkos_deprecated_list SUFFIX PREFIX)
SET(CAMEL_NAME Kokkos_${SUFFIX})
STRING(TOUPPER ${CAMEL_NAME} UC_NAME)

#I don't love doing it this way but better to be safe
FOREACH(opt ${KOKKOS_GIVEN_VARIABLES})
STRING(TOUPPER ${opt} OPT_UC)
IF ("${OPT_UC}" STREQUAL "${UC_NAME}")
STRING(REPLACE "," ";" optlist "${${opt}}")
SET(ERROR_MSG "Given deprecated option list ${opt}. This must now be given as separate -D options, which assuming you spelled options correctly would be:")
FOREACH(entry ${optlist})
STRING(TOUPPER ${entry} ENTRY_UC)
STRING(APPEND ERROR_MSG "\n -DKokkos_${PREFIX}_${ENTRY_UC}=ON")
ENDFOREACH()
STRING(APPEND ERROR_MSG "\nRemove CMakeCache.txt and re-run. For a list of valid options, refer to BUILD.md or even look at CMakeCache.txt (before deleting it).")
MESSAGE(SEND_ERROR ${ERROR_MSG})
ENDIF()
ENDFOREACH()
ENDFUNCTION()

FUNCTION(kokkos_option CAMEL_SUFFIX DEFAULT TYPE DOCSTRING)
SET(CAMEL_NAME Kokkos_${CAMEL_SUFFIX})
STRING(TOUPPER ${CAMEL_NAME} UC_NAME)
Expand Down

0 comments on commit 69a23e4

Please sign in to comment.