TestGenerator: Add CROSSCOMPILING_EMULATOR support.
Prefix test commands with the CROSSCOMPILING_EMULATOR property for target executables. This allows test suites to be run on the host when crosscompiling.
This commit is contained in:
parent
e942526b3d
commit
9160d6c241
|
@ -1,4 +1,6 @@
|
|||
CROSSCOMPILING_EMULATOR
|
||||
-----------------------
|
||||
|
||||
Use the given emulator to run executables created when crosscompiling.
|
||||
Use the given emulator to run executables created when crosscompiling. This
|
||||
command will be added as a prefix to :command:`add_test` test commands for
|
||||
built target system executables.
|
||||
|
|
|
@ -82,11 +82,31 @@ void cmTestGenerator::GenerateScriptForConfig(std::ostream& os,
|
|||
// be translated.
|
||||
std::string exe = command[0];
|
||||
cmMakefile* mf = this->Test->GetMakefile();
|
||||
cmLocalGenerator* lg = mf->GetLocalGenerator();
|
||||
cmTarget* target = mf->FindTargetToUse(exe);
|
||||
if(target && target->GetType() == cmTarget::EXECUTABLE)
|
||||
{
|
||||
// Use the target file on disk.
|
||||
exe = target->GetFullPath(config);
|
||||
|
||||
// Prepend with the emulator when cross compiling if required.
|
||||
const char * emulator =
|
||||
target->GetProperty("CROSSCOMPILING_EMULATOR");
|
||||
if (emulator != 0)
|
||||
{
|
||||
std::vector<std::string> emulatorWithArgs;
|
||||
cmSystemTools::ExpandListArgument(emulator, emulatorWithArgs);
|
||||
std::string emulatorExe(emulatorWithArgs[0]);
|
||||
cmSystemTools::ConvertToUnixSlashes(emulatorExe);
|
||||
os << lg->EscapeForCMake(emulatorExe) << " ";
|
||||
for(std::vector<std::string>::const_iterator ei =
|
||||
emulatorWithArgs.begin()+1;
|
||||
ei != emulatorWithArgs.end();
|
||||
++ei)
|
||||
{
|
||||
os << lg->EscapeForCMake(*ei) << " ";
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -96,7 +116,6 @@ void cmTestGenerator::GenerateScriptForConfig(std::ostream& os,
|
|||
}
|
||||
|
||||
// Generate the command line with full escapes.
|
||||
cmLocalGenerator* lg = mf->GetLocalGenerator();
|
||||
os << lg->EscapeForCMake(exe);
|
||||
for(std::vector<std::string>::const_iterator ci = command.begin()+1;
|
||||
ci != command.end(); ++ci)
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
set(testfile "${RunCMake_TEST_BINARY_DIR}/CTestTestfile.cmake")
|
||||
if(EXISTS "${testfile}")
|
||||
file(READ "${testfile}" testfile_contents)
|
||||
else()
|
||||
message(FATAL_ERROR "Could not find expected CTestTestfile.cmake.")
|
||||
endif()
|
||||
if(testfile_contents MATCHES "add_test[(]DoesNotUseEmulator ^(pseudo_emulator)+$")
|
||||
message(SEND_ERROR "Used emulator when it should not be used.")
|
||||
endif()
|
||||
if(NOT testfile_contents MATCHES "add_test[(]UsesEmulator .+pseudo_emulator.+$")
|
||||
message(SEND_ERROR "Did not use emulator when it should be used.")
|
||||
endif()
|
|
@ -0,0 +1,8 @@
|
|||
set(CMAKE_CROSSCOMPILING 1)
|
||||
enable_testing()
|
||||
add_test(NAME DoesNotUseEmulator
|
||||
COMMAND ${CMAKE_COMMAND} -E echo "Hi")
|
||||
|
||||
add_executable(generated_exe simple_src.cxx)
|
||||
add_test(NAME UsesEmulator
|
||||
COMMAND generated_exe)
|
|
@ -0,0 +1 @@
|
|||
CMAKE_EMULATOR:STRING=@PSEUDO_EMULATOR@
|
|
@ -5,3 +5,4 @@ set(RunCMake_TEST_OPTIONS
|
|||
|
||||
run_cmake(CrosscompilingEmulatorProperty)
|
||||
run_cmake(TryRun)
|
||||
run_cmake(AddTest)
|
||||
|
|
Loading…
Reference in New Issue