Browse Source

Merge topic 'ghs-updates'

04de9007 GHS: Fix generated file path slashes and quoting for 6.1.6
fbe0de92 GHS: Tell MULTI to delete .elf.ael file
63591b94 GHS: Find latest 'int' directory
Brad King 10 years ago
parent
commit
5ed30f30f5
2 changed files with 41 additions and 18 deletions
  1. 29 7
      Modules/Platform/GHS-MULTI-Initialize.cmake
  2. 12 11
      Source/cmGhsMultiTargetGenerator.cxx

+ 29 - 7
Modules/Platform/GHS-MULTI-Initialize.cmake

@@ -13,13 +13,35 @@
 #  License text for the above reference.)
 
 #Setup Greenhills MULTI specific compilation information
-find_path(GHS_INT_DIRECTORY INTEGRITY.ld PATHS
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\GreenHillsSoftware6433c345;InstallLocation]" #int1122
-  "C:/ghs/int1122"
-  "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\GreenHillsSoftware289b6625;InstallLocation]" #int1104
-  "C:/ghs/int1104"
-  DOC "Path to integrity directory"
-  )
+
+if (NOT GHS_INT_DIRECTORY)
+  #Assume the C:/ghs/int#### directory that is latest is prefered
+  set(GHS_EXPECTED_ROOT "C:/ghs")
+  if (EXISTS ${GHS_EXPECTED_ROOT})
+    FILE(GLOB GHS_CANDIDATE_INT_DIRS RELATIVE
+      ${GHS_EXPECTED_ROOT} ${GHS_EXPECTED_ROOT}/*)
+    string(REGEX MATCHALL  "int[0-9][0-9][0-9][0-9]" GHS_CANDIDATE_INT_DIRS
+      ${GHS_CANDIDATE_INT_DIRS})
+    if (GHS_CANDIDATE_INT_DIRS)
+      list(SORT GHS_CANDIDATE_INT_DIRS)
+      list(GET GHS_CANDIDATE_INT_DIRS -1 GHS_INT_DIRECTORY)
+      string(CONCAT GHS_INT_DIRECTORY ${GHS_EXPECTED_ROOT} "/"
+        ${GHS_INT_DIRECTORY})
+    endif ()
+  endif ()
+
+  #Try to look for known registry values
+  if (NOT GHS_INT_DIRECTORY)
+    find_path(GHS_INT_DIRECTORY INTEGRITY.ld PATHS
+      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\GreenHillsSoftware6433c345;InstallLocation]" #int1122
+      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\GreenHillsSoftware289b6625;InstallLocation]" #int1104
+      )
+  endif ()
+
+  set(GHS_INT_DIRECTORY ${GHS_INT_DIRECTORY} CACHE PATH
+    "Path to integrity directory")
+endif ()
+
 set(GHS_OS_DIR ${GHS_INT_DIRECTORY} CACHE PATH "OS directory")
 set(GHS_PRIMARY_TARGET "arm_integrity.tgt" CACHE STRING "target for compilation")
 set(GHS_BSP_NAME "simarm" CACHE STRING "BSP name")

+ 12 - 11
Source/cmGhsMultiTargetGenerator.cxx

@@ -151,10 +151,6 @@ void cmGhsMultiTargetGenerator::Generate()
       this->WriteTargetLinkLibraries();
       }
     this->WriteCustomCommands();
-    if (this->DynamicDownload)
-      {
-      *this->GetFolderBuildStreams() << "    " << this->DDOption << std::endl;
-      }
 
     this->WriteSources(objectSources);
     }
@@ -230,9 +226,11 @@ void cmGhsMultiTargetGenerator::WriteTypeSpecifics(const std::string &config,
       }
     if (this->IsTargetGroup())
       {
-      *this->GetFolderBuildStreams() << "    -non_shared" << std::endl;
-      *this->GetFolderBuildStreams() << "    -o \"" << outputDir
-                                     << outputFilename << ".elf\""
+      *this->GetFolderBuildStreams()
+          << "    {optgroup=GhsCommonOptions} -o \"" << outputDir
+          << outputFilename << ".elf\"" << std::endl;
+      *this->GetFolderBuildStreams() << "    :extraOutputFile=\"" << outputDir
+                                     << outputFilename << ".elf.ael\""
                                      << std::endl;
       }
     else
@@ -454,14 +452,17 @@ void cmGhsMultiTargetGenerator::WriteSources(
       this->Makefile->GetHomeOutputDirectory(), sgPath,
       GhsMultiGpj::SUBPROJECT, this->RelBuildFilePath);
 
-    if ((*si)->GetExtension() == ".int")
+    std::string fullSourcePath((*si)->GetFullPath());
+    if ((*si)->GetExtension() == "int" || (*si)->GetExtension() == "bsp")
       {
-      *this->FolderBuildStreams[sgPath] << "\"" << (*si)->GetFullPath() << "\""
-                                        << std::endl;
+      *this->FolderBuildStreams[sgPath] << fullSourcePath << std::endl;
       }
     else
       {
-      *this->FolderBuildStreams[sgPath] << (*si)->GetFullPath() << std::endl;
+      //WORKAROUND: GHS MULTI needs the path to use backslashes without quotes
+      //  to open files in search as of version 6.1.6
+      cmsys::SystemTools::ReplaceString(fullSourcePath, "/", "\\");
+      *this->FolderBuildStreams[sgPath] << fullSourcePath << std::endl;
       }
 
     if ("ld" != (*si)->GetExtension() && "int" != (*si)->GetExtension() &&