Files
mcpe/CMakeLists.txt

114 lines
3.6 KiB
CMake

# CMake build system
# (c) Er2 2024 <er2@dismail.de>
# Zlib License
cmake_minimum_required(VERSION 3.16)
if ("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
message(FATAL_ERROR "Prevented in-tree build.\n"
"Use cmake -S. -Bbuild instead."
)
endif()
# Use actual name as some IDEs can show them
project(ReMinecraftPE LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 11)
set(PLATFORMS android sdl windows server)
set(RENDERERS gl gles)
if (ANDROID)
set(_DEFAULT_PLAT android)
set(_DEFAULT_RENDER gles)
elseif (WIN32)
set(_DEFAULT_PLAT windows)
set(_DEFAULT_RENDER gl) # TODO: DirectX
else()
set(_DEFAULT_PLAT sdl)
set(_DEFAULT_RENDER gl)
endif()
set(platform ${_DEFAULT_PLAT} CACHE STRING "Active platform")
set(render ${_DEFAULT_RENDER} CACHE STRING "Active renderer")
set_property(CACHE platform PROPERTY STRINGS ${PLATFORMS})
set_property(CACHE render PROPERTY STRINGS ${RENDERERS})
message(STATUS "Active platform: ${platform}")
message(STATUS "Active renderer: ${render}")
if (ANDROID)
message(STATUS "Android library will be only built. For apk use gradle")
elseif (EMSCRIPTEN)
# Code should be built with -pthread to use pthread
add_compile_options(-pthread)
add_link_options(-pthread)
endif()
if (platform STREQUAL android)
# set -fPIC
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
set(USE_NATIVE_ANDROID 1)
add_compile_definitions(USE_NATIVE_ANDROID)
elseif (platform STREQUAL macos)
message(FATAL_ERROR "${PLATFORM} currently can't be built using cmake. Use XCode instead")
elseif (platform STREQUAL sdl)
set(USE_SDL 1)
add_compile_definitions(USE_SDL)
#elseif (platform STREQUAL server)
# set(BUILD_SERVER 1)
# add_compile_definitions(SERVER)
endif()
if (WIN32 OR ANDROID OR EMSCRIPTEN)
set(USE_GLES1_COMPATIBILITY_LAYER FALSE CACHE BOOL "" FORCE)
elseif (NOT EMSCRIPTEN AND NOT ANDROID)
option(USE_GLES1_COMPATIBILITY_LAYER "Whether To Enable The GLESv1_CM Compatibility Layer" TRUE)
else()
set(USE_GLES1_COMPATIBILITY_LAYER TRUE CACHE BOOL "" FORCE)
endif()
if (USE_GLES1_COMPATIBILITY_LAYER OR platform STREQUAL sdl)
# Prepare SDL library
add_library(SDL INTERFACE)
if (NOT platform STREQUAL sdl)
message(FATAL_ERROR "GLESv1 compatibility layer can't be currently used without sdl2")
endif()
endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/app")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
# WASM
if (EMSCRIPTEN)
function(add_compile_and_link_options)
add_compile_options(${ARGV})
add_link_options(${ARGV})
endfunction()
set(CMAKE_EXECUTABLE_SUFFIX ".js")
add_link_options("$<$<CONFIG:DEBUG>:-gsource-map>")
endif()
# Threads
if (EMSCRIPTEN)
add_compile_and_link_options(-pthread)
elseif (WIN32)
# using winapi so no pthread
else()
find_package(Threads)
link_libraries(Threads::Threads)
endif()
# Platforms
if ("${platform}" IN_LIST PLATFORMS)
add_subdirectory(platforms/${platform})
else()
message(FATAL_ERROR "Unknown platform!")
endif()
set_property(DIRECTORY "${CMAKE_SOURCE_DIR}" PROPERTY VS_STARTUP_PROJECT ReMinecraftPE)
set_target_properties(${APP_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/app")
# Include source code
add_subdirectory(source)