summaryrefslogtreecommitdiff
path: root/Modules/CMakeDetermineCXXCompiler.cmake
Commit message (Collapse)AuthorAgeFilesLines
* Merge topic 'fix-clang-cross-compile-find-binutils'Brad King2014-09-081-1/+3
|\ | | | | | | | | 72d66818 Fix finding binutils when cross-compiling with Clang
| * Fix finding binutils when cross-compiling with ClangBrad King2014-09-051-1/+3
| | | | | | | | | | | | | | | | | | Since commit v3.0.0-rc1~342^2~2 (Add compiler target compile options, 2013-05-19) we use CMAKE_<LANG>_COMPILER_TARGET as the binutils prefix when cross-compiling with Clang. Fix the implementation to use the compiler target as the prefix only when it is set. Otherwise toolchain files not using CMAKE_<LANG>_COMPILER_TARGET cause the logic to use a prefix of just "-" and of course cannot find "-ar" or "-ld".
* | Replace MATCHES ".+" tests with NOT STREQUAL ""Rolf Eike Beer2014-04-141-1/+1
| |
* | Remove .* expressions from beginning and end of MATCHES regexsRolf Eike Beer2014-04-141-1/+1
|/ | | | | | | | | All these expressions work the same: "foo" ".*foo.*" "^.*foo.*$" This assumes that the "Intel*" expressions were meant to be "Intel.*".
* Xcode: Convert forced CMAKE_<LANG>_COMPILER to full path if possibleBrad King2014-03-101-0/+1
| | | | | | | During cross-compiling the toolchain file may use CMakeForceCompiler to force a compiler setting. When using the Xcode generator try to convert it to a full path by searching the PATH as is done for the Makefile generators.
* CMakeDetermine*Compiler: Factor out search for compiler in PATHBrad King2014-03-101-26/+1
| | | | | Factor out a _cmake_find_compiler_path helper macro to avoid duplication of the search for a full path to the compiler.
* CMakeDetermine*Compiler: Fix typo 'lile' => 'like'Stephen Kelly2014-01-221-1/+1
|
* Add compiler target compile options.Stephen Kelly2013-11-191-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | For clang, this allows passing -target <triple> to the compiler, and for qcc, -V<arch> using toolchain files containing something like set(triple arm-linux-gnueabihf) set(CMAKE_C_COMPILER "/usr/bin/clang") set(CMAKE_C_COMPILER_TARGET ${triple}) set(CMAKE_CXX_COMPILER "/usr/bin/clang++") set(CMAKE_CXX_COMPILER_TARGET ${triple}) or set(arch gcc_ntoarmv7le) set(CMAKE_C_COMPILER /opt/qnx650/host/linux/x86/usr/bin/qcc) set(CMAKE_C_COMPILER_TARGET ${arch}) set(CMAKE_CXX_COMPILER /opt/qnx650/host/linux/x86/usr/bin/QCC) set(CMAKE_CXX_COMPILER_TARGET ${arch}) Both clang and qcc are inherently cross compiler( driver)s. When cross-compiling with clang, use the CMAKE_${lang}_COMPILER_TARGET as the _CMAKE_TOOLCHAIN_PREFIX to find the appropriate binutils. When cross-compiling with QNX qcc, use the CMAKE_${lang}_COMPILER_TARGET to set the appropriate _CMAKE_TOOLCHAIN_PREFIX.
* Drop use of configure_file IMMEDIATE optionDaniele E. Domenichelli2013-11-131-1/+1
| | | | | | Since commit 7d47c693 (Drop compatibility with CMake < 2.4, 2013-10-08) we no longer need to use the configure_file IMMEDIATE option to support compatibility modes less than 2.0.
* Merge topic 'enable-language-require-compiler'Brad King2013-10-281-1/+1
|\ | | | | | | | | | | | | 3e04946 Require CMAKE_<LANG>_COMPILER to be found as a full path 6007f7c CMakeDetermineCompilerId: Always use compiler detected from IDE 332771c CMakeDetermine*Compiler: Remove temporary cache entry
| * CMakeDetermine*Compiler: Remove temporary cache entryBrad King2013-10-241-1/+1
| | | | | | | | | | | | | | | | When the user or toolchain file sets CMAKE_<LANG>_COMPILER to a name without a path we use find_program with CMAKE_<LANG>_COMPILER_WITH_PATH to search for the tool. Remove the temporary cache entry afterward to avoid exposing it to projects. It is not set by other logic paths so no one should be using it.
* | Merge topic 'ninja-use-deps'Brad King2013-10-281-1/+2
|\ \ | | | | | | | | | | | | eeb4aec Ninja: use deps = gcc/msvc feature
| * | Ninja: use deps = gcc/msvc featurePeter Kümmel2013-10-241-1/+2
| |/ | | | | | | cmcldeps is now only used for .rc file processing
* | Find appropriate binutils when cross-compiling with clangStephen Kelly2013-10-251-2/+2
|/ | | | | | | | | | One way to use clang as a cross-compiler is to create a symlink named <target>-clang, which is equivalent to running clang -target <target> Extract the toolchain prefix to find the binutils executables.
* Add regexps for the IAR toolchain to the vendor list.Alex Neundorf2013-04-151-0/+7
| | | | | | | | | The IAR compilers produce object files where the plain strings at least sometimes can't be found, see: http://www.cmake.org/Bug/view.php?id=10176#c19598 Alex
* TI compiler: add automatic detection of prefix and suffixesAlex Neundorf2013-03-141-0/+8
| | | | | | | The TI cross compilers are named e.g. cl6x or armcl, the accompanying strip and ar have the same prefixes/suffixes. Alex
* Determine C/CXX/Fortran compiler: fix indentationAlex Neundorf2013-03-141-10/+10
| | | | Alex
* Determine C/CXX/Fortran compiler: minor restructuringAlex Neundorf2013-03-141-3/+6
| | | | | | | No functional changes, only change the way the if()-condition works, to make it easier to add more cases. Alex
* Merge topic 'cmake-platform-info-version'Brad King2012-08-301-1/+1
|\ | | | | | | | | | | | | e5fee8a Store ABI detection results in compiler information files 3df81b4 Move CMAKE_<LANG>_COMPILER_WORKS to compiler information files 7195aca Make platform information files specific to the CMake version
| * Make platform information files specific to the CMake versionBrad King2012-08-241-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | At the top of a build tree we configure inside the CMakeFiles directory files such as "CMakeSystem.cmake" and "CMake<lang>Compiler.cmake" to save information detected about the system and compilers in use. The method of detection and the exact results store varies across CMake versions as things improve. This leads to problems when loading files configured by a different version of CMake. Previously we ignored such existing files only if the major.minor part of the CMake version component changed, and depended on the CMakeCache.txt to tell us the last version of CMake that wrote the files. This led to problems if the user deletes the CMakeCache.txt or we add required information to the files in a patch-level release of CMake (still a "feature point" release by modern CMake versioning convention). Ensure that we always have version-consistent platform information files by storing them in a subdirectory named with the CMake version. Every version of CMake will do its own system and compiler identification checks even when a build tree has already been configured by another version of CMake. Stored results will not clobber those from other versions of CMake which may be run again on the same tree in the future. Loaded results will match what the system and language modules expect. Rename the undocumented variable CMAKE_PLATFORM_ROOT_BIN to CMAKE_PLATFORM_INFO_DIR to clarify its purpose. The new variable points at the version-specific directory while the old variable did not.
* | Merge topic 'ide-compiler-id'David Cole2012-08-241-70/+58
|\ \ | |/ | | | | | | | | | | | | | | | | | | | | 403ead6 Document CMAKE_<LANG>_COMPILER_(ID|VERSION) values 8be51f6 Test variables CMAKE_(C|CXX|Fortran)_COMPILER(|_ID|_VERSION) ec22a9b Cleanly enable a language in multiple subdirectories 66cb335 VS: Detect the compiler id and tool location 89595d6 VS10: Define CMAKE_VS_PLATFORM_TOOLSET variable 965a69d Xcode: Detect the compiler id and tool location 9a9e1ee CMakeDetermineCompilerId: Prepare to detect IDE compiler id b8b5c83 Re-order C/C++/Fortran compiler determination logic
| * VS: Detect the compiler id and tool locationBrad King2012-08-221-4/+0
| | | | | | | | | | | | | | Configure a hand-generated Visual Studio project to build the compiler id source file since we cannot run the compiler command-line tool directly. Add a post-build command to print out the full path to the compiler tool. Parse the full path to the compiler tool from the build output.
| * Xcode: Detect the compiler id and tool locationBrad King2012-08-221-0/+2
| | | | | | | | | | | | | | | | Configure a hand-generated Xcode project to build the compiler id source file since we cannot run the compiler command-line tool directly. Add a post-build shell script phase to print out the compiler toolset build setting. Run xcodebuild to compile the identification binary. Parse the full path to the compiler tool from the xcodebuild output.
| * Re-order C/C++/Fortran compiler determination logicBrad King2012-08-221-70/+60
| | | | | | | | | | | | | | | | | | | | | | | | Re-organize CMakeDetermine(C|CXX|Fortran)Compiler.cmake to search for the compiler command-line tool only under generators for which it makes sense. For the Visual Studio generators we do not expect to find the compiler tool from the environment, nor would we use the result anyway. Furthermore, set CMAKE_${lang}_COMPILER_ID_TEST_FLAGS only when it has a chance to be used. Extract _CMAKE_TOOLCHAIN_LOCATION from the compiler path after running the compiler id step so in the future that step can help find the path to the compiler.
* | Remove CMake multiline block-end command argumentsMarcin Wojdyr2012-08-151-3/+1
|/ | | | removing arguments omitted in 9db3116226cb99fcf54e936c833953abcde9b729
* Remove CMake-language block-end command argumentsKitware Robot2012-08-131-19/+19
| | | | | | | | | | | | | | | | | Ancient versions of CMake required else(), endif(), and similar block termination commands to have arguments matching the command starting the block. This is no longer the preferred style. Run the following shell code: for c in else endif endforeach endfunction endmacro endwhile; do echo 's/\b'"$c"'\(\s*\)(.\+)/'"$c"'\1()/' done >convert.sed && git ls-files -z -- bootstrap '*.cmake' '*.cmake.in' '*CMakeLists.txt' | egrep -z -v '^(Utilities/cm|Source/kwsys/)' | egrep -z -v 'Tests/CMakeTests/While-Endwhile-' | xargs -0 sed -i -f convert.sed && rm convert.sed
* Convert CMake-language commands to lower caseKitware Robot2012-08-131-85/+85
| | | | | | | | | | | | | | | | | Ancient CMake versions required upper-case commands. Later command names became case-insensitive. Now the preferred style is lower-case. Run the following shell code: cmake --help-command-list | grep -v "cmake version" | while read c; do echo 's/\b'"$(echo $c | tr '[:lower:]' '[:upper:]')"'\(\s*\)(/'"$c"'\1(/g' done >convert.sed && git ls-files -z -- bootstrap '*.cmake' '*.cmake.in' '*CMakeLists.txt' | egrep -z -v '^(Utilities/cm|Source/kwsys/)' | xargs -0 sed -i -f convert.sed && rm convert.sed
* Prefer generic system compilers by default for C, C++, and FortranBrad King2012-08-021-1/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Teach CMake to prefer the system default compiler automatically when no compiler is specified. By default use "cc" for C, "CC" for C++, and "f95" for Fortran. Load a new Platform/<os>-<lang>.cmake module to allow each platform to specify for each language its system compiler name(s) and/or exclude certain names. Create Platform/(CYGWIN|Darwin|Linux|Windows)-CXX.cmake modules to specify "c++" as the system C++ compiler name for these platforms. On systems that use case-insensitive filesystems exclude C++ compiler names that are distinguished from C compiler names only by case. This will change the default compiler selection for existing build scripts that do not specify a compiler when run on machines with separate system and GNU compilers both installed in the PATH. We do not make this change in default behavior lightly. However: (1) If a given build really needs specific compilers one should specify them explicitly e.g. by setting CC, CXX, and FC in the environment. (2) The motivating case is to prefer the system Clang on newer OS X systems over the older GNU compilers typically also installed. On such systems the names "cc" and "c++" link to Clang. This is the first platform known to CMake on which "c++" is not a GNU compiler. The old behavior selected "gcc" for C and "c++" C++ and therefore chooses GNU for C and Clang for C++ by default. The new behavior selects GNU or Clang consistently for both languages on older or newer OS X systems, respectively. (3) Other than the motivating OS X case the conditions under which the behavior changes do not tend to exist in default OS installations. They typically occur only on non-GNU systems with manually-installed GNU compilers. (4) The consequences of the new behavior are not dire. At worst the project fails to compile with the system compiler when it previously worked with the non-system GNU compiler. Such failure is easy to work around (see #1). In short this change creates a more sensible default behavior everywhere and fixes poor default behavior on a widely-used platform at the cost of a modest change in behavior in less-common conditions.
* Factor common code out of CMakeDetermine(ASM|C|CXX|Fortran)CompilerBrad King2012-08-021-13/+5
| | | | | | | | | | | | | | | | | The compiler candidate list selection and search code for C, C++, ASM, and Fortran languages was duplicated across four modules. To look for compilers adjacent to already-enabled languages the C and CXX modules each used _CMAKE_USER_(C|CXX)_COMPILER_PATH and the ASM module used _CMAKE_TOOLCHAIN_LOCATION. Since commit 4debb7ac (Bias Fortran compiler search with C/C++ compilers, 2009-09-09) CMake prefers Fortran compilers matching the vendor and directory of an enabled C or C++ compiler. Factor out the common functionality among the four languages into a new CMakeDetermineCompiler module. Generalize the Fortran implementation so that all languages may each use the vendor and directory of the other languages that have already been enabled. For now do not list any vendor-specific names for C, C++, or ASM so that only the directory preference is used for these languages (existing behavior).
* CMakeDetermine(C|CXX)Compiler: Consider Clang compilersBrad King2012-07-311-1/+1
| | | | | | Look for "clang" or "clang++" compiler executables so Clang will be used when it is the only compiler available. Prefer them last to avoid changing compiler default preferences for existing scripts.
* Ninja: allow spaces in source pathPeter Kuemmel2012-06-081-0/+1
| | | | And make /showIncude prefix visible for all build rules
* Set CMAKE_<lang>_COMPILER_ID for VS generatorsBrad King2011-09-021-4/+1
| | | | | | | | | | | | | Currently the VS generators do not support Intel C/C++ .icproj files and the MS tools do not include a Fortran compiler. Therefore we can always set the C and CXX compiler IDs to "MSVC" and the Fortran ID to "Intel". This fixes a regression in support for the Intel Fortran compiler under the VS plugin introduced by commit cd43636c (Modernize Intel compiler info on Windows, 2010-12-16). The commit moved the compiler information into platform files that only load when the proper compiler id is set. It worked for the NMake Makefiles generator but not for the VS IDE generator because it did not set the compiler id.
* Fix parsing of compiler name with a version numberAlex Neundorf2011-01-261-4/+5
| | | | | | | This fixes #11679, the toolchain prefix was not correctly detected for arm-eabi-gcc-4.5.2 Alex
* Strip trailing whitespace.Alex Neundorf2011-01-261-10/+10
| | | | Alex
* Modules: Fix spelling 'To distributed' -> 'To distribute'Todd Gamblin2010-08-091-1/+1
|
* Change the way 32/64 bit compiles are detected with MSVC and intel makefile ↵Bill Hoffman2009-11-191-1/+4
| | | | builds. Use the platform ID preprocessor approach.
* Convert CMake non-find modules to BSD LicenseBrad King2009-09-281-0/+13
| | | | | | | This adds copyright/license notification blocks CMake's non-find modules. Most of the modules had no notices at all. Some had notices referring to the BSD license already. This commit normalizes existing notices and adds missing notices.
* BUG: only check for a toolchain prefix (e.g. "arm-linux-" inAlexander Neundorf2008-09-081-20/+24
| | | | | | "arm-linux-gcc") if we are cross compiling and the compiler is gcc Alex
* BUG: #7359 make llvm-gcc work, by explicitely excluding "llvm-" from ↵Alexander Neundorf2008-09-071-1/+8
| | | | | | | | _CMAKE_TOOLCHAIN_PREFIX (use the (relatively) new CMAKE_MATCH_x variables set by all regex operations) Alex
* BUG: make the toolchain-prefix recognition work with prefixes which containAlexander Neundorf2008-05-151-4/+7
| | | | | | | dots (as in arm-unknown-nto-qnx6.3.0-gcc.exe), NAME_WE returns only up to the 6, instead of everything in front of the .exe Alex
* ENH: Improvied compiler identification robustnessBrad King2008-02-251-1/+3
| | | | | | | | - Write a single source file into the compiler id directory - This avoid requiring the compiler to behave correctly with respect to include rules and the current working directory - Helps to identify cross-compiling toolchains with unusual default behavior
* ENH: When detecting the compiler id try compiling only to an object file.Brad King2008-02-111-0/+8
|
* BUG: When configuring compiler information files into the CMakeFiles ↵Brad King2008-02-041-2/+3
| | | | directory in the project build tree, use IMMEDIATE option for CONFIGURE_FILE explicitly. It is needed in case the user sets CMAKE_BACKWARDS_COMPATIBILITY to 2.0 or lower.
* BUG: When forcing the C and CXX compilers do not try to detect the ABI ↵Brad King2008-02-031-2/+3
| | | | information. Cleanup configured language compiler info files by always using @ONLY. This addresses bug#6297.
* ENH: if CMAKE_(C|CXX)_COMPILER is preset to a list of two elements, use theAlexander Neundorf2007-07-181-0/+9
| | | | | | first one as the compiler and the second one as ARG1 for the compiler Alex
* ENH: remove support for presetting CMAKE_SYSTEM_INFO_FILE,Alexander Neundorf2007-07-021-15/+1
| | | | | | | | | | | | | | | | CMAKE_SYSTEM_AND_C_COMPILER_INFO_FILE, CMAKE_SYSTEM_AND_CXX_COMPILER_INFO_FILE, CMAKE_SYSTEM_AND_C_COMPILER_AND_PROCESSOR_INFO_FILE and CMAKE_SYSTEM_AND_CXX_COMPILER_AND_PROCESSOR_INFO_FILE Instead of presetting these variables to arbitrary filenames, users should set up CMAKE_SYSTEM_NAME and the compilers correctly and also create a Platform/ directory so these files will all follow the official cmake style, which should make it easier to understand and debug project which have their own platform/toolchain support files. -remove support for a suffix to MS crosscompilers, since this is not (yet) supported by cmake and might confuse users Alex
* ENH: check for CMAKE_HOST_SYSTEM_NAME to decide whether to loadAlexander Neundorf2007-06-261-1/+1
| | | | | | | | | CMakeDetermineSystem.cmake, since CMAKE_SYSTEM_NAME might already be preset when using cmake for cross compiling use type STRING instead of FILEPATH since otherwise a strange filename was generated Alex
* ENH: split cmGlobalGenerator::SetLanguageEnabled() in two parts, where theAlexander Neundorf2007-06-111-11/+0
| | | | | | | | second part copies the values from the cmake variables into internal maps. So this can now be done after the compiler-specific information has been loaded, which can now overwrite more settings. Alex
* BUG: don't fail if a compiler is given in CMAKE_C/CXX_COMPILER but it can'tAlexander Neundorf2007-05-211-2/+10
| | | | | | be found in the path Alex
* ENH: merge CMake-CrossCompileBasic to HEADAlexander Neundorf2007-05-171-14/+61
| | | | | | | | | | | | | | | | | | | | | | | | -add a RESULT_VARIABLE to INCLUDE() -add CMAKE_TOOLCHAIN_FILE for specifiying your (potentially crosscompiling) toolchain -have TRY_RUN() complain if you try to use it in crosscompiling mode (which were compiled but cannot run on this system) -use CMAKE_EXECUTABLE_SUFFIX in TRY_RUN(), probably TRY_RUN won't be able to run the executables if they have a different suffix because they are probably crosscompiled, but nevertheless it should be able to find them -make several cmake variables presettable by the user: CMAKE_C/CXX_COMPILER, CMAKE_C/CXX_OUTPUT_EXTENSION, CMAKE_SYSTEM_NAME, CMAKE_SYSTEM_INFO_FILE -support prefix for GNU toolchains (arm-elf-gcc, arm-elf-ar, arm-elf-strip etc.) -move ranlib on OSX from the file command to a command in executed in cmake_install.cmake -add support for stripping during install in cmake_install.cmake -split out cl.cmake from Windows-cl.cmake, first (very incomplete) step to support MS crosscompiling tools -remove stdio.h from the simple C program which checks if the compiler works, since this may not exist for some embedded platforms -create a new CMakeFindBinUtils.cmake which collects the search fro ar, ranlib, strip, ld, link, install_name_tool and other tools like these -add support for CMAKE_FIND_ROOT_PATH for all FIND_XXX commands, which is a list of directories which will be prepended to all search directories, right now as a cmake variable, turning it into a global cmake property may need some more work -remove cmTestTestHandler::TryExecutable(), it's unused -split cmFileCommand::HandleInstall() into slightly smaller functions Alex