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
|
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.
|
// be translated.
|
||||||
std::string exe = command[0];
|
std::string exe = command[0];
|
||||||
cmMakefile* mf = this->Test->GetMakefile();
|
cmMakefile* mf = this->Test->GetMakefile();
|
||||||
|
cmLocalGenerator* lg = mf->GetLocalGenerator();
|
||||||
cmTarget* target = mf->FindTargetToUse(exe);
|
cmTarget* target = mf->FindTargetToUse(exe);
|
||||||
if(target && target->GetType() == cmTarget::EXECUTABLE)
|
if(target && target->GetType() == cmTarget::EXECUTABLE)
|
||||||
{
|
{
|
||||||
// Use the target file on disk.
|
// Use the target file on disk.
|
||||||
exe = target->GetFullPath(config);
|
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
|
else
|
||||||
{
|
{
|
||||||
|
@ -96,7 +116,6 @@ void cmTestGenerator::GenerateScriptForConfig(std::ostream& os,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate the command line with full escapes.
|
// Generate the command line with full escapes.
|
||||||
cmLocalGenerator* lg = mf->GetLocalGenerator();
|
|
||||||
os << lg->EscapeForCMake(exe);
|
os << lg->EscapeForCMake(exe);
|
||||||
for(std::vector<std::string>::const_iterator ci = command.begin()+1;
|
for(std::vector<std::string>::const_iterator ci = command.begin()+1;
|
||||||
ci != command.end(); ++ci)
|
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(CrosscompilingEmulatorProperty)
|
||||||
run_cmake(TryRun)
|
run_cmake(TryRun)
|
||||||
|
run_cmake(AddTest)
|
||||||
|
|
Loading…
Reference in New Issue