diff options
author | Brad King <brad.king@kitware.com> | 2019-04-08 11:43:22 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2019-04-08 11:45:13 (GMT) |
commit | c756fbce9ba94e2d7f1b787d595df24dbe99c9c1 (patch) | |
tree | c33d897d80d3623677d90f40d9cba5ae9474b96f /Source | |
parent | 99ce35ab9cbdac4a7cc626590f5e86c36ae29070 (diff) | |
parent | a1e6b414b9ade99a8f4e6bbe9bbff43ee1a05e88 (diff) | |
download | CMake-c756fbce9ba94e2d7f1b787d595df24dbe99c9c1.zip CMake-c756fbce9ba94e2d7f1b787d595df24dbe99c9c1.tar.gz CMake-c756fbce9ba94e2d7f1b787d595df24dbe99c9c1.tar.bz2 |
Merge topic 'ghs_os_dir'
a1e6b414b9 GHS: Update GHS_BSP_NAME processing
266dadf868 GHS: Print status message regarding GHS_OS_DIR
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3123
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmCoreTryCompile.cxx | 5 | ||||
-rw-r--r-- | Source/cmGlobalGhsMultiGenerator.cxx | 124 | ||||
-rw-r--r-- | Source/cmGlobalGhsMultiGenerator.h | 1 |
3 files changed, 76 insertions, 54 deletions
diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx index ffc41ba..dcb1ff5 100644 --- a/Source/cmCoreTryCompile.cxx +++ b/Source/cmCoreTryCompile.cxx @@ -60,7 +60,8 @@ static std::string const kCMAKE_WARN_DEPRECATED = "CMAKE_WARN_DEPRECATED"; /* GHS Multi platform variables */ static std::set<std::string> ghs_platform_vars{ "GHS_TARGET_PLATFORM", "GHS_PRIMARY_TARGET", "GHS_TOOLSET_ROOT", - "GHS_OS_ROOT", "GHS_OS_DIR", "GHS_BSP_NAME" + "GHS_OS_ROOT", "GHS_OS_DIR", "GHS_BSP_NAME", + "GHS_OS_DIR_OPTION" }; static void writeProperty(FILE* fout, std::string const& targetName, @@ -896,7 +897,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv, // Forward the GHS variables to the inner project cache. for (std::string const& var : ghs_platform_vars) { if (const char* val = this->Makefile->GetDefinition(var)) { - std::string flag = "-D" + var + "=" + val; + std::string flag = "-D" + var + "=" + "'" + val + "'"; cmakeFlags.push_back(std::move(flag)); } } diff --git a/Source/cmGlobalGhsMultiGenerator.cxx b/Source/cmGlobalGhsMultiGenerator.cxx index e6a1d78..9f361f6 100644 --- a/Source/cmGlobalGhsMultiGenerator.cxx +++ b/Source/cmGlobalGhsMultiGenerator.cxx @@ -119,10 +119,11 @@ bool cmGlobalGhsMultiGenerator::SetGeneratorToolset(std::string const& ts, bool cmGlobalGhsMultiGenerator::SetGeneratorPlatform(std::string const& p, cmMakefile* mf) { + std::string arch; if (p.empty()) { cmSystemTools::Message( "Green Hills MULTI: -A <arch> not specified; defaulting to \"arm\""); - std::string arch = "arm"; + arch = "arm"; /* store the platform name for later use * -- already done if -A<arch> was specified @@ -130,19 +131,51 @@ bool cmGlobalGhsMultiGenerator::SetGeneratorPlatform(std::string const& p, mf->AddCacheDefinition("CMAKE_GENERATOR_PLATFORM", arch.c_str(), "Name of generator platform.", cmStateEnums::INTERNAL); + } else { + arch = p; } - const char* tgtPlatform = mf->GetDefinition("GHS_TARGET_PLATFORM"); - if (tgtPlatform == nullptr) { - cmSystemTools::Message("Green Hills MULTI: GHS_TARGET_PLATFORM not " - "specified; defaulting to \"integrity\""); - tgtPlatform = "integrity"; + /* check if OS location has been updated by platform scripts */ + std::string platform = mf->GetSafeDefinition("GHS_TARGET_PLATFORM"); + std::string osdir = mf->GetSafeDefinition("GHS_OS_DIR"); + if (cmSystemTools::IsOff(osdir.c_str()) && + platform.find("integrity") != std::string::npos) { + if (!this->CMakeInstance->GetIsInTryCompile()) { + /* required OS location is not found */ + std::string m = + "Green Hills MULTI: GHS_OS_DIR not specified; No OS found in \""; + m += mf->GetSafeDefinition("GHS_OS_ROOT"); + m += "\""; + cmSystemTools::Message(m); + } + osdir = "GHS_OS_DIR-NOT-SPECIFIED"; + } else if (!this->CMakeInstance->GetIsInTryCompile() && + cmSystemTools::IsOff(this->OsDir) && + !cmSystemTools::IsOff(osdir)) { + /* OS location was updated by auto-selection */ + std::string m = "Green Hills MULTI: GHS_OS_DIR not specified; found \""; + m += osdir; + m += "\""; + cmSystemTools::Message(m); } + this->OsDir = osdir; - /* store the platform name for later use */ - mf->AddCacheDefinition("GHS_TARGET_PLATFORM", tgtPlatform, - "Name of GHS target platform.", - cmStateEnums::INTERNAL); + // Determine GHS_BSP_NAME + std::string bspName = mf->GetSafeDefinition("GHS_BSP_NAME"); + + if (cmSystemTools::IsOff(bspName.c_str()) && + platform.find("integrity") != std::string::npos) { + bspName = "sim" + arch; + /* write back the calculate name for next time */ + mf->AddCacheDefinition("GHS_BSP_NAME", bspName.c_str(), + "Name of GHS target platform.", + cmStateEnums::STRING, true); + std::string m = + "Green Hills MULTI: GHS_BSP_NAME not specified; defaulting to \""; + m += bspName; + m += "\""; + cmSystemTools::Message(m); + } return true; } @@ -153,6 +186,21 @@ void cmGlobalGhsMultiGenerator::EnableLanguage( mf->AddDefinition("CMAKE_SYSTEM_NAME", "GHS-MULTI"); mf->AddDefinition("GHSMULTI", "1"); // identifier for user CMake files + + const char* tgtPlatform = mf->GetDefinition("GHS_TARGET_PLATFORM"); + if (!tgtPlatform) { + cmSystemTools::Message("Green Hills MULTI: GHS_TARGET_PLATFORM not " + "specified; defaulting to \"integrity\""); + tgtPlatform = "integrity"; + } + + /* store the platform name for later use */ + mf->AddCacheDefinition("GHS_TARGET_PLATFORM", tgtPlatform, + "Name of GHS target platform.", cmStateEnums::STRING); + + /* store original OS location */ + this->OsDir = mf->GetSafeDefinition("GHS_OS_DIR"); + this->cmGlobalGenerator::EnableLanguage(l, mf, optional); } @@ -230,53 +278,25 @@ void cmGlobalGhsMultiGenerator::WriteTopLevelProject( fout << "# Top Level Project File" << std::endl; // Specify BSP option if supplied by user - // -- not all platforms require this entry in the project file - // integrity platforms require this field; use default if needed - std::string platform; - if (const char* p = - this->GetCMakeInstance()->GetCacheDefinition("GHS_TARGET_PLATFORM")) { - platform = p; - } - - std::string bspName; - if (char const* bspCache = - this->GetCMakeInstance()->GetCacheDefinition("GHS_BSP_NAME")) { - bspName = bspCache; - this->GetCMakeInstance()->MarkCliAsUsed("GHS_BSP_NAME"); - } else { - bspName = "IGNORE"; - } - - if (platform.find("integrity") != std::string::npos && - cmSystemTools::IsOff(bspName.c_str())) { - const char* a = - this->GetCMakeInstance()->GetCacheDefinition("CMAKE_GENERATOR_PLATFORM"); - bspName = "sim"; - bspName += (a ? a : ""); - } - - if (!cmSystemTools::IsOff(bspName.c_str())) { + const char* bspName = + this->GetCMakeInstance()->GetCacheDefinition("GHS_BSP_NAME"); + if (!cmSystemTools::IsOff(bspName)) { fout << " -bsp " << bspName << std::endl; } // Specify OS DIR if supplied by user // -- not all platforms require this entry in the project file - std::string osDir; - std::string osDirOption; - if (char const* osDirCache = - this->GetCMakeInstance()->GetCacheDefinition("GHS_OS_DIR")) { - osDir = osDirCache; - } - - if (char const* osDirOptionCache = - this->GetCMakeInstance()->GetCacheDefinition("GHS_OS_DIR_OPTION")) { - osDirOption = osDirOptionCache; - } - - if (!cmSystemTools::IsOff(osDir.c_str()) || - platform.find("integrity") != std::string::npos) { - std::replace(osDir.begin(), osDir.end(), '\\', '/'); - fout << " " << osDirOption << "\"" << osDir << "\"" << std::endl; + if (!cmSystemTools::IsOff(this->OsDir.c_str())) { + const char* osDirOption = + this->GetCMakeInstance()->GetCacheDefinition("GHS_OS_DIR_OPTION"); + std::replace(this->OsDir.begin(), this->OsDir.end(), '\\', '/'); + fout << " "; + if (cmSystemTools::IsOff(osDirOption)) { + fout << ""; + } else { + fout << osDirOption; + } + fout << "\"" << this->OsDir << "\"" << std::endl; } WriteSubProjects(fout, root, generators); diff --git a/Source/cmGlobalGhsMultiGenerator.h b/Source/cmGlobalGhsMultiGenerator.h index ae27806..1aeb1dc 100644 --- a/Source/cmGlobalGhsMultiGenerator.h +++ b/Source/cmGlobalGhsMultiGenerator.h @@ -120,6 +120,7 @@ private: std::string trimQuotes(std::string const& str); + std::string OsDir; static const char* DEFAULT_BUILD_PROGRAM; static const char* DEFAULT_TOOLSET_ROOT; }; |