cmake/resolve_platform.cmake (56 lines of code) (raw):
# Platform recognition
if(TARGET_ARCH)
string(TOUPPER ${TARGET_ARCH} __UPPER_TARGET_ARCH)
endif()
if("${__UPPER_TARGET_ARCH}" STREQUAL "WINDOWS" OR
"${__UPPER_TARGET_ARCH}" STREQUAL "LINUX" OR
"${__UPPER_TARGET_ARCH}" STREQUAL "APPLE" OR
"${__UPPER_TARGET_ARCH}" STREQUAL "ANDROID")
set(PLATFORM_${__UPPER_TARGET_ARCH} 1)
elseif(TARGET_ARCH)
set(PLATFORM_CUSTOM 1)
else()
message(STATUS "TARGET_ARCH not specified; inferring host OS to be platform compilation target")
if(CMAKE_HOST_WIN32)
set(PLATFORM_WINDOWS 1)
set(TARGET_ARCH "WINDOWS")
set(__UPPER_TARGET_ARCH "WINDOWS")
elseif(CMAKE_HOST_APPLE)
set(PLATFORM_APPLE 1)
set(TARGET_ARCH "APPLE")
set(__UPPER_TARGET_ARCH "APPLE")
set(CMAKE_MACOSX_RPATH TRUE)
set(CMAKE_INSTALL_RPATH "@executable_path")
elseif(CMAKE_HOST_UNIX)
set(PLATFORM_LINUX 1)
set(TARGET_ARCH "LINUX")
set(__UPPER_TARGET_ARCH "LINUX")
else()
message(FATAL_ERROR "Unknown host OS; unable to determine platform compilation target")
endif()
endif()
# directory defaults; linux overrides these on SIMPLE_INSTALL builds
# user specified cmake variables (cmake -DVAR=xx) will further overrides these
set(BINARY_DIRECTORY "bin")
set(LIBRARY_DIRECTORY "lib")
set(INCLUDE_DIRECTORY "include")
if(BUILD_SHARED_LIBS)
set(ARCHIVE_DIRECTORY "bin")
message(STATUS "Building AWS libraries as shared objects")
else()
set(ARCHIVE_DIRECTORY "lib")
message(STATUS "Building AWS libraries as static objects")
endif()
string(TOLOWER ${TARGET_ARCH} __LOWER_ARCH)
# default settings is unix platform
if(PLATFORM_LINUX OR PLATFORM_APPLE OR PLATFORM_ANDROID)
include(${CMAKE_CURRENT_LIST_DIR}/platform/unix.cmake)
endif()
# if not specified to custom platform, settings above will be reset by specific platform settings
if(NOT PLATFORM_CUSTOM)
include(${CMAKE_CURRENT_LIST_DIR}/platform/${__LOWER_ARCH}.cmake)
else()
include(${CMAKE_CURRENT_LIST_DIR}/platform/custom.cmake)
endif()
# only usable in .cpp files
add_definitions(-DPLATFORM_${__UPPER_TARGET_ARCH})