axmol/cmake/Modules/AXConfigDefine.cmake

217 lines
7.0 KiB
CMake

If(APPLE)
if(${CMAKE_VERSION} VERSION_LESS "3.14")
message(FATAL_ERROR "Please use CMake 3.14 or newer for Apple platform (macOS, iOS, tvOS or watchOS)")
endif()
endif()
#Please use them everywhere
#WINDOWS = Windows Desktop
#ANDROID = Android
#IOS = iOS
#MACOSX = MacOS X
#LINUX = Linux
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
set(WINDOWS TRUE)
if(NOT ("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "Win32"))
set(WIN64 TRUE)
set(ARCH_ALIAS "x64")
else()
set(WIN32 TRUE)
set(ARCH_ALIAS "x86")
endif()
set(PLATFORM_FOLDER win32)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Android")
set(PLATFORM_FOLDER android)
set(ARCH_ALIAS ${ANDROID_ABI})
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
if(ANDROID)
set(PLATFORM_FOLDER android)
else()
set(LINUX TRUE)
set(PLATFORM_FOLDER linux)
endif()
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(APPLE TRUE)
set(MACOSX TRUE)
set(PLATFORM_FOLDER mac)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "iOS")
set(APPLE TRUE)
set(IOS TRUE)
set(PLATFORM_FOLDER ios)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "tvOS")
set(APPLE TRUE)
set(IOS TRUE)
set(TVOS TRUE)
set(PLATFORM_FOLDER tvos)
else()
message(FATAL_ERROR "Unsupported platform, CMake will exit")
return()
endif()
# generators that are capable of organizing into a hierarchy of folders
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
# simplify generator condition, please use them everywhere
if(CMAKE_GENERATOR STREQUAL Xcode)
set(XCODE TRUE)
elseif(CMAKE_GENERATOR MATCHES Visual)
set(VS TRUE)
endif()
message(STATUS "CMAKE_GENERATOR: ${CMAKE_GENERATOR}")
# custom target property for lua/js link
define_property(TARGET
PROPERTY AX_LUA_DEPEND
BRIEF_DOCS "axmol lua depend libs"
FULL_DOCS "use to save depend libs of axmol lua project"
)
# config c standard
if(NOT DEFINED CMAKE_C_STANDARD)
if (WINDOWS)
message(STATUS "CMAKE_HOST_SYSTEM_VERSION: ${CMAKE_HOST_SYSTEM_VERSION}")
message(STATUS "CMAKE_SYSTEM_VERSION: ${CMAKE_SYSTEM_VERSION}")
message(STATUS "CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION: ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")
if (NOT CMAKE_SYSTEM_VERSION)
set(CMAKE_SYSTEM_VERSION ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION})
endif()
if (${CMAKE_SYSTEM_VERSION} VERSION_GREATER_EQUAL "10.0.22000.0")
set(CMAKE_C_STANDARD 11)
else()
# windows sdk < 10.0.22000.0, The c11 header stdalign.h was missing, so workaroud fallback C standard to 99
# refer to: https://github.com/axmolengine/axmol/issues/991
set(CMAKE_C_STANDARD 99)
endif()
else()
set(CMAKE_C_STANDARD 11)
endif()
endif()
message(STATUS "CMAKE_C_STANDARD=${CMAKE_C_STANDARD}")
if(NOT DEFINED CMAKE_C_STANDARD_REQUIRED)
set(CMAKE_C_STANDARD_REQUIRED ON)
endif()
# config c++ standard
if(NOT DEFINED CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 20)
endif()
message(STATUS "CMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}")
if(NOT DEFINED CMAKE_CXX_STANDARD_REQUIRED)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
endif()
if(NOT DEFINED CMAKE_CXX_EXTENSIONS)
set(CMAKE_CXX_EXTENSIONS OFF)
endif()
if (MSVC)
add_compile_options(/GF)
endif()
set(CMAKE_DEBUG_POSTFIX "" CACHE STRING "Library postfix for debug builds. Normally left blank." FORCE)
# set hash style to both for android old device compatible
# see also: https://github.com/axmolengine/axmol/discussions/614
if (ANDROID)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--hash-style=both")
endif()
# check visual studio version
if(WINDOWS)
# not support other compile tools except MSVC for now
if(MSVC)
# Visual Studio 2015, MSVC_VERSION 1900 (v140 toolset)
# Visual Studio 2017, MSVC_VERSION 1910-1919 (v141 toolset)
if(${MSVC_VERSION} EQUAL 1900 OR ${MSVC_VERSION} GREATER 1900)
message(STATUS "using Windows MSVC generate axmol project, MSVC_VERSION:${MSVC_VERSION}")
else()
message(FATAL_ERROR "using Windows MSVC generate axmol project, MSVC_VERSION:${MSVC_VERSION} lower than needed")
endif()
else()
message(FATAL_ERROR "please using Windows MSVC compile axmol project, support other compile tools not yet")
endif()
endif()
# Set macro definitions for special platforms
function(use_ax_compile_define target)
target_compile_definitions(${target} PUBLIC $<$<CONFIG:Debug>:_AX_DEBUG=1>)
# !important axmol not use double precision
# target_compile_definitions(${target} PUBLIC CP_USE_CGTYPES=0)
# target_compile_definitions(${target} PUBLIC CP_USE_DOUBLES=0)
if(APPLE)
target_compile_definitions(${target} PUBLIC __APPLE__)
target_compile_definitions(${target} PUBLIC USE_FILE32API)
if(AX_USE_COMPAT_GL)
target_compile_definitions(${target}
PUBLIC AX_USE_COMPAT_GL=1
PUBLIC GL_SILENCE_DEPRECATION=1
)
endif()
if(IOS)
if(TVOS)
target_compile_definitions(${target} PUBLIC AX_TARGET_OS_TVOS)
else()
target_compile_definitions(${target} PUBLIC AX_TARGET_OS_IPHONE)
endif()
endif()
elseif(LINUX)
target_compile_definitions(${target} PUBLIC _GNU_SOURCE)
elseif(ANDROID)
target_compile_definitions(${target} PUBLIC USE_FILE32API)
elseif(WINDOWS)
if(AX_USE_COMPAT_GL)
target_compile_definitions(${target} PUBLIC AX_USE_COMPAT_GL=1)
endif()
target_compile_definitions(${target}
PUBLIC WIN32
PUBLIC _WIN32
PUBLIC _WINDOWS
PUBLIC UNICODE
PUBLIC _UNICODE
PUBLIC _CRT_SECURE_NO_WARNINGS
PUBLIC _SCL_SECURE_NO_WARNINGS
# PUBLIC GLAD_GLAPI_EXPORT
)
if(BUILD_SHARED_LIBS)
target_compile_definitions(${target}
PRIVATE _USRDLL
PRIVATE _USEGUIDLL # ui
)
else()
target_compile_definitions(${target} PUBLIC AX_STATIC)
endif()
endif()
endfunction()
# Set compiler options
function(use_ax_compile_options target)
if(MSVC)
target_compile_options(${target}
PUBLIC /MP
)
endif()
endfunction()
# softfp for android armv7a?
# if(ANDROID)
# if(${ANDROID_ABI} STREQUAL "armeabi-v7a")
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfloat-abi=softfp")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfloat-abi=softfp")
# endif()
# endif()
# Try enable asm & nasm compiler support
set(can_use_assembler TRUE)
enable_language(ASM)
enable_language(ASM_NASM OPTIONAL)
message(STATUS "The nasm compiler speed up libraries: jpeg(libjpeg-turbo)")
if(NOT EXISTS "${CMAKE_ASM_NASM_COMPILER}")
set(CMAKE_ASM_NASM_COMPILER_LOADED FALSE CACHE BOOL "Does cmake asm nasm compiler loaded" FORCE)
message(WARNING "The nasm compiler doesn't present on your system PATH, please download from: https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/")
endif()