CrossCompiling: Load CMAKE_CROSSCOMPILING_EMULATOR from environment
Read `CMAKE_CROSSCOMPILING_EMULATOR` from an environment variable of the same name if not specified with `-D` or an initial cache value. Along with existing environment variable settings such as `CMAKE_TOOLCHAIN_FILE`, cross compilation configuration can be more completely set via environment variables. Suggested-by: Henry Schreiner <henryschreineriii@gmail.com>
This commit is contained in:
parent
ccb866448f
commit
7005dea005
11
Help/envvar/CMAKE_CROSSCOMPILING_EMULATOR.rst
Normal file
11
Help/envvar/CMAKE_CROSSCOMPILING_EMULATOR.rst
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
CMAKE_CROSSCOMPILING_EMULATOR
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
.. versionadded:: 3.28
|
||||||
|
|
||||||
|
.. include:: ENV_VAR.txt
|
||||||
|
|
||||||
|
The default value for :variable:`CMAKE_CROSSCOMPILING_EMULATOR` when there
|
||||||
|
is no explicit configuration given on the first run while creating a new
|
||||||
|
build tree. On later runs in an existing build tree the value persists in
|
||||||
|
the cache as :variable:`CMAKE_CROSSCOMPILING_EMULATOR`.
|
@ -43,6 +43,7 @@ Environment Variables that Control the Build
|
|||||||
/envvar/CMAKE_COLOR_DIAGNOSTICS
|
/envvar/CMAKE_COLOR_DIAGNOSTICS
|
||||||
/envvar/CMAKE_CONFIGURATION_TYPES
|
/envvar/CMAKE_CONFIGURATION_TYPES
|
||||||
/envvar/CMAKE_CONFIG_TYPE
|
/envvar/CMAKE_CONFIG_TYPE
|
||||||
|
/envvar/CMAKE_CROSSCOMPILING_EMULATOR
|
||||||
/envvar/CMAKE_EXPORT_COMPILE_COMMANDS
|
/envvar/CMAKE_EXPORT_COMPILE_COMMANDS
|
||||||
/envvar/CMAKE_GENERATOR
|
/envvar/CMAKE_GENERATOR
|
||||||
/envvar/CMAKE_GENERATOR_INSTANCE
|
/envvar/CMAKE_GENERATOR_INSTANCE
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
CMAKE_CROSSCOMPILING_EMULATOR-env-variable
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
* The :envvar:`CMAKE_CROSSCOMPILING_EMULATOR` environment variable
|
||||||
|
was added to initialize the :variable:`CMAKE_CROSSCOMPILING_EMULATOR`
|
||||||
|
cache variable.
|
@ -12,6 +12,10 @@ for the target system.
|
|||||||
Lists>`, then the first value is the command and remaining values are its
|
Lists>`, then the first value is the command and remaining values are its
|
||||||
arguments.
|
arguments.
|
||||||
|
|
||||||
|
.. versionadded:: 3.28
|
||||||
|
This variable can be initialized via an
|
||||||
|
:envvar:`CMAKE_CROSSCOMPILING_EMULATOR` environment variable.
|
||||||
|
|
||||||
The command will be used to run :command:`try_run` generated executables,
|
The command will be used to run :command:`try_run` generated executables,
|
||||||
which avoids manual population of the ``TryRunResults.cmake`` file.
|
which avoids manual population of the ``TryRunResults.cmake`` file.
|
||||||
|
|
||||||
|
@ -2507,6 +2507,18 @@ int cmake::ActualConfigure()
|
|||||||
"Name of generator toolset.", cmStateEnums::INTERNAL);
|
"Name of generator toolset.", cmStateEnums::INTERNAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!this->State->GetInitializedCacheValue(
|
||||||
|
"CMAKE_CROSSCOMPILING_EMULATOR")) {
|
||||||
|
cm::optional<std::string> emulator =
|
||||||
|
cmSystemTools::GetEnvVar("CMAKE_CROSSCOMPILING_EMULATOR");
|
||||||
|
if (emulator && !emulator->empty()) {
|
||||||
|
std::string message =
|
||||||
|
"Emulator to run executables and tests when cross compiling.";
|
||||||
|
this->AddCacheEntry("CMAKE_CROSSCOMPILING_EMULATOR", *emulator, message,
|
||||||
|
cmStateEnums::STRING);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// reset any system configuration information, except for when we are
|
// reset any system configuration information, except for when we are
|
||||||
// InTryCompile. With TryCompile the system info is taken from the parent's
|
// InTryCompile. With TryCompile the system info is taken from the parent's
|
||||||
// info to save time
|
// info to save time
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
-- env_emulator='pseudo_emulator(\.exe)?'
|
||||||
|
-- emulator='pseudo_emulator(\.exe)?'
|
@ -0,0 +1,6 @@
|
|||||||
|
message(STATUS "ENV{CMAKE_CROSS_COMPILING_EMULATOR}='$ENV{CMAKE_CROSSCOMPILING_EMULATOR}'")
|
||||||
|
message(STATUS "CMAKE_CROSSCOMPLING_EMULATOR='${CMAKE_CROSSCOMPILING_EMULATOR}'")
|
||||||
|
get_filename_component(env_emulator "$ENV{CMAKE_CROSSCOMPILING_EMULATOR}" NAME)
|
||||||
|
message(STATUS "env_emulator='${env_emulator}'")
|
||||||
|
get_filename_component(emulator "${CMAKE_CROSSCOMPILING_EMULATOR}" NAME)
|
||||||
|
message(STATUS "emulator='${emulator}'")
|
@ -26,3 +26,11 @@ set(RunCMake_TEST_OPTIONS
|
|||||||
"-DCMAKE_CROSSCOMPILING_EMULATOR=${PSEUDO_EMULATOR_CUSTOM_COMMAND_ARG}\;custom_argument")
|
"-DCMAKE_CROSSCOMPILING_EMULATOR=${PSEUDO_EMULATOR_CUSTOM_COMMAND_ARG}\;custom_argument")
|
||||||
CustomCommandGenerator_run_and_build(AddCustomCommandWithArg)
|
CustomCommandGenerator_run_and_build(AddCustomCommandWithArg)
|
||||||
CustomCommandGenerator_run_and_build(AddCustomTargetWithArg)
|
CustomCommandGenerator_run_and_build(AddCustomTargetWithArg)
|
||||||
|
unset(RunCMake_TEST_OPTIONS)
|
||||||
|
|
||||||
|
function(run_EnvCrossCompilingEmulator)
|
||||||
|
set(ENV{CMAKE_CROSSCOMPILING_EMULATOR} "${PSEUDO_EMULATOR}")
|
||||||
|
run_cmake(EnvCrossCompilingEmulator)
|
||||||
|
unset(ENV{CMAKE_CROSSCOMPILING_EMULATOR})
|
||||||
|
endfunction()
|
||||||
|
run_EnvCrossCompilingEmulator()
|
||||||
|
Loading…
Reference in New Issue
Block a user