74 lines
3.0 KiB
CMake
74 lines
3.0 KiB
CMake
# DetectOS.cmake
|
|
|
|
function(add_os_definitions target)
|
|
# 初始化所有平台宏为 0
|
|
set(PLATFORMS MIRAGE_PLATFORM_WINDOWS MIRAGE_PLATFORM_MACOS MIRAGE_PLATFORM_LINUX MIRAGE_PLATFORM_FREEBSD MIRAGE_PLATFORM_IOS MIRAGE_PLATFORM_ANDROID)
|
|
|
|
# 检测操作系统并设置相应的宏为 1
|
|
if(WIN32)
|
|
target_compile_definitions(${target} PUBLIC MIRAGE_PLATFORM_WINDOWS=1)
|
|
message(STATUS "Detected Windows operating system")
|
|
list(REMOVE_ITEM PLATFORMS MIRAGE_PLATFORM_WINDOWS)
|
|
elseif(APPLE AND UNIX)
|
|
target_compile_definitions(${target} PUBLIC MIRAGE_PLATFORM_MACOS=1)
|
|
message(STATUS "Detected macOS operating system")
|
|
list(REMOVE_ITEM PLATFORMS MIRAGE_PLATFORM_MACOS)
|
|
elseif(UNIX)
|
|
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
|
target_compile_definitions(${target} PUBLIC MIRAGE_PLATFORM_LINUX=1)
|
|
message(STATUS "Detected Linux operating system")
|
|
list(REMOVE_ITEM PLATFORMS MIRAGE_PLATFORM_LINUX)
|
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
|
|
target_compile_definitions(${target} PUBLIC MIRAGE_PLATFORM_FREEBSD=1)
|
|
message(STATUS "Detected FreeBSD operating system")
|
|
list(REMOVE_ITEM PLATFORMS MIRAGE_PLATFORM_FREEBSD)
|
|
else()
|
|
message(WARNING "Detected unknown Unix-like operating system")
|
|
endif()
|
|
elseif(ANDROID)
|
|
target_compile_definitions(${target} PUBLIC MIRAGE_PLATFORM_ANDROID=1)
|
|
message(STATUS "Detected Android operating system")
|
|
list(REMOVE_ITEM PLATFORMS MIRAGE_PLATFORM_ANDROID)
|
|
elseif(IOS)
|
|
target_compile_definitions(${target} PUBLIC MIRAGE_PLATFORM_IOS=1)
|
|
message(STATUS "Detected iOS operating system")
|
|
list(REMOVE_ITEM PLATFORMS MIRAGE_PLATFORM_IOS)
|
|
else()
|
|
message(WARNING "Unknown operating system")
|
|
endif()
|
|
|
|
foreach(PLATFORM ${PLATFORMS})
|
|
target_compile_definitions(${target} PUBLIC ${PLATFORM}=0)
|
|
endforeach()
|
|
|
|
# 检测并设置架构宏
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
target_compile_definitions(${target} PUBLIC MIRAGE_PLATFORM_ARCH_64BIT=1 MIRAGE_PLATFORM_ARCH_32BIT=0)
|
|
message(STATUS "Detected 64-bit architecture")
|
|
else()
|
|
target_compile_definitions(${target} PUBLIC MIRAGE_PLATFORM_ARCH_64BIT=0 MIRAGE_PLATFORM_ARCH_32BIT=1)
|
|
message(STATUS "Detected 32-bit architecture")
|
|
endif()
|
|
|
|
# 设置通用的 UNIX 宏
|
|
if(UNIX)
|
|
target_compile_definitions(${target} PUBLIC MIRAGE_PLATFORM_UNIX=1)
|
|
else()
|
|
target_compile_definitions(${target} PUBLIC MIRAGE_PLATFORM_UNIX=0)
|
|
endif()
|
|
|
|
# 设置通用的 POSIX 宏
|
|
if(UNIX OR APPLE)
|
|
target_compile_definitions(${target} PUBLIC MIRAGE_PLATFORM_POSIX=1)
|
|
else()
|
|
target_compile_definitions(${target} PUBLIC MIRAGE_PLATFORM_POSIX=0)
|
|
endif()
|
|
|
|
# 设置IS_MOBILE宏
|
|
if(ANDROID OR IOS)
|
|
target_compile_definitions(${target} PUBLIC MIRAGE_PLATFORM_IS_MOBILE=1)
|
|
else()
|
|
target_compile_definitions(${target} PUBLIC MIRAGE_PLATFORM_IS_MOBILE=0)
|
|
endif()
|
|
endfunction()
|