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 "axis lua depend libs" FULL_DOCS "use to save depend libs of axis lua project" ) # config c standard if (NOT WINDOWS) if(NOT DEFINED C_STD) set(C_STD 11) endif() message(STATUS "C_STD=${C_STD}") set(CMAKE_C_STANDARD ${C_STD}) set(CMAKE_C_STANDARD_REQUIRED ON) endif() # config c++ standard if(NOT DEFINED CXX_STD) set(CXX_STD 20) endif() message(STATUS "CXX_STD=${CXX_STD}") set(CMAKE_CXX_STANDARD ${CXX_STD}) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) 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 axis project, MSVC_VERSION:${MSVC_VERSION}") else() message(FATAL_ERROR "using Windows MSVC generate axis project, MSVC_VERSION:${MSVC_VERSION} lower than needed") endif() else() message(FATAL_ERROR "please using Windows MSVC compile axis 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 $<$:_AX_DEBUG=1>) # !important axis 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 LINUX) target_compile_definitions(${target} PUBLIC _GNU_SOURCE) elseif(ANDROID) target_compile_definitions(${target} PUBLIC 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()