macro(SDL_DetectCMakePlatform)
  set(SDL_CMAKE_PLATFORM )
  # Get the platform
  if(WIN32)
    set(SDL_CMAKE_PLATFORM Windows)
  elseif(PSP)
    set(SDL_CMAKE_PLATFORM psp)
  elseif(APPLE)
    if(CMAKE_SYSTEM_NAME MATCHES ".*Darwin.*")
      set(SDL_CMAKE_PLATFORM Darwin)
    elseif(CMAKE_SYSTEM_NAME MATCHES ".*MacOS.*")
      set(SDL_CMAKE_PLATFORM MacosX)
    elseif(CMAKE_SYSTEM_NAME MATCHES ".*tvOS.*")
      set(SDL_CMAKE_PLATFORM tvOS)
    elseif(CMAKE_SYSTEM_NAME MATCHES ".*iOS.*")
      # !!! FIXME: remove the version check when we start requiring >= 3.14.0
      if(CMAKE_VERSION VERSION_LESS 3.14)
        set(SDL_CMAKE_PLATFORM iOS)
      endif()
    endif()
  elseif(CMAKE_SYSTEM_NAME MATCHES "Haiku.*")
    set(SDL_CMAKE_PLATFORM Haiku)
  elseif(NINTENDO_3DS)
    set(SDL_CMAKE_PLATFORM n3ds)
  elseif(PS2)
    set(SDL_CMAKE_PLATFORM ps2)
  elseif(VITA)
    set(SDL_CMAKE_PLATFORM Vita)
  elseif(CMAKE_SYSTEM_NAME MATCHES ".*Linux")
    set(SDL_CMAKE_PLATFORM Linux)
  elseif(CMAKE_SYSTEM_NAME MATCHES "kFreeBSD.*")
    set(SDL_CMAKE_PLATFORM FreeBSD)
  elseif(CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*")
    set(SDL_CMAKE_PLATFORM NetBSD)
  elseif(CMAKE_SYSTEM_NAME MATCHES "kOpenBSD.*|OpenBSD.*")
    set(SDL_CMAKE_PLATFORM OpenBSD)
  elseif(CMAKE_SYSTEM_NAME MATCHES ".*GNU.*")
    set(SDL_CMAKE_PLATFORM GNU)
  elseif(CMAKE_SYSTEM_NAME MATCHES ".*BSDI.*")
    set(SDL_CMAKE_PLATFORM BSDi)
  elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly.*|FreeBSD")
    set(SDL_CMAKE_PLATFORM FreeBSD)
  elseif(CMAKE_SYSTEM_NAME MATCHES "SYSV5.*")
    set(SDL_CMAKE_PLATFORM SYSV5)
  elseif(CMAKE_SYSTEM_NAME MATCHES "Solaris.*|SunOS.*")
    set(SDL_CMAKE_PLATFORM Solaris)
  elseif(CMAKE_SYSTEM_NAME MATCHES "HP-UX.*")
    set(SDL_CMAKE_PLATFORM HPUX)
  elseif(CMAKE_SYSTEM_NAME MATCHES "AIX.*")
    set(SDL_CMAKE_PLATFORM AIX)
  elseif(CMAKE_SYSTEM_NAME MATCHES "Minix.*")
    set(SDL_CMAKE_PLATFORM Minix)
  elseif(CMAKE_SYSTEM_NAME MATCHES "Android.*")
    set(SDL_CMAKE_PLATFORM Android)
  elseif(CMAKE_SYSTEM_NAME MATCHES "Emscripten.*")
    set(SDL_CMAKE_PLATFORM Emscripten)
  elseif(CMAKE_SYSTEM_NAME MATCHES "BeOS.*")
    message_error("BeOS support has been removed as of SDL 2.0.2.")
  endif()

  if(SDL_CMAKE_PLATFORM)
    string(TOUPPER "${SDL_CMAKE_PLATFORM}" _upper_platform)
    set(${_upper_platform} TRUE)
  else()
    set(SDL_CMAKE_PLATFORM} "unknown")
  endif()
endmacro()

function(SDL_DetectCPUArchitecture)
  set(sdl_cpu_names)
  if(APPLE AND CMAKE_OSX_ARCHITECTURES)
    foreach(osx_arch ${CMAKE_OSX_ARCHITECTURES})
      if(osx_arch STREQUAL "x86_64")
        list(APPEND sdl_cpu_names "x64")
      elseif(osx_arch STREQUAL "arm64")
        list(APPEND sdl_cpu_names "arm64")
      endif()
    endforeach()
  endif()

  set(sdl_known_archs x86 x64 arm32 arm64 loongarch64 emscripten)
  if(NOT sdl_cpu_names)
    set(found FALSE)
    foreach(sdl_known_arch ${sdl_known_archs})
      if(NOT found)
        string(TOUPPER "${sdl_known_arch}" sdl_known_arch_upper)
        set(var_name "SDL_CPU_${sdl_known_arch_upper}")
        check_cpu_architecture(${sdl_known_arch} ${var_name})
        if(${var_name})
          list(APPEND sdl_cpu_names ${sdl_known_arch})
          set(found TRUE)
        endif()
      endif()
    endforeach()
  endif()

  foreach(sdl_known_arch ${sdl_known_archs})
    string(TOUPPER "${sdl_known_arch}" sdl_known_arch_upper)
    set(var_name "SDL_CPU_${sdl_known_arch_upper}")
    if(sdl_cpu_names MATCHES "(^|;)${sdl_known_arch}($|;)")  # FIXME: use if(IN_LIST)
      set(${var_name} 1 PARENT_SCOPE)
    else()
      set(${var_name} 0 PARENT_SCOPE)
    endif()
  endforeach()
  set(SDL_CPU_NAMES ${sdl_cpu_names} PARENT_SCOPE)
endfunction()
