when using clang, whether or not we should link to stdc++fs cannot easily be detected. it depends on the c++ lib used (libstdc++ vs libc++), as well as the versions of these. to avoid messing up in general, this adds an option for forcing linking to stdc++fs, even when using clang. it defaults to false to not break existing build setups where it works. is required for building on jenkins
105 lines
1.9 KiB
CMake
105 lines
1.9 KiB
CMake
# Check for various compiler extensions
|
|
|
|
# HAVE_ATTRIBUTE_ALWAYS_INLINE True if attribute always inline is supported
|
|
# HAS_ATTRIBUTE_UNUSED True if attribute unused is supported
|
|
# HAS_ATTRIBUTE_DEPRECATED True if attribute deprecated is supported
|
|
# HAS_ATTRIBUTE_DEPRECATED_MSG True if attribute deprecated("msg") is supported
|
|
|
|
include(CheckCXXSourceCompiles)
|
|
|
|
# __attribute__((always_inline))
|
|
CHECK_CXX_SOURCE_COMPILES("
|
|
void __attribute__((always_inline)) foo(void) {}
|
|
int main(void)
|
|
{
|
|
foo();
|
|
return 0;
|
|
};
|
|
" HAVE_ATTRIBUTE_ALWAYS_INLINE
|
|
)
|
|
|
|
# __attribute__((unused))
|
|
CHECK_CXX_SOURCE_COMPILES("
|
|
int main(void)
|
|
{
|
|
int __attribute__((unused)) foo;
|
|
return 0;
|
|
};
|
|
" HAS_ATTRIBUTE_UNUSED
|
|
)
|
|
|
|
# __attribute__((deprecated))
|
|
CHECK_CXX_SOURCE_COMPILES("
|
|
#define DEP __attribute__((deprecated))
|
|
class bar
|
|
{
|
|
bar() DEP;
|
|
};
|
|
|
|
class peng { } DEP;
|
|
|
|
template <class T>
|
|
class t_bar
|
|
{
|
|
t_bar() DEP;
|
|
};
|
|
|
|
template <class T>
|
|
class t_peng {
|
|
t_peng() {};
|
|
} DEP;
|
|
|
|
void foo() DEP;
|
|
|
|
void foo() {};
|
|
|
|
int main(void)
|
|
{
|
|
return 0;
|
|
};
|
|
" HAS_ATTRIBUTE_DEPRECATED
|
|
)
|
|
|
|
# __attribute__((deprecated("msg")))
|
|
CHECK_CXX_SOURCE_COMPILES("
|
|
#define DEP __attribute__((deprecated(\"message\")))
|
|
class bar {
|
|
bar() DEP;
|
|
};
|
|
|
|
class peng { } DEP;
|
|
|
|
template <class T>
|
|
class t_bar
|
|
{
|
|
t_bar() DEP;
|
|
};
|
|
|
|
template <class T>
|
|
class t_peng
|
|
{
|
|
t_peng() {};
|
|
} DEP;
|
|
|
|
void foo() DEP;
|
|
|
|
void foo() {};
|
|
|
|
int main(void)
|
|
{
|
|
return 0;
|
|
};
|
|
" HAS_ATTRIBUTE_DEPRECATED_MSG
|
|
)
|
|
|
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0)
|
|
list(APPEND ${project}_LIBRARIES stdc++fs)
|
|
endif()
|
|
endif()
|
|
|
|
option(OPM_CLANG_WITH_STDC++FS "Using libstdc++ with clang and we want to link to stdc++fs" OFF)
|
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND OPM_CLANG_WITH_STDC++FS)
|
|
list(APPEND ${project}_LIBRARIES stdc++fs)
|
|
endif()
|