mirror of https://github.com/axmolengine/axmol.git
233 lines
6.0 KiB
CMake
233 lines
6.0 KiB
CMake
|
cmake_minimum_required(VERSION 3.12)
|
||
|
|
||
|
# The project's name
|
||
|
project(LLGI)
|
||
|
|
||
|
include(ExternalProject)
|
||
|
|
||
|
# linux flag
|
||
|
if(UNIX AND NOT APPLE)
|
||
|
set(LINUX TRUE)
|
||
|
endif()
|
||
|
|
||
|
option(BUILD_VULKAN "build vulkan" OFF)
|
||
|
option(BUILD_VULKAN_COMPILER "build vulkan compiler" OFF)
|
||
|
option(BUILD_TEST "build test" OFF)
|
||
|
option(BUILD_EXAMPLE "build examples" OFF)
|
||
|
option(BUILD_TOOL "build tools" OFF)
|
||
|
option(USE_THIRDPARTY_DIRECTORY
|
||
|
"Whether do it compile with third party directory" ON)
|
||
|
|
||
|
option(GLSLANG_INCLUDE_DIR "A directory which contains glslang includes" "")
|
||
|
option(GLSLANG_WITHOUT_INSTALL "Compile with Glslang without install" OFF)
|
||
|
option(SPIRVCROSS_INCLUDE_DIR "A directory which contains SPIRV-Cross includes"
|
||
|
"")
|
||
|
option(SPIRVCROSS_WITHOUT_INSTALL "Compile with spirv-cross without install"
|
||
|
OFF)
|
||
|
option(USE_CREATE_COMPILER_FUNCTION "Whether LLGI::CreateCompiler is used." ON)
|
||
|
|
||
|
if(LINUX)
|
||
|
set(BUILD_VULKAN TRUE)
|
||
|
endif()
|
||
|
|
||
|
option(USE_MSVC_RUNTIME_LIBRARY_DLL "compile as multithreaded DLL" ON)
|
||
|
|
||
|
include(cmake/ClangFormat.cmake)
|
||
|
|
||
|
# MSVC Flag
|
||
|
if(MSVC)
|
||
|
string(PREPEND CMAKE_CXX_FLAGS "/DNOMINMAX ")
|
||
|
|
||
|
if(POLICY CMP0091)
|
||
|
|
||
|
cmake_policy(GET CMP0091 CMP0091_STATE)
|
||
|
|
||
|
if(CMP0091_STATE EQUAL NEW)
|
||
|
|
||
|
if(USE_MSVC_RUNTIME_LIBRARY_DLL)
|
||
|
cmake_policy(SET CMP0091 NEW)
|
||
|
set(CMAKE_MSVC_RUNTIME_LIBRARY
|
||
|
"MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
|
||
|
else()
|
||
|
cmake_policy(SET CMP0091 NEW)
|
||
|
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
||
|
endif()
|
||
|
|
||
|
else()
|
||
|
|
||
|
if(NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
|
||
|
foreach(flag
|
||
|
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
||
|
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE)
|
||
|
|
||
|
if(${flag} MATCHES "/MD")
|
||
|
string(REGEX REPLACE "/MD" "/MT" ${flag} "${${flag}}")
|
||
|
endif()
|
||
|
if(${flag} MATCHES "/MDd")
|
||
|
string(REGEX REPLACE "/MDd" "/MTd" ${flag} "${${flag}}")
|
||
|
endif()
|
||
|
endforeach()
|
||
|
endif()
|
||
|
endif()
|
||
|
|
||
|
else()
|
||
|
|
||
|
if(NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
|
||
|
foreach(flag
|
||
|
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
|
||
|
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE)
|
||
|
|
||
|
if(${flag} MATCHES "/MD")
|
||
|
string(REGEX REPLACE "/MD" "/MT" ${flag} "${${flag}}")
|
||
|
endif()
|
||
|
if(${flag} MATCHES "/MDd")
|
||
|
string(REGEX REPLACE "/MDd" "/MTd" ${flag} "${${flag}}")
|
||
|
endif()
|
||
|
endforeach()
|
||
|
endif()
|
||
|
|
||
|
endif()
|
||
|
endif()
|
||
|
|
||
|
if(BUILD_VULKAN_COMPILER OR BUILD_TOOL)
|
||
|
if(USE_THIRDPARTY_DIRECTORY)
|
||
|
|
||
|
ExternalProject_Add(
|
||
|
EP_glslang
|
||
|
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glslang
|
||
|
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/EP/Build/glslang
|
||
|
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/EP/Install/glslang
|
||
|
CMAKE_ARGS
|
||
|
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/EP/Install/glslang
|
||
|
-DCMAKE_USER_MAKE_RULES_OVERRIDE=${CMAKE_CURRENT_SOURCE_DIR}/cmake/CFlagOverrides.cmake
|
||
|
-DUSE_MSVC_RUNTIME_LIBRARY_DLL=${USE_MSVC_RUNTIME_LIBRARY_DLL}
|
||
|
-DCMAKE_DEBUG_POSTFIX=d
|
||
|
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||
|
-DCMAKE_POSITION_INDEPENDENT_CODE=ON)
|
||
|
list(APPEND LLGI_THIRDPARTY_INCLUDES
|
||
|
${CMAKE_CURRENT_BINARY_DIR}/EP/Install/glslang/include)
|
||
|
list(APPEND LLGI_THIRDPARTY_LIBRARY_DIRECTORIES
|
||
|
${CMAKE_CURRENT_BINARY_DIR}/EP/Install/glslang/lib)
|
||
|
list(
|
||
|
APPEND
|
||
|
LLGI_THIRDPARTY_LIBRARIES
|
||
|
debug
|
||
|
glslangd
|
||
|
debug
|
||
|
SPIRVd
|
||
|
debug
|
||
|
OGLCompilerd
|
||
|
debug
|
||
|
OSDependentd
|
||
|
debug
|
||
|
HLSLd
|
||
|
optimized
|
||
|
glslang
|
||
|
optimized
|
||
|
SPIRV
|
||
|
optimized
|
||
|
OGLCompiler
|
||
|
optimized
|
||
|
OSDependent
|
||
|
optimized
|
||
|
HLSL)
|
||
|
|
||
|
ExternalProject_Add(
|
||
|
EP_SPIRV-Cross
|
||
|
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/SPIRV-Cross
|
||
|
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/EP/Build/SPIRV-Cross
|
||
|
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/EP/Install/SPIRV-Cross
|
||
|
CMAKE_ARGS
|
||
|
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/EP/Install/SPIRV-Cross
|
||
|
-DCMAKE_USER_MAKE_RULES_OVERRIDE=${CMAKE_CURRENT_SOURCE_DIR}/cmake/CFlagOverrides.cmake
|
||
|
-DUSE_MSVC_RUNTIME_LIBRARY_DLL=${USE_MSVC_RUNTIME_LIBRARY_DLL}
|
||
|
-DCMAKE_DEBUG_POSTFIX=d
|
||
|
-DBUILD_SHARED_LIBS=OFF
|
||
|
-DSPIRV_CROSS_ENABLE_TESTS=OFF
|
||
|
-DSPIRV_CROSS_FORCE_PIC=ON
|
||
|
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||
|
-DCMAKE_POSITION_INDEPENDENT_CODE=ON)
|
||
|
|
||
|
list(APPEND LLGI_THIRDPARTY_INCLUDES
|
||
|
${CMAKE_CURRENT_BINARY_DIR}/EP/Install/SPIRV-Cross/include)
|
||
|
list(APPEND LLGI_THIRDPARTY_LIBRARY_DIRECTORIES
|
||
|
${CMAKE_CURRENT_BINARY_DIR}/EP/Install/SPIRV-Cross/lib)
|
||
|
|
||
|
list(
|
||
|
APPEND
|
||
|
LLGI_THIRDPARTY_LIBRARIES
|
||
|
debug
|
||
|
spirv-cross-cored
|
||
|
debug
|
||
|
spirv-cross-cd
|
||
|
debug
|
||
|
spirv-cross-cppd
|
||
|
debug
|
||
|
spirv-cross-hlsld
|
||
|
debug
|
||
|
spirv-cross-glsld
|
||
|
debug
|
||
|
spirv-cross-msld
|
||
|
debug
|
||
|
spirv-cross-reflectd
|
||
|
debug
|
||
|
spirv-cross-utild
|
||
|
optimized
|
||
|
spirv-cross-core
|
||
|
optimized
|
||
|
spirv-cross-c
|
||
|
optimized
|
||
|
spirv-cross-cpp
|
||
|
optimized
|
||
|
spirv-cross-hlsl
|
||
|
optimized
|
||
|
spirv-cross-glsl
|
||
|
optimized
|
||
|
spirv-cross-msl
|
||
|
optimized
|
||
|
spirv-cross-reflect
|
||
|
optimized
|
||
|
spirv-cross-util)
|
||
|
|
||
|
else()
|
||
|
list(APPEND LLGI_THIRDPARTY_INCLUDES ${GLSLANG_INCLUDE_DIR}
|
||
|
${SPIRVCROSS_INCLUDE_DIR})
|
||
|
|
||
|
endif()
|
||
|
|
||
|
endif()
|
||
|
|
||
|
if(BUILD_VULKAN)
|
||
|
add_definitions(-DENABLE_VULKAN)
|
||
|
|
||
|
if(GLSLANG_WITHOUT_INSTALL)
|
||
|
add_compile_definitions(LLGI PRIVATE ENABLE_GLSLANG_WITHOUT_INSTALL)
|
||
|
endif()
|
||
|
|
||
|
if(BUILD_VULKAN_COMPILER)
|
||
|
add_definitions(-DENABLE_VULKAN_COMPILER)
|
||
|
endif()
|
||
|
endif()
|
||
|
|
||
|
if(APPLE)
|
||
|
add_definitions(-DENABLE_METAL)
|
||
|
endif()
|
||
|
|
||
|
add_subdirectory("src")
|
||
|
|
||
|
if(BUILD_TEST)
|
||
|
add_subdirectory("src_test")
|
||
|
endif()
|
||
|
|
||
|
if(BUILD_EXAMPLE)
|
||
|
add_subdirectory("examples")
|
||
|
endif()
|
||
|
|
||
|
if(BUILD_TOOL)
|
||
|
add_subdirectory("tools")
|
||
|
endif()
|
||
|
|
||
|
if(USE_CREATE_COMPILER_FUNCTION)
|
||
|
target_compile_definitions(LLGI PRIVATE ENABLE_CREATE_COMPILER)
|
||
|
endif()
|