2014-09-30 22:07:25 +08:00
# detect the OS
2016-06-20 20:08:50 +08:00
if ( ${ CMAKE_SYSTEM_NAME } STREQUAL "Windows" )
2014-09-30 22:07:25 +08:00
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 )
2023-12-10 22:10:07 +08:00
2016-06-20 20:08:50 +08:00
if ( ${ SIZEOF_VOID_PTR } STREQUAL "4" )
2014-09-30 22:07:25 +08:00
set ( ARCH_32BITS 1 )
2016-06-20 20:08:50 +08:00
elseif ( ${ SIZEOF_VOID_PTR } STREQUAL "8" )
2014-09-30 22:07:25 +08:00
set ( ARCH_64BITS 1 )
else ( )
message ( FATAL_ERROR "Unsupported architecture" )
return ( )
2013-09-22 23:16:48 +08:00
endif ( )
2016-06-20 20:08:50 +08:00
elseif ( ${ CMAKE_SYSTEM_NAME } STREQUAL "Linux" )
2013-09-22 23:16:48 +08:00
set ( SFML_OS_UNIX 1 )
2023-12-10 22:10:07 +08:00
2014-09-30 22:07:25 +08:00
if ( ANDROID )
set ( SFML_OS_ANDROID 1 )
2023-12-10 22:10:07 +08:00
2014-09-30 22:07:25 +08:00
# use the OpenGL ES implementation on Android
set ( OPENGL_ES 1 )
else ( )
set ( SFML_OS_LINUX 1 )
2023-12-10 22:10:07 +08:00
2014-09-30 22:07:25 +08:00
# don't use the OpenGL ES implementation on Linux
set ( OPENGL_ES 0 )
2013-09-22 23:16:48 +08:00
endif ( )
2016-08-12 04:46:26 +08:00
elseif ( CMAKE_SYSTEM_NAME MATCHES "^k?FreeBSD$" )
2014-09-30 22:07:25 +08:00
set ( SFML_OS_FREEBSD 1 )
2023-12-10 22:10:07 +08:00
2014-09-30 22:07:25 +08:00
# don't use the OpenGL ES implementation on FreeBSD
set ( OPENGL_ES 0 )
2017-12-27 05:34:33 +08:00
elseif ( CMAKE_SYSTEM_NAME MATCHES "^OpenBSD$" )
set ( SFML_OS_OPENBSD 1 )
2023-12-10 22:10:07 +08:00
2017-12-27 05:34:33 +08:00
# don't use the OpenGL ES implementation on OpenBSD
set ( OPENGL_ES 0 )
2020-12-05 15:41:26 +08:00
elseif ( CMAKE_SYSTEM_NAME MATCHES "^NetBSD$" )
set ( SFML_OS_NETBSD 1 )
2023-12-10 22:10:07 +08:00
2020-12-05 15:41:26 +08:00
# don't use the OpenGL ES implementation on NetBSD
set ( OPENGL_ES 0 )
2024-06-23 02:48:47 +08:00
elseif ( ${ CMAKE_SYSTEM_NAME } STREQUAL "iOS" )
set ( SFML_OS_IOS 1 )
# As we want to find packages in our extlibs folder too
# we need to tell CMake we want to search there instead
set ( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER )
set ( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER )
set ( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER )
set ( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
# use the OpenGL ES implementation on iOS
set ( OPENGL_ES 1 )
2016-06-20 20:08:50 +08:00
elseif ( ${ CMAKE_SYSTEM_NAME } STREQUAL "Darwin" )
2024-06-23 02:48:47 +08:00
set ( SFML_OS_MACOSX 1 )
# don't use the OpenGL ES implementation on Mac OS X
set ( OPENGL_ES 0 )
2016-06-20 20:08:50 +08:00
elseif ( ${ CMAKE_SYSTEM_NAME } STREQUAL "Android" )
2015-01-30 22:37:06 +08:00
set ( SFML_OS_ANDROID 1 )
2014-09-30 22:07:25 +08:00
# use the OpenGL ES implementation on Android
2013-09-22 23:16:48 +08:00
set ( OPENGL_ES 1 )
2023-12-10 22:10:07 +08:00
2016-09-22 21:26:07 +08:00
# comparing CMAKE_SYSTEM_NAME with "CYGWIN" generates a false warning depending on the CMake version
# let's avoid it so the actual error is more visible
elseif ( ${ CYGWIN } )
message ( FATAL_ERROR "Unfortunately SFML doesn't support Cygwin's 'hybrid' status between both Windows and Linux derivatives.\nIf you insist on using the GCC, please use a standalone build of MinGW without the Cygwin environment instead." )
2014-09-30 22:07:25 +08:00
else ( )
2016-06-20 20:08:50 +08:00
message ( FATAL_ERROR "Unsupported operating system or environment" )
2014-09-30 22:07:25 +08:00
return ( )
endif ( )
# detect the compiler and its version
2021-05-04 02:09:34 +08:00
# Note: The detection is order is important because:
# - Visual Studio can both use MSVC and Clang
# - GNUCXX can still be set on macOS when using Clang
if ( MSVC )
2014-09-30 22:07:25 +08:00
set ( SFML_COMPILER_MSVC 1 )
2021-05-04 02:09:34 +08:00
2014-09-30 22:07:25 +08:00
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 )
2015-08-13 00:33:41 +08:00
elseif ( MSVC_VERSION EQUAL 1900 )
set ( SFML_MSVC_VERSION 14 )
2021-05-04 02:09:34 +08:00
elseif ( MSVC_VERSION LESS_EQUAL 1919 )
set ( SFML_MSVC_VERSION 15 )
elseif ( MSVC_VERSION LESS_EQUAL 1929 )
set ( SFML_MSVC_VERSION 16 )
2021-08-22 13:50:46 +08:00
elseif ( MSVC_VERSION LESS_EQUAL 1939 )
set ( SFML_MSVC_VERSION 17 )
2021-05-04 02:09:34 +08:00
endif ( )
2023-12-10 22:10:07 +08:00
if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
set ( SFML_COMPILER_CLANG_CL 1 )
endif ( )
2021-05-04 02:09:34 +08:00
elseif ( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
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 )
2014-09-30 22:07:25 +08:00
endif ( )
else ( )
2023-06-23 01:01:13 +08:00
message ( WARNING "Unrecognized compiler: ${CMAKE_CXX_COMPILER_ID}. Use at your own risk." )
2014-09-30 22:07:25 +08:00
endif ( )