Merge topic 'apple-clang-id'
1763c31
Set policy CMP0025 to NEW while building CMake itselfaa53ee5
Add policy CMP0025 for Apple Clang compiler id compatibilityab65862
Clang: Add separate "AppleClang" compiler id
This commit is contained in:
commit
12a7e2b10c
|
@ -11,6 +11,9 @@
|
||||||
#=============================================================================
|
#=============================================================================
|
||||||
cmake_minimum_required(VERSION 2.8.2 FATAL_ERROR)
|
cmake_minimum_required(VERSION 2.8.2 FATAL_ERROR)
|
||||||
set(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required
|
set(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required
|
||||||
|
if(POLICY CMP0025)
|
||||||
|
cmake_policy(SET CMP0025 NEW)
|
||||||
|
endif()
|
||||||
project(CMake)
|
project(CMake)
|
||||||
|
|
||||||
if(CMAKE_BOOTSTRAP)
|
if(CMAKE_BOOTSTRAP)
|
||||||
|
|
|
@ -29,7 +29,12 @@
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#elif defined(__clang__)
|
#elif defined(__clang__)
|
||||||
|
# if defined(__apple_build_version__)
|
||||||
|
# define COMPILER_ID "AppleClang"
|
||||||
|
# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
|
||||||
|
# else
|
||||||
# define COMPILER_ID "Clang"
|
# define COMPILER_ID "Clang"
|
||||||
|
# endif
|
||||||
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
|
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
|
||||||
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
|
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
|
||||||
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
|
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
|
||||||
|
|
|
@ -34,7 +34,12 @@
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#elif defined(__clang__)
|
#elif defined(__clang__)
|
||||||
|
# if defined(__apple_build_version__)
|
||||||
|
# define COMPILER_ID "AppleClang"
|
||||||
|
# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
|
||||||
|
# else
|
||||||
# define COMPILER_ID "Clang"
|
# define COMPILER_ID "Clang"
|
||||||
|
# endif
|
||||||
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
|
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
|
||||||
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
|
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
|
||||||
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
|
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
include(Compiler/Clang-ASM)
|
|
@ -0,0 +1 @@
|
||||||
|
include(Compiler/Clang-C)
|
|
@ -0,0 +1 @@
|
||||||
|
include(Compiler/Clang-CXX)
|
|
@ -0,0 +1 @@
|
||||||
|
include(Platform/Darwin-Clang-C)
|
|
@ -0,0 +1 @@
|
||||||
|
include(Platform/Darwin-Clang-CXX)
|
|
@ -1622,6 +1622,7 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
|
||||||
"Possible values include:\n"
|
"Possible values include:\n"
|
||||||
" Absoft = Absoft Fortran (absoft.com)\n"
|
" Absoft = Absoft Fortran (absoft.com)\n"
|
||||||
" ADSP = Analog VisualDSP++ (analog.com)\n"
|
" ADSP = Analog VisualDSP++ (analog.com)\n"
|
||||||
|
" AppleClang = Apple Clang (apple.com)\n"
|
||||||
" Clang = LLVM Clang (clang.llvm.org)\n"
|
" Clang = LLVM Clang (clang.llvm.org)\n"
|
||||||
" Cray = Cray Compiler (cray.com)\n"
|
" Cray = Cray Compiler (cray.com)\n"
|
||||||
" Embarcadero, Borland = Embarcadero (embarcadero.com)\n"
|
" Embarcadero, Borland = Embarcadero (embarcadero.com)\n"
|
||||||
|
|
|
@ -624,6 +624,9 @@ cmGlobalGenerator::EnableLanguage(std::vector<std::string>const& languages,
|
||||||
{
|
{
|
||||||
this->LanguageToOriginalSharedLibFlags[lang] = sharedLibFlags;
|
this->LanguageToOriginalSharedLibFlags[lang] = sharedLibFlags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Translate compiler ids for compatibility.
|
||||||
|
this->CheckCompilerIdCompatibility(mf, lang);
|
||||||
} // end for each language
|
} // end for each language
|
||||||
|
|
||||||
// Now load files that can override any settings on the platform or for
|
// Now load files that can override any settings on the platform or for
|
||||||
|
@ -639,6 +642,44 @@ cmGlobalGenerator::EnableLanguage(std::vector<std::string>const& languages,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void cmGlobalGenerator::CheckCompilerIdCompatibility(cmMakefile* mf,
|
||||||
|
std::string lang)
|
||||||
|
{
|
||||||
|
std::string compilerIdVar = "CMAKE_" + lang + "_COMPILER_ID";
|
||||||
|
const char* compilerId = mf->GetDefinition(compilerIdVar.c_str());
|
||||||
|
if(compilerId && strcmp(compilerId, "AppleClang") == 0)
|
||||||
|
{
|
||||||
|
cmPolicies* policies = this->CMakeInstance->GetPolicies();
|
||||||
|
switch(mf->GetPolicyStatus(cmPolicies::CMP0025))
|
||||||
|
{
|
||||||
|
case cmPolicies::WARN:
|
||||||
|
if(!this->CMakeInstance->GetIsInTryCompile())
|
||||||
|
{
|
||||||
|
cmOStringStream w;
|
||||||
|
w << policies->GetPolicyWarning(cmPolicies::CMP0025) << "\n"
|
||||||
|
"Converting " << lang <<
|
||||||
|
" compiler id \"AppleClang\" to \"Clang\" for compatibility."
|
||||||
|
;
|
||||||
|
mf->IssueMessage(cmake::AUTHOR_WARNING, w.str());
|
||||||
|
}
|
||||||
|
case cmPolicies::OLD:
|
||||||
|
// OLD behavior is to convert AppleClang to Clang.
|
||||||
|
mf->AddDefinition(compilerIdVar.c_str(), "Clang");
|
||||||
|
break;
|
||||||
|
case cmPolicies::REQUIRED_IF_USED:
|
||||||
|
case cmPolicies::REQUIRED_ALWAYS:
|
||||||
|
mf->IssueMessage(
|
||||||
|
cmake::FATAL_ERROR,
|
||||||
|
policies->GetRequiredPolicyError(cmPolicies::CMP0025)
|
||||||
|
);
|
||||||
|
case cmPolicies::NEW:
|
||||||
|
// NEW behavior is to keep AppleClang.
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
const char*
|
const char*
|
||||||
cmGlobalGenerator::GetLanguageOutputExtension(cmSourceFile const& source)
|
cmGlobalGenerator::GetLanguageOutputExtension(cmSourceFile const& source)
|
||||||
|
|
|
@ -383,6 +383,8 @@ private:
|
||||||
void WriteSummary();
|
void WriteSummary();
|
||||||
void WriteSummary(cmTarget* target);
|
void WriteSummary(cmTarget* target);
|
||||||
|
|
||||||
|
void CheckCompilerIdCompatibility(cmMakefile* mf, std::string lang);
|
||||||
|
|
||||||
cmExternalMakefileProjectGenerator* ExtraGenerator;
|
cmExternalMakefileProjectGenerator* ExtraGenerator;
|
||||||
|
|
||||||
// track files replaced during a Generate
|
// track files replaced during a Generate
|
||||||
|
|
|
@ -620,6 +620,23 @@ cmPolicies::cmPolicies()
|
||||||
"The NEW behavior for this policy is to not to allow including the "
|
"The NEW behavior for this policy is to not to allow including the "
|
||||||
"result of an export() command.",
|
"result of an export() command.",
|
||||||
2,8,13,0, cmPolicies::WARN);
|
2,8,13,0, cmPolicies::WARN);
|
||||||
|
|
||||||
|
this->DefinePolicy(
|
||||||
|
CMP0025, "CMP0025",
|
||||||
|
"Compiler id for Apple Clang is now AppleClang.",
|
||||||
|
"CMake >= 2.8.13 recognize that Apple Clang is a different compiler "
|
||||||
|
"than upstream Clang and that they have different version numbers. "
|
||||||
|
"CMake now prefers to present this to projects by setting "
|
||||||
|
"CMAKE_<LANG>_COMPILER_ID to \"AppleClang\" instead of \"Clang\". "
|
||||||
|
"However, existing projects may assume the compiler id for Apple Clang "
|
||||||
|
"is just \"Clang\" as it was in CMake < 2.8.13. "
|
||||||
|
"Therefore this policy determines for Apple Clang which compiler id "
|
||||||
|
"to report in CMAKE_<LANG>_COMPILER_ID after <LANG> is enabled by "
|
||||||
|
"the project() or enable_language() command."
|
||||||
|
"\n"
|
||||||
|
"The OLD behavior for this policy is to use compiler id \"Clang\". "
|
||||||
|
"The NEW behavior for this policy is to use compiler id \"AppleClang\".",
|
||||||
|
2,8,13,0, cmPolicies::WARN);
|
||||||
}
|
}
|
||||||
|
|
||||||
cmPolicies::~cmPolicies()
|
cmPolicies::~cmPolicies()
|
||||||
|
|
|
@ -75,6 +75,7 @@ public:
|
||||||
CMP0022, ///< INTERFACE_LINK_LIBRARIES defines the link interface
|
CMP0022, ///< INTERFACE_LINK_LIBRARIES defines the link interface
|
||||||
CMP0023, ///< Disallow mixing keyword and plain tll signatures
|
CMP0023, ///< Disallow mixing keyword and plain tll signatures
|
||||||
CMP0024, ///< Disallow including export() result.
|
CMP0024, ///< Disallow including export() result.
|
||||||
|
CMP0025, ///< Compiler id for Apple Clang is now AppleClang
|
||||||
|
|
||||||
/** \brief Always the last entry.
|
/** \brief Always the last entry.
|
||||||
*
|
*
|
||||||
|
|
|
@ -85,6 +85,9 @@
|
||||||
# written.
|
# written.
|
||||||
|
|
||||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.3 FATAL_ERROR)
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.3 FATAL_ERROR)
|
||||||
|
IF(POLICY CMP0025)
|
||||||
|
CMAKE_POLICY(SET CMP0025 NEW)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# If a namespace is not specified, use "kwsys" and enable testing.
|
# If a namespace is not specified, use "kwsys" and enable testing.
|
||||||
|
|
|
@ -9,7 +9,7 @@ set(SRCS)
|
||||||
# and also generate assembler files from C:
|
# and also generate assembler files from C:
|
||||||
if("${CMAKE_GENERATOR}" MATCHES "Makefile|Xcode" AND
|
if("${CMAKE_GENERATOR}" MATCHES "Makefile|Xcode" AND
|
||||||
NOT CMAKE_OSX_ARCHITECTURES)
|
NOT CMAKE_OSX_ARCHITECTURES)
|
||||||
if(("${CMAKE_C_COMPILER_ID}" MATCHES "^(GNU|Clang|HP|SunPro|XL)$") OR ("${CMAKE_C_COMPILER_ID}" STREQUAL "Intel" AND UNIX))
|
if(("${CMAKE_C_COMPILER_ID}" MATCHES "^(GNU|Clang|AppleClang|HP|SunPro|XL)$") OR ("${CMAKE_C_COMPILER_ID}" STREQUAL "Intel" AND UNIX))
|
||||||
set(C_FLAGS "${CMAKE_C_FLAGS}")
|
set(C_FLAGS "${CMAKE_C_FLAGS}")
|
||||||
separate_arguments(C_FLAGS)
|
separate_arguments(C_FLAGS)
|
||||||
if(CMAKE_OSX_SYSROOT AND CMAKE_C_SYSROOT_FLAG AND NOT ";${C_FLAGS};" MATCHES ";${CMAKE_C_SYSROOT_FLAG};")
|
if(CMAKE_OSX_SYSROOT AND CMAKE_C_SYSROOT_FLAG AND NOT ";${C_FLAGS};" MATCHES ";${CMAKE_C_SYSROOT_FLAG};")
|
||||||
|
|
|
@ -2,7 +2,7 @@ cmake_minimum_required (VERSION 2.6)
|
||||||
project(IncludeDirectories)
|
project(IncludeDirectories)
|
||||||
|
|
||||||
if (((CMAKE_C_COMPILER_ID STREQUAL GNU AND CMAKE_C_COMPILER_VERSION VERSION_GREATER 4.4)
|
if (((CMAKE_C_COMPILER_ID STREQUAL GNU AND CMAKE_C_COMPILER_VERSION VERSION_GREATER 4.4)
|
||||||
OR CMAKE_C_COMPILER_ID STREQUAL Clang)
|
OR CMAKE_C_COMPILER_ID STREQUAL Clang OR CMAKE_C_COMPILER_ID STREQUAL AppleClang)
|
||||||
AND (CMAKE_GENERATOR STREQUAL "Unix Makefiles" OR CMAKE_GENERATOR STREQUAL "Ninja"))
|
AND (CMAKE_GENERATOR STREQUAL "Unix Makefiles" OR CMAKE_GENERATOR STREQUAL "Ninja"))
|
||||||
include(CheckCXXCompilerFlag)
|
include(CheckCXXCompilerFlag)
|
||||||
check_cxx_compiler_flag(-Wunused-variable run_sys_includes_test)
|
check_cxx_compiler_flag(-Wunused-variable run_sys_includes_test)
|
||||||
|
|
|
@ -36,6 +36,9 @@ function(run_cmake test)
|
||||||
if(NOT DEFINED RunCMake_TEST_OPTIONS)
|
if(NOT DEFINED RunCMake_TEST_OPTIONS)
|
||||||
set(RunCMake_TEST_OPTIONS "")
|
set(RunCMake_TEST_OPTIONS "")
|
||||||
endif()
|
endif()
|
||||||
|
if(APPLE)
|
||||||
|
list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0025=NEW)
|
||||||
|
endif()
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND ${CMAKE_COMMAND} "${RunCMake_TEST_SOURCE_DIR}"
|
COMMAND ${CMAKE_COMMAND} "${RunCMake_TEST_SOURCE_DIR}"
|
||||||
-G "${RunCMake_GENERATOR}"
|
-G "${RunCMake_GENERATOR}"
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.3 FATAL_ERROR)
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.3 FATAL_ERROR)
|
||||||
|
IF(POLICY CMP0025)
|
||||||
|
CMAKE_POLICY(SET CMP0025 NEW)
|
||||||
|
ENDIF()
|
||||||
PROJECT(LIBCURL C)
|
PROJECT(LIBCURL C)
|
||||||
|
|
||||||
# Setup package meta-data
|
# Setup package meta-data
|
||||||
|
|
|
@ -56,7 +56,7 @@ SET(CMAKE_REQUIRED_FLAGS)
|
||||||
|
|
||||||
# Disable warnings to avoid changing 3rd party code.
|
# Disable warnings to avoid changing 3rd party code.
|
||||||
IF("${CMAKE_C_COMPILER_ID}" MATCHES
|
IF("${CMAKE_C_COMPILER_ID}" MATCHES
|
||||||
"^(GNU|Clang|XL|VisualAge|SunPro|MIPSpro|HP|Intel)$")
|
"^(GNU|Clang|AppleClang|XL|VisualAge|SunPro|MIPSpro|HP|Intel)$")
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w")
|
||||||
ELSEIF("${CMAKE_C_COMPILER_ID}" MATCHES "^(PathScale)$")
|
ELSEIF("${CMAKE_C_COMPILER_ID}" MATCHES "^(PathScale)$")
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -woffall")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -woffall")
|
||||||
|
|
Loading…
Reference in New Issue