summaryrefslogtreecommitdiffstats
path: root/cmake/scripts/common/Platform.cmake
blob: 397d8d46e8cf117bcafaf8e62e4572afe891c8f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
if(NOT CORE_SYSTEM_NAME)
  string(TOLOWER ${CMAKE_SYSTEM_NAME} CORE_SYSTEM_NAME)
endif()

if(CORE_SYSTEM_NAME STREQUAL linux OR CORE_SYSTEM_NAME STREQUAL freebsd)
  # Set default CORE_PLATFORM_NAME to X11 WAYLAND GBM
  # This is overridden by user setting -DCORE_PLATFORM_NAME=<platform>
  set(_DEFAULT_PLATFORM X11 WAYLAND GBM)

  if(NOT APP_RENDER_SYSTEM)
    message(SEND_ERROR "You need to decide whether you want to use GL- or GLES-based rendering. Please set APP_RENDER_SYSTEM to either \"gl\" or \"gles\". For normal desktop systems, you will usually want to use \"gl\".")
  endif()
else()
  string(TOLOWER ${CORE_SYSTEM_NAME} _DEFAULT_PLATFORM)
endif()

set(APP_BINARY_SUFFIX ".bin")

#
# Note: please do not use CORE_PLATFORM_NAME in any checks,
# use the normalized to lower case CORE_PLATFORM_NAME_LC (see below) instead
#
if(NOT CORE_PLATFORM_NAME)
  set(CORE_PLATFORM_NAME ${_DEFAULT_PLATFORM})
endif()
set(CORE_PLATFORM_NAME ${CORE_PLATFORM_NAME} CACHE STRING "Platform port to build" FORCE)
unset(_DEFAULT_PLATFORM)

string(REPLACE " " ";" CORE_PLATFORM_NAME "${CORE_PLATFORM_NAME}")
foreach(platform IN LISTS CORE_PLATFORM_NAME)
  string(TOLOWER ${platform} platform)
  list(APPEND CORE_PLATFORM_NAME_LC ${platform})
endforeach()

string(REPLACE ";" " " CORE_PLATFORM_STRING "${CORE_PLATFORM_NAME_LC}")
list(APPEND final_message "Platforms: ${CORE_PLATFORM_STRING}")

if(CORE_SYSTEM_NAME STREQUAL linux OR CORE_SYSTEM_NAME STREQUAL freebsd)
  list(LENGTH CORE_PLATFORM_NAME_LC PLATFORM_COUNT)
  if(PLATFORM_COUNT EQUAL 1)
    option(ENABLE_APP_AUTONAME "Enable renaming the binary according to windowing?" ON)
    if(ENABLE_APP_AUTONAME)
      set(APP_BINARY_SUFFIX "-${CORE_PLATFORM_NAME_LC}")
    endif()
  endif()
endif()

foreach(CORE_PLATFORM_LC IN LISTS CORE_PLATFORM_NAME_LC)
  if(EXISTS ${CMAKE_SOURCE_DIR}/cmake/platform/${CORE_SYSTEM_NAME}/${CORE_PLATFORM_LC}.cmake)
    include(${CMAKE_SOURCE_DIR}/cmake/platform/${CORE_SYSTEM_NAME}/${CORE_PLATFORM_LC}.cmake)
  else()
    file(GLOB _platformnames RELATIVE ${CMAKE_SOURCE_DIR}/cmake/platform/${CORE_SYSTEM_NAME}/
                                      ${CMAKE_SOURCE_DIR}/cmake/platform/${CORE_SYSTEM_NAME}/*.cmake)
    string(REPLACE ".cmake" " " _platformnames ${_platformnames})
    message(FATAL_ERROR "invalid CORE_PLATFORM_NAME: ${CORE_PLATFORM_NAME_LC}\nValid platforms: ${_platformnames}")
  endif()
endforeach()