Browse Source

Merge topic 'QNX_CMAKE_SYSROOT'

32a6ab1f3b QNX: Add support for CMAKE_SYSROOT

Acked-by: Kitware Robot <[email protected]>
Merge-request: !4277
Brad King 5 years ago
parent
commit
571205fb6b

+ 3 - 0
Help/manual/cmake-toolchains.7.rst

@@ -233,6 +233,9 @@ value to those supported compilers when compiling:
   set(CMAKE_CXX_COMPILER QCC)
   set(CMAKE_CXX_COMPILER_TARGET ${arch})
 
+  set(CMAKE_SYSROOT $ENV{QNX_TARGET})
+
+
 Cross Compiling for Windows CE
 ------------------------------
 

+ 12 - 0
Modules/CMakeDetermineCompilerABI.cmake

@@ -161,6 +161,18 @@ function(CMAKE_DETERMINE_COMPILER_ABI lang src)
             break()
           endif()
         endforeach()
+      elseif(CMAKE_CXX_COMPILER_ID STREQUAL QCC)
+        foreach(dir ${implicit_dirs})
+          if (dir MATCHES "/lib$")
+            get_filename_component(assumedArchDir "${dir}" DIRECTORY)
+            get_filename_component(archParentDir "${assumedArchDir}" DIRECTORY)
+            if (archParentDir STREQUAL CMAKE_SYSROOT)
+              get_filename_component(archDirName "${assumedArchDir}" NAME)
+              set(CMAKE_${lang}_LIBRARY_ARCHITECTURE "${archDirName}" PARENT_SCOPE)
+              break()
+            endif()
+          endif()
+        endforeach()
       endif()
 
     else()

+ 3 - 0
Modules/Compiler/QCC.cmake

@@ -10,6 +10,9 @@ macro(__compiler_qcc lang)
   # http://www.qnx.com/developers/docs/6.4.0/neutrino/utilities/q/qcc.html#examples
   set(CMAKE_${lang}_COMPILE_OPTIONS_TARGET "-V")
 
+  set(CMAKE_PREFIX_LIBRARY_ARCHITECTURE "ON")
+
+  set(CMAKE_${lang}_COMPILE_OPTIONS_SYSROOT "-Wc,-isysroot,")
   set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-Wp,-isystem,")
   set(CMAKE_DEPFILE_FLAGS_${lang} "-Wp,-MD,<DEPFILE> -Wp,-MT,<OBJECT> -Wp,-MF,<DEPFILE>")
 

+ 7 - 1
Source/cmSearchPath.cxx

@@ -181,7 +181,13 @@ void cmSearchPath::AddPrefixPaths(const std::vector<std::string>& paths,
       const char* arch =
         this->FC->Makefile->GetDefinition("CMAKE_LIBRARY_ARCHITECTURE");
       if (arch && *arch) {
-        this->AddPathInternal(dir + subdir + "/" + arch, base);
+        if (this->FC->Makefile->IsDefinitionSet("CMAKE_SYSROOT") &&
+            this->FC->Makefile->IsDefinitionSet(
+              "CMAKE_PREFIX_LIBRARY_ARCHITECTURE")) {
+          this->AddPathInternal(cmStrCat('/', arch, dir, subdir), base);
+        } else {
+          this->AddPathInternal(cmStrCat(dir, subdir, '/', arch), base);
+        }
       }
     }
     std::string add = dir + subdir;