cmake_minimum_required(VERSION 3.21) project(MinecraftPE) include(cmake/CPM.cmake) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED TRUE) set(CMAKE_CXX_FLAGS "-Wno-c++11-narrowing -Wno-invalid-source-encoding") CPMAddPackage("gh:madler/zlib@1.3.2") CPMAddPackage( NAME "libpng" GIT_REPOSITORY "https://github.com/pnggroup/libpng.git" GIT_TAG "v1.6.55" OPTIONS "ZLIB_ROOT ${zlib_SOURCE_DIR}" "ZLIB_INCLUDE_DIRS ${zlib_SOURCE_DIR}" "PNG_TOOLS OFF" "PNG_TESTS OFF" "BUILD_SHARED_LIBS ON" ) CPMAddPackage( NAME "openal" GIT_REPOSITORY "https://github.com/kcat/openal-soft.git" GIT_TAG "1.25.1" OPTIONS "ALSOFT_EXAMPLES OFF" "ALSOFT_TESTS OFF" "ALSOFT_UTILS OFF" "BUILD_SHARED_LIBS ON" ) CPMAddPackage( NAME "glfw" GIT_REPOSITORY "https://github.com/glfw/glfw.git" GIT_TAG "3.4" OPTIONS "GLFW_BUILD_EXAMPLES OFF" "GLFW_BUILD_TESTS OFF" "GLFW_BUILD_DOCS OFF" "BUILD_SHARED_LIBS ON" ) file(GLOB SOURCES "src/client/*.cpp" "src/client/gamemode/*.cpp" "src/client/gui/*.cpp" "src/client/gui/components/*.cpp" "src/client/gui/screens/*.cpp" "src/client/gui/screens/crafting/*.cpp" "src/client/gui/screens/touch/*.cpp" "src/client/model/*.cpp" "src/client/model/geom/*.cpp" "src/client/particle/*.cpp" "src/client/player/*.cpp" "src/client/player/input/*.cpp" "src/client/player/input/touchscreen/*.cpp" "src/client/renderer/*.cpp" "src/client/renderer/culling/*.cpp" "src/client/renderer/entity/*.cpp" "src/client/renderer/ptexture/*.cpp" "src/client/renderer/tileentity/*.cpp" "src/client/sound/*.cpp" "src/locale/*.cpp" "src/nbt/*.cpp" "src/network/*.cpp" "src/network/command/*.cpp" "src/platform/*.cpp" "src/platform/audio/SoundSystemAL.cpp" "src/platform/input/*.cpp" "src/raknet/**.cpp" "src/server/**.cpp" "src/util/**.cpp" "src/world/*.cpp" "src/world/phys/*.cpp" "src/world/entity/*.cpp" "src/world/entity/ai/control/*.cpp" "src/world/entity/animal/*.cpp" "src/world/entity/item/*.cpp" "src/world/entity/monster/*.cpp" "src/world/entity/player/*.cpp" "src/world/entity/projectile/*.cpp" "src/world/food/*.cpp" "src/world/inventory/*.cpp" "src/world/item/*.cpp" "src/world/item/crafting/*.cpp" "src/world/level/*.cpp" "src/world/level/biome/*.cpp" "src/world/level/chunk/*.cpp" "src/world/level/dimension/*.cpp" "src/world/level/levelgen/*.cpp" "src/world/level/levelgen/feature/*.cpp" "src/world/level/levelgen/synth/*.cpp" "src/world/level/material/*.cpp" "src/world/level/pathfinder/*.cpp" "src/world/level/storage/*.cpp" "src/world/level/tile/*.cpp" "src/world/level/tile/entity/*.cpp" "src/SharedConstants.cpp" "src/main.cpp" "src/NinecraftApp.cpp" ) if(NOT DEFINED PLATFORM) set(PLATFORM "PLATFORM_GLFW") endif() if(PLATFORM STREQUAL "PLATFORM_WIN32") list(APPEND SOURCES "src/AppPlatform_win32.cpp") endif() if(PLATFORM STREQUAL "PLATFORM_GLFW") list(APPEND SOURCES "src/AppPlatform_glfw.cpp") endif() add_executable(${PROJECT_NAME} ${SOURCES} "glad/src/glad.c" ) if(WIN32) set(EXTRA_LIBS "ws2_32") target_compile_definitions(${PROJECT_NAME} PUBLIC "_CRT_SECURE_NO_WARNINGS") endif() if(PLATFORM STREQUAL "PLATFORM_WIN32" OR PLATFORM STREQUAL "PLATFORM_GLFW") target_compile_definitions(${PROJECT_NAME} PUBLIC "PLATFORM_DESKTOP") endif() target_include_directories(${PROJECT_NAME} PUBLIC "${CMAKE_SOURCE_DIR}/glad/include/" "${CMAKE_SOURCE_DIR}/src" "${openal_SOURCE_DIR}/include" "${glfw_SOURCE_DIR}/include" "lib/include" ) target_compile_definitions(${PROJECT_NAME} PUBLIC "OPENGL_ES" "NO_EGL" ${PLATFORM}) target_link_libraries(${PROJECT_NAME} zlib png_shared alsoft.common OpenAL::OpenAL glfw ${EXTRA_LIBS}) if (NOT UNIX) add_custom_command( TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $ $ COMMAND_EXPAND_LISTS ) endif() add_custom_command( TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/data" $/data )