diff options
-rw-r--r-- | Modules/Platform/GHS-MULTI-Determine.cmake | 91 | ||||
-rw-r--r-- | Source/cmGlobalGhsMultiGenerator.cxx | 29 |
2 files changed, 69 insertions, 51 deletions
diff --git a/Modules/Platform/GHS-MULTI-Determine.cmake b/Modules/Platform/GHS-MULTI-Determine.cmake index 501acca..96f0162 100644 --- a/Modules/Platform/GHS-MULTI-Determine.cmake +++ b/Modules/Platform/GHS-MULTI-Determine.cmake @@ -2,54 +2,72 @@ # file Copyright.txt or https://cmake.org/licensing for details. # Setup variables used for Green Hills MULTI generator +# -- Allow users to override these values. + if(CMAKE_GENERATOR MATCHES "Green Hills MULTI") # Set the project primaryTarget value # If not set then primaryTarget will be determined by the generator - set(GHS_PRIMARY_TARGET "IGNORE" CACHE STRING "GHS MULTI primaryTarget") - mark_as_advanced(GHS_PRIMARY_TARGET) - - if(NOT GHS_PRIMARY_TARGET) - # If project primaryTarget not set by user then set target platform name - # to be used by the generator when determining the primaryTarget. - set(GHS_TARGET_PLATFORM "integrity" CACHE STRING "GHS MULTI target platform") - mark_as_advanced(GHS_TARGET_PLATFORM) + if((NOT DEFINED GHS_PRIMARY_TARGET) OR (DEFINED CACHE{GHS_PRIMARY_TARGET})) + set(GHS_PRIMARY_TARGET "IGNORE" CACHE STRING "GHS MULTI primaryTarget") + mark_as_advanced(GHS_PRIMARY_TARGET) endif() # Setup MULTI toolset selection variables - if(CMAKE_HOST_UNIX) - set(_ts_root "/usr/ghs") - else() - set(_ts_root "C:/ghs") + if((NOT DEFINED GHS_TOOLSET_ROOT) OR (DEFINED CACHE{GHS_TOOLSET_ROOT})) + if(CMAKE_HOST_UNIX) + set(_ts_root "/usr/ghs") + else() + set(_ts_root "C:/ghs") + endif() + set(GHS_TOOLSET_ROOT "${_ts_root}" CACHE PATH "GHS platform toolset root directory") + mark_as_advanced(GHS_TOOLSET_ROOT) + unset(_ts_root) endif() - set(GHS_TOOLSET_ROOT "${_ts_root}" CACHE PATH "GHS platform toolset root directory") - mark_as_advanced(GHS_TOOLSET_ROOT) - unset(_ts_root) # Setup MULTI project variables - set(GHS_CUSTOMIZATION "" CACHE FILEPATH "optional GHS customization") - mark_as_advanced(GHS_CUSTOMIZATION) - set(GHS_GPJ_MACROS "" CACHE STRING "optional GHS macros generated in the .gpjs for legacy reasons") - mark_as_advanced(GHS_GPJ_MACROS) + if((NOT DEFINED GHS_CUSTOMIZATION) OR (DEFINED CACHE{GHS_CUSTOMIZATION})) + set(GHS_CUSTOMIZATION "" CACHE FILEPATH "optional GHS customization") + mark_as_advanced(GHS_CUSTOMIZATION) + endif() + + if((NOT DEFINED GHS_GPJ_MACROS) OR (DEFINED CACHE{GHS_GPJ_MACROS})) + set(GHS_GPJ_MACROS "" CACHE STRING "optional GHS macros generated in the .gpjs for legacy reasons") + mark_as_advanced(GHS_GPJ_MACROS) + endif() + +endif() + +# If project primaryTarget not set then set target platform name. +# -- May be used by the generator when determining the primaryTarget. +if(NOT GHS_PRIMARY_TARGET) + if((NOT DEFINED GHS_TARGET_PLATFORM) OR (DEFINED CACHE{GHS_TARGET_PLATFORM})) + set(GHS_TARGET_PLATFORM "integrity" CACHE STRING "GHS MULTI target platform") + mark_as_advanced(GHS_TARGET_PLATFORM) + endif() endif() # Settings for OS selection -if(CMAKE_HOST_UNIX) - set(_os_root "/usr/ghs") -else() - set(_os_root "C:/ghs") +if((NOT DEFINED GHS_OS_ROOT) OR (DEFINED CACHE{GHS_OS_ROOT})) + if(CMAKE_HOST_UNIX) + set(_os_root "/usr/ghs") + else() + set(_os_root "C:/ghs") + endif() + set(GHS_OS_ROOT "${_os_root}" CACHE PATH "GHS platform OS search root directory") + unset(_os_root) + mark_as_advanced(GHS_OS_ROOT) endif() -set(GHS_OS_ROOT "${_os_root}" CACHE PATH "GHS platform OS search root directory") -unset(_os_root) -mark_as_advanced(GHS_OS_ROOT) # Search for GHS_OS_DIR if not set by user and is known to be required if(GHS_PRIMARY_TARGET MATCHES "integrity" OR GHS_TARGET_PLATFORM MATCHES "integrity") - # Use a value that will make it apparent RTOS selection failed + # Needed - Use a value that will make it apparent RTOS selection failed set(_ghs_os_dir "GHS_OS_DIR-NOT-SPECIFIED") else() + # Not needed for this target set(_ghs_os_dir "IGNORE") endif() + if(_ghs_os_dir AND NOT DEFINED GHS_OS_DIR) if(EXISTS ${GHS_OS_ROOT}) @@ -77,11 +95,16 @@ if(_ghs_os_dir AND NOT DEFINED GHS_OS_DIR) endif() #Used for targets requiring RTOS -set(GHS_OS_DIR "${_ghs_os_dir}" CACHE PATH "GHS platform OS directory") -mark_as_advanced(GHS_OS_DIR) +if((NOT DEFINED GHS_OS_DIR) OR (DEFINED CACHE{GHS_OS_DIR})) + set(GHS_OS_DIR "${_ghs_os_dir}" CACHE PATH "GHS platform OS directory") + mark_as_advanced(GHS_OS_DIR) +endif() +unset(_ghs_os_dir) -set(GHS_OS_DIR_OPTION "-os_dir " CACHE STRING "GHS compiler OS option") -mark_as_advanced(GHS_OS_DIR_OPTION) +if((NOT DEFINED GHS_OS_DIR_OPTION) OR (DEFINED CACHE{GHS_OS_DIR_OPTION})) + set(GHS_OS_DIR_OPTION "-os_dir " CACHE STRING "GHS compiler OS option") + mark_as_advanced(GHS_OS_DIR_OPTION) +endif() # Select GHS_BSP_NAME if not set by user and is known to be required if(GHS_PRIMARY_TARGET MATCHES "integrity" OR GHS_TARGET_PLATFORM MATCHES "integrity") @@ -99,4 +122,8 @@ if(_ghs_bsp_name AND NOT DEFINED GHS_BSP_NAME) endif() endif() -set(GHS_BSP_NAME "${_ghs_bsp_name}" CACHE STRING "BSP name") +if((NOT DEFINED GHS_BSP_NAME) OR (DEFINED CACHE{GHS_BSP_NAME})) + set(GHS_BSP_NAME "${_ghs_bsp_name}" CACHE STRING "BSP name") + mark_as_advanced(GHS_BSP_NAME) +endif() +unset(_ghs_bsp_name) diff --git a/Source/cmGlobalGhsMultiGenerator.cxx b/Source/cmGlobalGhsMultiGenerator.cxx index a237689..bf537b7 100644 --- a/Source/cmGlobalGhsMultiGenerator.cxx +++ b/Source/cmGlobalGhsMultiGenerator.cxx @@ -113,24 +113,18 @@ bool cmGlobalGhsMultiGenerator::SetGeneratorPlatform(std::string const& p, cmMakefile* mf) { /* set primary target */ - cmValue t = - this->GetCMakeInstance()->GetCacheDefinition("GHS_PRIMARY_TARGET"); - if (!cmIsOff(t)) { - this->GetCMakeInstance()->MarkCliAsUsed("GHS_PRIMARY_TARGET"); - } else { + cmValue t = mf->GetDefinition("GHS_PRIMARY_TARGET"); + if (cmIsOff(t)) { /* Use the value from `-A` or use `arm` */ std::string arch = "arm"; if (!cmIsOff(p)) { arch = p; } - cmValue platform = - this->GetCMakeInstance()->GetCacheDefinition("GHS_TARGET_PLATFORM"); + cmValue platform = mf->GetDefinition("GHS_TARGET_PLATFORM"); std::string tgt = cmStrCat(arch, '_', platform, ".tgt"); /* update the primary target name*/ - mf->AddCacheDefinition("GHS_PRIMARY_TARGET", tgt, - "Generator selected GHS MULTI primaryTarget.", - cmStateEnums::STRING, true); + mf->AddDefinition("GHS_PRIMARY_TARGET", tgt); } return true; } @@ -292,18 +286,17 @@ void cmGlobalGhsMultiGenerator::WriteTopLevelProject(std::ostream& fout, // Specify BSP option if supplied by user // -- not all platforms require this entry in the project file - cmValue bspName = - this->GetCMakeInstance()->GetCacheDefinition("GHS_BSP_NAME"); + cmValue bspName = root->GetMakefile()->GetDefinition("GHS_BSP_NAME"); if (!cmIsOff(bspName)) { fout << " -bsp " << *bspName << '\n'; } // Specify OS DIR if supplied by user // -- not all platforms require this entry in the project file - cmValue osDir = this->GetCMakeInstance()->GetCacheDefinition("GHS_OS_DIR"); + cmValue osDir = root->GetMakefile()->GetDefinition("GHS_OS_DIR"); if (!cmIsOff(osDir)) { cmValue osDirOption = - this->GetCMakeInstance()->GetCacheDefinition("GHS_OS_DIR_OPTION"); + root->GetMakefile()->GetDefinition("GHS_OS_DIR_OPTION"); fout << " "; if (cmIsOff(osDirOption)) { fout << ""; @@ -575,8 +568,7 @@ void cmGlobalGhsMultiGenerator::WriteMacros(std::ostream& fout, cmLocalGenerator* root) { fout << "macro PROJ_NAME=" << root->GetProjectName() << '\n'; - cmValue ghsGpjMacros = - this->GetCMakeInstance()->GetCacheDefinition("GHS_GPJ_MACROS"); + cmValue ghsGpjMacros = root->GetMakefile()->GetDefinition("GHS_GPJ_MACROS"); if (ghsGpjMacros) { std::vector<std::string> expandedList = cmExpandedList(*ghsGpjMacros); for (std::string const& arg : expandedList) { @@ -589,8 +581,7 @@ void cmGlobalGhsMultiGenerator::WriteHighLevelDirectives( cmLocalGenerator* root, std::ostream& fout) { /* put primary target and customization files into project file */ - cmValue const tgt = - this->GetCMakeInstance()->GetCacheDefinition("GHS_PRIMARY_TARGET"); + cmValue const tgt = root->GetMakefile()->GetDefinition("GHS_PRIMARY_TARGET"); /* clang-format off */ fout << "primaryTarget=" << tgt << "\n" @@ -601,7 +592,7 @@ void cmGlobalGhsMultiGenerator::WriteHighLevelDirectives( /* clang-format on */ cmValue const customization = - this->GetCMakeInstance()->GetCacheDefinition("GHS_CUSTOMIZATION"); + root->GetMakefile()->GetDefinition("GHS_CUSTOMIZATION"); if (cmNonempty(customization)) { fout << "customization=" << cmGlobalGhsMultiGenerator::TrimQuotes(*customization) << '\n'; |