| function(REPLACE_WITH_ENV_IF_SET var) |
| # Replaces var in parent scope with enviroment variable if set. |
| if(NOT "$ENV{${var}}" STREQUAL "") |
| set(${var} $ENV{${var}} PARENT_SCOPE) |
| endif() |
| endfunction() |
| |
| function(SETUP_ENV) |
| # Creates a target "env" that has the properties that are all paths to |
| # executables. See OTHER_BINARIES and MAYBE_CONDA_BINARIES for list of |
| # binaries. |
| # |
| # For executables listed in MAYBE_CONDA_BINARIES, if conda has been setup in |
| # <root>/env, then each executable will point to <root>/env/conda/bin/<exe>. |
| # |
| # If conda is not present, then the executable is expected to be on the PATH. |
| # |
| # In all cases, setting an enviroment variable will override the default |
| # behavior. |
| # |
| # Example: export VPR=<path to VPR> |
| # |
| # will cause get_target_property(var env VPR) to return $ENV{VPR}. |
| # |
| # FIXME: Consider using CMake CACHE variables instead of target properties. |
| |
| set(options) |
| set(oneValueArgs) |
| set(multiValueArgs) |
| cmake_parse_arguments( |
| SETUP_ENV |
| "${options}" |
| "${oneValueArgs}" |
| "${multiValueArgs}" |
| ${ARGN} |
| ) |
| |
| add_custom_target(env) |
| set( |
| MAYBE_CONDA_BINARIES |
| python3 |
| ) |
| |
| set_target_properties(env PROPERTIES USE_CONDA FALSE) |
| foreach(binary ${MAYBE_CONDA_BINARIES}) |
| string(TOUPPER ${binary} binary_upper) |
| if(DEFINED ENV{${binary_upper}}) |
| set(${binary_upper} $ENV{${binary_upper}}) |
| else() |
| find_program(${binary_upper} ${binary}) |
| endif() |
| |
| set_target_properties(env PROPERTIES |
| ${binary_upper} ${${binary_upper}} |
| ${binary_upper}_TARGET ${binary} |
| ) |
| endforeach() |
| |
| set_target_properties(env PROPERTIES |
| QUIET_CMD ${f4pga-arch-defs_SOURCE_DIR}/utils/quiet_cmd.sh |
| QUIET_CMD_TARGET "" |
| ) |
| endfunction() |
| |
| function(ADD_ENV_EXECUTABLE) |
| set(options REQUIRED) |
| set(oneValueArgs EXE) |
| set(multiValueArgs) |
| cmake_parse_arguments( |
| ADD_ENV_EXECUTABLE |
| "${options}" |
| "${oneValueArgs}" |
| "${multiValueArgs}" |
| ${ARGN} |
| ) |
| |
| set(binary ${ADD_ENV_EXECUTABLE_EXE}) |
| string(TOUPPER ${binary} binary_upper) |
| string(REPLACE "-" "_" binary_upper ${binary_upper}) |
| if(DEFINED ENV{${binary_upper}}) |
| set(${binary_upper} $ENV{${binary_upper}}) |
| else() |
| find_program(${binary_upper} ${binary}) |
| endif() |
| |
| set_target_properties(env PROPERTIES |
| ${binary_upper} ${${binary_upper}} |
| ) |
| |
| if(${ADD_ENV_EXECUTABLE_REQUIRED}) |
| if(NOT EXISTS ${${binary_upper}}) |
| message(FATAL_ERROR "Executable ${binary} not found and is marked required. Either set env var ${binary_upper} or ensure ${binary} is on the path.") |
| endif() |
| endif() |
| endfunction() |