From 6e34aea93c71e3ac1667f93357695551e2ced09d Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 19 Sep 2012 14:04:13 -0400 Subject: [PATCH 1/2] Clang: Split Compiler/Clang* modules out from GNU (#13550) While Clang presents an almost identical interface to GNU there will be some differences. Split the compiler information modules to allow separate rules for Clang. Start by loading the GNU rules but leave a place to add Clang-specific information. --- Modules/Compiler/Clang-ASM.cmake | 6 +++++- Modules/Compiler/Clang-C.cmake | 3 ++- Modules/Compiler/Clang-CXX.cmake | 3 ++- Modules/Compiler/Clang.cmake | 25 +++++++++++++++++++++++++ 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 Modules/Compiler/Clang.cmake diff --git a/Modules/Compiler/Clang-ASM.cmake b/Modules/Compiler/Clang-ASM.cmake index a908b609f..16c9c159c 100644 --- a/Modules/Compiler/Clang-ASM.cmake +++ b/Modules/Compiler/Clang-ASM.cmake @@ -1 +1,5 @@ -include(Compiler/GNU-ASM) +include(Compiler/Clang) + +set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;S;asm) + +__compiler_clang(ASM) diff --git a/Modules/Compiler/Clang-C.cmake b/Modules/Compiler/Clang-C.cmake index f7baf686a..98fcd0b3f 100644 --- a/Modules/Compiler/Clang-C.cmake +++ b/Modules/Compiler/Clang-C.cmake @@ -1 +1,2 @@ -include(Compiler/GNU-C) +include(Compiler/Clang) +__compiler_clang(C) diff --git a/Modules/Compiler/Clang-CXX.cmake b/Modules/Compiler/Clang-CXX.cmake index d3c403a69..486e2af88 100644 --- a/Modules/Compiler/Clang-CXX.cmake +++ b/Modules/Compiler/Clang-CXX.cmake @@ -1 +1,2 @@ -include(Compiler/GNU-CXX) +include(Compiler/Clang) +__compiler_clang(CXX) diff --git a/Modules/Compiler/Clang.cmake b/Modules/Compiler/Clang.cmake new file mode 100644 index 000000000..f7be864f8 --- /dev/null +++ b/Modules/Compiler/Clang.cmake @@ -0,0 +1,25 @@ + +#============================================================================= +# Copyright 2002-2012 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +# This module is shared by multiple languages; use include blocker. +if(__COMPILER_CLANG) + return() +endif() +set(__COMPILER_CLANG 1) + +include(Compiler/GNU) + +macro(__compiler_clang lang) + __compiler_gnu(${lang}) +endmacro() From ada9efd3afb710a982f28f46196d5ec53ade199b Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 19 Sep 2012 14:04:23 -0400 Subject: [PATCH 2/2] Clang: All versions know about -fPIE (#13550) The GNU compiler information file tests for GNU >= 3.4 because earlier versions do not have the flag. The version number test is not valid for Clang compiler versions, but we know Clang supports the flag. --- Modules/Compiler/Clang.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/Modules/Compiler/Clang.cmake b/Modules/Compiler/Clang.cmake index f7be864f8..75a971dd7 100644 --- a/Modules/Compiler/Clang.cmake +++ b/Modules/Compiler/Clang.cmake @@ -22,4 +22,5 @@ include(Compiler/GNU) macro(__compiler_clang lang) __compiler_gnu(${lang}) + set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "-fPIE") endmacro()