mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
I recently broke the out of tree build by mistake [its fixed now ; )]. This inspired me to make it easy to test this behavior by adding support to build-script/cmake/etc for running an external benchmark build via AddExternalProjects. Now I can just call build-script with --build-external-benchmarks and thats it! It should just work! It already helped me to avoid breaking the external build twice! I hope that eventually we get this on a bot to make sure it keeps working [or even added to the smoke tests ; )]. *NOTE* This is disabled by default so it will not affect normal builds. *NOTE* This just builds the external benchmarks. There is an rpath issue that prevents you from running them (the benchmarks have the rpath set as if they are next to the stdlib, but they are not. This can be fixed in a few different ways, but I do not have time to finish implementing it = (. But this commit is a good first step and at least detects build errors.
46 lines
1.2 KiB
CMake
46 lines
1.2 KiB
CMake
|
|
include(CMakeParseArguments)
|
|
|
|
function(precondition var)
|
|
cmake_parse_arguments(
|
|
PRECONDITION # prefix
|
|
"NEGATE" # options
|
|
"MESSAGE" # single-value args
|
|
"" # multi-value args
|
|
${ARGN})
|
|
|
|
if (PRECONDITION_NEGATE)
|
|
if (${var})
|
|
if (PRECONDITION_MESSAGE)
|
|
message(FATAL_ERROR "Error! ${PRECONDITION_MESSAGE}")
|
|
else()
|
|
message(FATAL_ERROR "Error! Variable ${var} is true or not empty. The value of ${var} is ${${var}}.")
|
|
endif()
|
|
endif()
|
|
else()
|
|
if (NOT ${var})
|
|
if (PRECONDITION_MESSAGE)
|
|
message(FATAL_ERROR "Error! ${PRECONDITION_MESSAGE}")
|
|
else()
|
|
message(FATAL_ERROR "Error! Variable ${var} is false, empty or not set.")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endfunction()
|
|
|
|
# Translate a yes/no variable to the presence of a given string in a
|
|
# variable.
|
|
#
|
|
# Usage:
|
|
# translate_flag(is_set flag_name var_name)
|
|
#
|
|
# If is_set is true, sets ${var_name} to ${flag_name}. Otherwise,
|
|
# unsets ${var_name}.
|
|
function(translate_flag is_set flag_name var_name)
|
|
if(${is_set})
|
|
set("${var_name}" "${flag_name}" PARENT_SCOPE)
|
|
else()
|
|
set("${var_name}" "" PARENT_SCOPE)
|
|
endif()
|
|
endfunction()
|