diff options
Diffstat (limited to 'cmake/Config.cmake')
-rw-r--r-- | cmake/Config.cmake | 192 |
1 files changed, 117 insertions, 75 deletions
diff --git a/cmake/Config.cmake b/cmake/Config.cmake index ce9bb2c..bb726ba 100644 --- a/cmake/Config.cmake +++ b/cmake/Config.cmake @@ -1,75 +1,117 @@ -# detect the OS
-if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
- set(WINDOWS 1)
-
- # detect the architecture (note: this test won't work for cross-compilation)
- include(CheckTypeSize)
- check_type_size(void* SIZEOF_VOID_PTR)
- if("${SIZEOF_VOID_PTR}" STREQUAL "4")
- set(ARCH_32BITS 1)
- elseif("${SIZEOF_VOID_PTR}" STREQUAL "8")
- set(ARCH_64BITS 1)
- else()
- message(FATAL_ERROR "Unsupported architecture")
- return()
- endif()
-elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
- set(LINUX 1)
-elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
- # FreeBSD compile path is the same as Linux
- set(LINUX 1)
-elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
- set(MACOSX 1)
-
- # detect OS X version. (use '/usr/bin/sw_vers -productVersion' to extract V from '10.V.x'.)
- EXEC_PROGRAM(/usr/bin/sw_vers ARGS -productVersion OUTPUT_VARIABLE MACOSX_VERSION_RAW)
- STRING(REGEX REPLACE "10\\.([0-9]).*" "\\1" MACOSX_VERSION "${MACOSX_VERSION_RAW}")
- if(${MACOSX_VERSION} LESS 5)
- message(FATAL_ERROR "Unsupported version of OS X : ${MACOSX_VERSION_RAW}")
- return()
- endif()
-else()
- message(FATAL_ERROR "Unsupported operating system")
- return()
-endif()
-
-# detect the compiler and its version
-# Note: on some platforms (OS X), CMAKE_COMPILER_IS_GNUCXX is true
-# even when CLANG is used, therefore the Clang test is done first
-if(CMAKE_CXX_COMPILER MATCHES ".*clang[+][+]" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
- # CMAKE_CXX_COMPILER_ID is an internal CMake variable subject to change,
- # but there is no other way to detect CLang at the moment
- set(COMPILER_CLANG 1)
- execute_process(COMMAND "${CMAKE_CXX_COMPILER}" "--version" OUTPUT_VARIABLE CLANG_VERSION_OUTPUT)
- string(REGEX REPLACE ".*clang version ([0-9]+\\.[0-9]+).*" "\\1" CLANG_VERSION "${CLANG_VERSION_OUTPUT}")
-elseif(CMAKE_COMPILER_IS_GNUCXX)
- set(COMPILER_GCC 1)
- execute_process(COMMAND "${CMAKE_CXX_COMPILER}" "-dumpversion" OUTPUT_VARIABLE GCC_VERSION_OUTPUT)
- string(REGEX REPLACE "([0-9]+\\.[0-9]+).*" "\\1" GCC_VERSION "${GCC_VERSION_OUTPUT}")
- execute_process(COMMAND "${CMAKE_CXX_COMPILER}" "-dumpmachine" OUTPUT_VARIABLE GCC_MACHINE)
- string(STRIP "${GCC_MACHINE}" GCC_MACHINE)
- if(${GCC_MACHINE} MATCHES ".*w64.*")
- set(COMPILER_GCC_W64 1)
- endif()
-elseif(MSVC)
- set(COMPILER_MSVC 1)
- if(MSVC_VERSION EQUAL 1400)
- set(MSVC_VERSION 2005)
- elseif(MSVC_VERSION EQUAL 1500)
- set(MSVC_VERSION 2008)
- elseif(MSVC_VERSION EQUAL 1600)
- set(MSVC_VERSION 2010)
- elseif(MSVC_VERSION EQUAL 1700)
- set(MSVC_VERSION 2011)
- endif()
-else()
- message(FATAL_ERROR "Unsupported compiler")
- return()
-endif()
-
-# define the install directory for miscellaneous files
-if(WINDOWS)
- set(INSTALL_MISC_DIR .)
-elseif(UNIX)
- set(INSTALL_MISC_DIR share/SFML)
-endif()
+# detect the OS +if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + set(SFML_OS_WINDOWS 1) + + # don't use the OpenGL ES implementation on Windows + set(OPENGL_ES 0) + + # detect the architecture (note: this test won't work for cross-compilation) + include(CheckTypeSize) + check_type_size(void* SIZEOF_VOID_PTR) + if("${SIZEOF_VOID_PTR}" STREQUAL "4") + set(ARCH_32BITS 1) + elseif("${SIZEOF_VOID_PTR}" STREQUAL "8") + set(ARCH_64BITS 1) + else() + message(FATAL_ERROR "Unsupported architecture") + return() + endif() +elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux") + set(SFML_OS_UNIX 1) + if(ANDROID) + set(SFML_OS_ANDROID 1) + # use the OpenGL ES implementation on Android + set(OPENGL_ES 1) + else() + set(SFML_OS_LINUX 1) + # don't use the OpenGL ES implementation on Linux + set(OPENGL_ES 0) + endif() +elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") + set(SFML_OS_FREEBSD 1) + # don't use the OpenGL ES implementation on FreeBSD + set(OPENGL_ES 0) +elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + if(IOS) + set(SFML_OS_IOS 1) + + # set the target framework and platforms + set(CMAKE_OSX_SYSROOT "iphoneos") + set(CMAKE_OSX_ARCHITECTURES "armv6;armv7;i386") + set(CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos;-iphonesimulator") + + # help the compiler detection script below + set(CMAKE_COMPILER_IS_GNUCXX 1) + + # use the OpenGL ES implementation on iOS + set(OPENGL_ES 1) + else() + set(SFML_OS_MACOSX 1) + + # don't use the OpenGL ES implementation on Mac OS X + set(OPENGL_ES 0) + + # detect OS X version. (use '/usr/bin/sw_vers -productVersion' to extract V from '10.V.x'.) + EXEC_PROGRAM(/usr/bin/sw_vers ARGS -productVersion OUTPUT_VARIABLE MACOSX_VERSION_RAW) + STRING(REGEX REPLACE "10\\.([0-9]+).*" "\\1" MACOSX_VERSION "${MACOSX_VERSION_RAW}") + if(${MACOSX_VERSION} LESS 7) + message(FATAL_ERROR "Unsupported version of OS X: ${MACOSX_VERSION_RAW}") + return() + endif() + endif() +elseif(${CMAKE_SYSTEM_NAME} MATCHES "Android") + set(SFML_OS_ANDROID 1) + + # use the OpenGL ES implementation on Android + set(OPENGL_ES 1) +else() + message(FATAL_ERROR "Unsupported operating system") + return() +endif() + +# detect the compiler and its version +# Note: on some platforms (OS X), CMAKE_COMPILER_IS_GNUCXX is true +# even when CLANG is used, therefore the Clang test is done first +if(CMAKE_CXX_COMPILER MATCHES ".*clang[+][+]" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + # CMAKE_CXX_COMPILER_ID is an internal CMake variable subject to change, + # but there is no other way to detect CLang at the moment + set(SFML_COMPILER_CLANG 1) + execute_process(COMMAND "${CMAKE_CXX_COMPILER}" "--version" OUTPUT_VARIABLE CLANG_VERSION_OUTPUT) + string(REGEX REPLACE ".*clang version ([0-9]+\\.[0-9]+).*" "\\1" SFML_CLANG_VERSION "${CLANG_VERSION_OUTPUT}") +elseif(CMAKE_COMPILER_IS_GNUCXX) + set(SFML_COMPILER_GCC 1) + execute_process(COMMAND "${CMAKE_CXX_COMPILER}" "-dumpversion" OUTPUT_VARIABLE GCC_VERSION_OUTPUT) + string(REGEX REPLACE "([0-9]+\\.[0-9]+).*" "\\1" SFML_GCC_VERSION "${GCC_VERSION_OUTPUT}") + execute_process(COMMAND "${CMAKE_CXX_COMPILER}" "--version" OUTPUT_VARIABLE GCC_COMPILER_VERSION) + string(REGEX MATCHALL ".*(tdm[64]*-[1-9]).*" SFML_COMPILER_GCC_TDM "${GCC_COMPILER_VERSION}") + execute_process(COMMAND "${CMAKE_CXX_COMPILER}" "-dumpmachine" OUTPUT_VARIABLE GCC_MACHINE) + string(STRIP "${GCC_MACHINE}" GCC_MACHINE) + if(${GCC_MACHINE} MATCHES ".*w64.*") + set(SFML_COMPILER_GCC_W64 1) + endif() +elseif(MSVC) + set(SFML_COMPILER_MSVC 1) + if(MSVC_VERSION EQUAL 1400) + set(SFML_MSVC_VERSION 8) + elseif(MSVC_VERSION EQUAL 1500) + set(SFML_MSVC_VERSION 9) + elseif(MSVC_VERSION EQUAL 1600) + set(SFML_MSVC_VERSION 10) + elseif(MSVC_VERSION EQUAL 1700) + set(SFML_MSVC_VERSION 11) + elseif(MSVC_VERSION EQUAL 1800) + set(SFML_MSVC_VERSION 12) + endif() +else() + message(FATAL_ERROR "Unsupported compiler") + return() +endif() + +# define the install directory for miscellaneous files +if(SFML_OS_WINDOWS OR SFML_OS_IOS) + set(INSTALL_MISC_DIR .) +elseif(SFML_OS_LINUX OR SFML_OS_FREEBSD OR SFML_OS_MACOSX) + set(INSTALL_MISC_DIR share/SFML) +elseif(SFML_OS_ANDROID) + set(INSTALL_MISC_DIR ${ANDROID_NDK}/sources/sfml) +endif() |