diff --git a/CMakeLists.txt b/CMakeLists.txt index b2caa0b8..2e1f87bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,15 +11,8 @@ set(PRODUCT_LONG_NAME "Uru Live" CACHE STRING "Product Long Name") set(PRODUCT_UUID "ea489821-6c35-4bd0-9dae-bb17c585e680" CACHE STRING "Product UUID") -# Detect Clang compiler -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set(CMAKE_COMPILER_IS_CLANGXX 1) -endif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - -# Require C++11 -if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") -endif() +# Configure compile-time compiler-specific flags +include(cmake/CompilerChecks.cmake) # HeadSpin Configuration if(WIN32 AND NOT CYGWIN) @@ -30,12 +23,6 @@ if(UNIX) endif(UNIX) # End HeadSpin Configuration -# Header file for globally-set confingure-time defines -configure_file(${PROJECT_SOURCE_DIR}/cmake/hsCompilerSpecific.h.cmake - ${PROJECT_BINARY_DIR}/hsCompilerSpecific.h) -include_directories(${PROJECT_BINARY_DIR}) -# End hsCompilerSpecific.h - set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${Plasma_BINARY_DIR}/bin) diff --git a/Sources/Plasma/CoreLib/CMakeLists.txt b/Sources/Plasma/CoreLib/CMakeLists.txt index 704fb2c8..24385ab8 100644 --- a/Sources/Plasma/CoreLib/CMakeLists.txt +++ b/Sources/Plasma/CoreLib/CMakeLists.txt @@ -8,48 +8,6 @@ add_definitions(-DPRODUCT_SHORT_NAME="${PRODUCT_SHORT_NAME}") add_definitions(-DPRODUCT_LONG_NAME="${PRODUCT_LONG_NAME}") add_definitions(-DPRODUCT_UUID="${PRODUCT_UUID}") -include(CheckTypeSize) - -if(NOT WCHAR_BYTES) - check_type_size("wchar_t" WCHAR_BYTES) - if(NOT WCHAR_BYTES) - message(FATAL_ERROR "Could not determine sizeof(wchar_t)") - set(WCHAR_BYTES 0) - endif() -endif() -add_definitions(-DWCHAR_BYTES=${WCHAR_BYTES}) - -if(NOT SIZEOF_LONG) - check_type_size("long" SIZEOF_LONG) - if(NOT SIZEOF_LONG) - message(FATAL_ERROR "Could not determine sizeof(long)") - set(SIZEOF_LONG 0) - endif() -endif() -add_definitions(-DSIZEOF_LONG=${SIZEOF_LONG}) - -try_compile(HAVE_CPUID ${PROJECT_BINARY_DIR} - ${PROJECT_SOURCE_DIR}/cmake/check_cpuid.cpp - OUTPUT_VARIABLE OUTPUT) -if(HAVE_CPUID) - message("CPUID header found -- using hardware math acceleration when available") -else() - message("CPUID header not found -- using software math") -endif() - -try_compile(HAVE_CXX14_DEPRECATED_ATTR ${PROJECT_BINARY_DIR} - ${PROJECT_SOURCE_DIR}/cmake/check_deprecated_attribute.cpp - COMPILE_DEFINITIONS -DTRY_ATTRIBUTE - OUTPUT_VARIABLE OUTPUT) -try_compile(HAVE_GCC_DEPRECATED_ATTR ${PROJECT_BINARY_DIR} - ${PROJECT_SOURCE_DIR}/cmake/check_deprecated_attribute.cpp - COMPILE_DEFINITIONS -DTRY_GCC_ATTR - OUTPUT_VARIABLE OUTPUT) -try_compile(HAVE_MSVC_DEPRECATED_ATTR ${PROJECT_BINARY_DIR} - ${PROJECT_SOURCE_DIR}/cmake/check_deprecated_attribute.cpp - COMPILE_DEFINITIONS -DTRY_MSVC_ATTR - OUTPUT_VARIABLE OUTPUT) - set(CoreLib_SOURCES HeadSpin.cpp hsBitVector.cpp diff --git a/cmake/CompilerChecks.cmake b/cmake/CompilerChecks.cmake new file mode 100644 index 00000000..c569352e --- /dev/null +++ b/cmake/CompilerChecks.cmake @@ -0,0 +1,57 @@ +# Detect Clang compiler +if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + set(CMAKE_COMPILER_IS_CLANGXX 1) +endif() + +# Require C++11 +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") +endif() + + +# Compile-time type size checks +include(CheckTypeSize) + +if(NOT WCHAR_BYTES) + check_type_size("wchar_t" WCHAR_BYTES) + if(NOT WCHAR_BYTES) + message(FATAL_ERROR "Could not determine sizeof(wchar_t)") + set(WCHAR_BYTES 0) + endif() +endif() + +if(NOT SIZEOF_LONG) + check_type_size("long" SIZEOF_LONG) + if(NOT SIZEOF_LONG) + message(FATAL_ERROR "Could not determine sizeof(long)") + set(SIZEOF_LONG 0) + endif() +endif() + +# Check for CPUID headers +try_compile(HAVE_CPUID ${PROJECT_BINARY_DIR} + ${PROJECT_SOURCE_DIR}/cmake/check_cpuid.cpp + OUTPUT_VARIABLE OUTPUT) +if(HAVE_CPUID) + message("CPUID header found -- using hardware math acceleration when available") +else() + message("CPUID header not found -- using software math") +endif() + +# Look for a supported "deprecated" attribute specifier. +try_compile(HAVE_CXX14_DEPRECATED_ATTR ${PROJECT_BINARY_DIR} + ${PROJECT_SOURCE_DIR}/cmake/check_deprecated_attribute.cpp + COMPILE_DEFINITIONS -DTRY_ATTRIBUTE + OUTPUT_VARIABLE OUTPUT) +try_compile(HAVE_GCC_DEPRECATED_ATTR ${PROJECT_BINARY_DIR} + ${PROJECT_SOURCE_DIR}/cmake/check_deprecated_attribute.cpp + COMPILE_DEFINITIONS -DTRY_GCC_ATTR + OUTPUT_VARIABLE OUTPUT) +try_compile(HAVE_MSVC_DEPRECATED_ATTR ${PROJECT_BINARY_DIR} + ${PROJECT_SOURCE_DIR}/cmake/check_deprecated_attribute.cpp + COMPILE_DEFINITIONS -DTRY_MSVC_ATTR + OUTPUT_VARIABLE OUTPUT) + +configure_file(${PROJECT_SOURCE_DIR}/cmake/hsCompilerSpecific.h.cmake + ${PROJECT_BINARY_DIR}/hsCompilerSpecific.h) +include_directories(${PROJECT_BINARY_DIR}) diff --git a/cmake/hsCompilerSpecific.h.cmake b/cmake/hsCompilerSpecific.h.cmake index 26049dd3..6c3ecc0b 100644 --- a/cmake/hsCompilerSpecific.h.cmake +++ b/cmake/hsCompilerSpecific.h.cmake @@ -45,6 +45,9 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #cmakedefine HAVE_CPUID +#define WCHAR_BYTES ${WCHAR_BYTES} +#define SIZEOF_LONG ${SIZEOF_LONG} + #cmakedefine HAVE_CXX14_DEPRECATED_ATTR #cmakedefine HAVE_GCC_DEPRECATED_ATTR #cmakedefine HAVE_MSVC_DEPRECATED_ATTR