Initial commit

This commit is contained in:
Astatin3
2024-04-30 22:07:50 -06:00
commit 8565caa62a
8463 changed files with 4915934 additions and 0 deletions
+13
View File
@@ -0,0 +1,13 @@
# Check if asio folder is empty and clone submodule if needed
file(GLOB RESULT "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/asio/asio/include")
list(LENGTH RESULT RES_LEN)
if(RES_LEN EQUAL 0)
message(STATUS "Asio not found, cloning it...")
execute_process(COMMAND git submodule update --init -- 3rdparty/asio WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
endif()
add_library(asio INTERFACE IMPORTED)
set_property(TARGET asio PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/asio/asio/include")
if (WIN32)
target_compile_definitions(asio INTERFACE _WIN32_WINNT=0x0501)
endif(WIN32)
+69
View File
@@ -0,0 +1,69 @@
# Check if the minecraft assets folder already exists for the current version
# If not, download the client and extract the assets
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/minecraft")
message(STATUS "Downloading assets for version " ${BOTCRAFT_GAME_VERSION} " from " ${VERSION_CLIENT_URL} "...")
file(DOWNLOAD "${VERSION_CLIENT_URL}" "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/client.jar")
message(STATUS "Extracting assets...")
file(MAKE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/temp/")
execute_process(COMMAND "cmake" "-E" "tar" "xfz" "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/client.jar" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/temp/")
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/temp/assets/minecraft/" DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/")
message(STATUS "Removing temp folder")
file(REMOVE_RECURSE "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/temp")
endif()
# If assets folder doesn't exist, create it and copy all relevant files (custom and minecraft) to it
if(NOT EXISTS "${BOTCRAFT_OUTPUT_DIR}/bin/Assets/${BOTCRAFT_GAME_VERSION}")
message(STATUS "Asset folder not found, creating it...")
# Create base assets folder for given version
file(MAKE_DIRECTORY "${BOTCRAFT_OUTPUT_DIR}/bin/Assets/${BOTCRAFT_GAME_VERSION}")
endif()
# Copying custom assets
if(NOT EXISTS "${BOTCRAFT_OUTPUT_DIR}/bin/Assets/${BOTCRAFT_GAME_VERSION}/custom/")
message(STATUS "Copying custom assets...")
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/custom/")
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/custom/" DESTINATION "${BOTCRAFT_OUTPUT_DIR}/bin/Assets/${BOTCRAFT_GAME_VERSION}/custom/")
endif()
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/previous_custom_files.txt" previous_custom_files)
foreach(previous_file IN LISTS previous_custom_files)
string(REGEX MATCH "^[^\\]+" file_version "${previous_file}")
file(RELATIVE_PATH relative_file_path "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${file_version}" "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${previous_file}")
get_filename_component(relative_file_path "${relative_file_path}" DIRECTORY)
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${previous_file}" DESTINATION "${BOTCRAFT_OUTPUT_DIR}/bin/Assets/${BOTCRAFT_GAME_VERSION}/${relative_file_path}")
endforeach()
endif()
# Copying Minecraft assets
# Blockstates
if(NOT EXISTS "${BOTCRAFT_OUTPUT_DIR}/bin/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/blockstates")
message(STATUS "Copying minecraft blockstates...")
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/blockstates" DESTINATION "${BOTCRAFT_OUTPUT_DIR}/bin/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/")
endif()
# Block models
if(NOT EXISTS "${BOTCRAFT_OUTPUT_DIR}/bin/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/models/block")
message(STATUS "Copying minecraft block models...")
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/models/block" DESTINATION "${BOTCRAFT_OUTPUT_DIR}/bin/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/models")
endif()
# Textures
if(BOTCRAFT_USE_OPENGL_GUI)
# Blocks
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/textures/blocks" AND NOT EXISTS "${BOTCRAFT_OUTPUT_DIR}/bin/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/textures/blocks")
message(STATUS "Copying minecraft block textures...")
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/textures/blocks" DESTINATION "${BOTCRAFT_OUTPUT_DIR}/bin/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/textures")
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/textures/block" AND NOT EXISTS "${BOTCRAFT_OUTPUT_DIR}/bin/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/textures/block")
message(STATUS "Copying minecraft block textures...")
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/textures/block" DESTINATION "${BOTCRAFT_OUTPUT_DIR}/bin/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/textures")
endif()
# Entities
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/textures/entity" AND NOT EXISTS "${BOTCRAFT_OUTPUT_DIR}/bin/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/textures/entity")
message(STATUS "Copying minecraft entity textures...")
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/textures/entity" DESTINATION "${BOTCRAFT_OUTPUT_DIR}/bin/Assets/${BOTCRAFT_GAME_VERSION}/minecraft/textures")
endif()
endif()
set(ASSET_DIR ./Assets/${BOTCRAFT_GAME_VERSION})
+38
View File
@@ -0,0 +1,38 @@
# Add Catch2 library
# We first try to find Catch2 in the system
if(NOT BOTCRAFT_FORCE_LOCAL_CATCH)
find_package(Catch2 3 QUIET)
endif()
# If not found, build from sources
if(NOT TARGET Catch2::Catch2WithMain)
set(CATCH_SRC_PATH "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/catch2/")
set(CATCH_BUILD_PATH "${CMAKE_CURRENT_BINARY_DIR}/3rdparty/catch2")
file(GLOB RESULT "${CATCH_BUILD_PATH}/install")
list(LENGTH RESULT RES_LEN)
if(RES_LEN EQUAL 0)
message(STATUS "Can't find Catch2, installing it locally...")
file(GLOB RESULT "${CATCH_SRC_PATH}")
list(LENGTH RESULT RES_LEN)
if(RES_LEN EQUAL 0)
execute_process(COMMAND git submodule update --init -- 3rdparty/catch2 WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
endif()
file(MAKE_DIRECTORY "${CATCH_BUILD_PATH}")
execute_process(
COMMAND "${CMAKE_COMMAND}" "${CATCH_SRC_PATH}" "-G" "${CMAKE_GENERATOR}" "-A" "${CMAKE_GENERATOR_PLATFORM}" "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}" "-DCMAKE_BUILD_TYPE=Release" "-DCATCH_INSTALL_DOCS=OFF" "-DCMAKE_INSTALL_PREFIX=install"
WORKING_DIRECTORY "${CATCH_BUILD_PATH}")
execute_process(COMMAND "${CMAKE_COMMAND}" "--build" "." "--target" "install" "--parallel" "2" "--config" "Release" WORKING_DIRECTORY "${CATCH_BUILD_PATH}")
endif()
# Find the freshly built library
find_package(Catch2 3 REQUIRED PATHS "${CATCH_BUILD_PATH}/install/${CMAKE_INSTALL_LIBDIR}/cmake/Catch2")
include("${CATCH_BUILD_PATH}/install/${CMAKE_INSTALL_LIBDIR}/cmake/Catch2/Catch.cmake")
else()
include("${Catch2_DIR}/Catch.cmake")
endif()
+43
View File
@@ -0,0 +1,43 @@
find_package(Doxygen QUIET)
if (DOXYGEN_FOUND)
set(DOXYGEN_PREDEFINED "PROTOCOL_VERSION=${PROTOCOL_VERSION}")
if (BOTCRAFT_COMPRESSION)
set(DOXYGEN_PREDEFINED "${DOXYGEN_PREDEFINED} USE_COMPRESSION=1")
endif(BOTCRAFT_COMPRESSION)
if (BOTCRAFT_ENCRYPTION)
set(DOXYGEN_PREDEFINED "${DOXYGEN_PREDEFINED} USE_ENCRYPTION=1")
endif(BOTCRAFT_ENCRYPTION)
if (WIN32 AND BOTCRAFT_WINDOWS_BETTER_SLEEP)
set(DOXYGEN_PREDEFINED "${DOXYGEN_PREDEFINED} BETTER_SLEEP=1")
endif()
if (BOTCRAFT_USE_OPENGL_GUI)
set(DOXYGEN_PREDEFINED "${DOXYGEN_PREDEFINED} USE_GUI=1")
if(BOTCRAFT_USE_IMGUI)
set(DOXYGEN_PREDEFINED "${DOXYGEN_PREDEFINED} USE_IMGUI=1")
endif(BOTCRAFT_USE_IMGUI)
endif(BOTCRAFT_USE_OPENGL_GUI)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doxygen/main.md.in ${CMAKE_CURRENT_BINARY_DIR}/doxygen/main.md)
set(DOXYGEN_MAIN_PAGE ${CMAKE_CURRENT_BINARY_DIR}/doxygen/main.md)
set(DOXYGEN_WIKI_FOLDER ${CMAKE_CURRENT_BINARY_DIR}/doxygen/wiki)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doxygen/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/doxygen/Doxyfile)
add_custom_target(doc_doxygen
COMMAND ${CMAKE_COMMAND} -E echo "Removing previous wiki files..."
COMMAND ${CMAKE_COMMAND} -E rm -rf ${CMAKE_CURRENT_BINARY_DIR}/doxygen/wiki
COMMAND ${CMAKE_COMMAND} -E echo "Downloading latest version of repo wiki pages..."
COMMAND git clone --depth 1 https://github.com/adepierre/Botcraft.wiki.git ${DOXYGEN_WIKI_FOLDER}
COMMAND ${CMAKE_COMMAND} -E echo "Running doxygen..."
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating documentation with Doxygen"
VERBATIM
)
else()
message(WARNING "BOTCRAFT_BUILD_DOC set to ON, but Doxygen not found")
endif(DOXYGEN_FOUND)
+29
View File
@@ -0,0 +1,29 @@
# Add glad library
# We first try to find glad in the system
if (NOT BOTCRAFT_FORCE_LOCAL_GLAD)
find_package(glad QUIET)
endif()
# If not found, build from sources
if(NOT TARGET glad)
set(GLAD_SRC_PATH "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/glad/")
set(GLAD_BUILD_PATH "${CMAKE_CURRENT_BINARY_DIR}/3rdparty/glad")
file(GLOB RESULT "${GLAD_BUILD_PATH}/install")
list(LENGTH RESULT RES_LEN)
if(RES_LEN EQUAL 0)
message(STATUS "Can't find glad, installing it locally...")
file(MAKE_DIRECTORY "${GLAD_BUILD_PATH}")
execute_process(
COMMAND "${CMAKE_COMMAND}" "${GLAD_SRC_PATH}" "-G" "${CMAKE_GENERATOR}" "-A" "${CMAKE_GENERATOR_PLATFORM}" "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}" "-DCMAKE_BUILD_TYPE=Release" "-DCMAKE_INSTALL_PREFIX=install" "-DCMAKE_POSITION_INDEPENDENT_CODE=ON"
WORKING_DIRECTORY "${GLAD_BUILD_PATH}")
execute_process(COMMAND "${CMAKE_COMMAND}" "--build" "." "--target" "install" "--parallel" "2" "--config" "Release" WORKING_DIRECTORY "${GLAD_BUILD_PATH}")
endif()
# Find the freshly built library
find_package(glad QUIET PATHS "${GLAD_BUILD_PATH}/install")
endif()
+36
View File
@@ -0,0 +1,36 @@
# Add GLFW library
# We first try to find glfw in the system
if(NOT BOTCRAFT_FORCE_LOCAL_GLFW)
find_package(glfw3 3.3 QUIET)
endif()
# If not found, build from sources
if(NOT TARGET glfw)
set(GLFW_SRC_PATH "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/glfw/")
set(GLFW_BUILD_PATH "${CMAKE_CURRENT_BINARY_DIR}/3rdparty/glfw")
file(GLOB RESULT "${GLFW_BUILD_PATH}/install")
list(LENGTH RESULT RES_LEN)
if(RES_LEN EQUAL 0)
message(STATUS "Can't find GLFW, installing it locally...")
file(GLOB RESULT "${GLFW_SRC_PATH}")
list(LENGTH RESULT RES_LEN)
if(RES_LEN EQUAL 0)
execute_process(COMMAND git submodule update --init -- 3rdparty/glfw WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
endif()
file(MAKE_DIRECTORY "${GLFW_BUILD_PATH}")
execute_process(
COMMAND "${CMAKE_COMMAND}" "${GLFW_SRC_PATH}" "-G" "${CMAKE_GENERATOR}" "-A" "${CMAKE_GENERATOR_PLATFORM}" "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}" "-DCMAKE_BUILD_TYPE=Release" "-DGLFW_BUILD_EXAMPLES=OFF" "-DGLFW_BUILD_TESTS=OFF" "-DGLFW_BUILD_DOCS=OFF" "-DGLFW_INSTALL=ON" "-DCMAKE_INSTALL_PREFIX=install"
WORKING_DIRECTORY "${GLFW_BUILD_PATH}")
execute_process(COMMAND "${CMAKE_COMMAND}" "--build" "." "--target" "install" "--parallel" "2" "--config" "Release" WORKING_DIRECTORY "${GLFW_BUILD_PATH}")
endif()
# Find the freshly built library
find_package(glfw3 3.3 REQUIRED PATHS "${GLFW_BUILD_PATH}/install/${CMAKE_INSTALL_LIBDIR}/cmake/glfw3")
endif()
+10
View File
@@ -0,0 +1,10 @@
# Check if glm folder is empty and clone submodule if needed
file(GLOB RESULT "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/glm/glm")
list(LENGTH RESULT RES_LEN)
if(RES_LEN EQUAL 0)
message(STATUS "glm not found, cloning it...")
execute_process(COMMAND git submodule update --init -- 3rdparty/glm WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
endif()
add_library(glm INTERFACE IMPORTED)
set_property(TARGET glm PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/glm")
+67
View File
@@ -0,0 +1,67 @@
# Check if imgui folder is empty and clone submodule if needed
file(GLOB RESULT "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui/misc")
list(LENGTH RESULT RES_LEN)
if(RES_LEN EQUAL 0)
message(STATUS "Imgui not found, cloning it...")
execute_process(COMMAND git submodule update --init -- 3rdparty/imgui WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
endif()
# Check if imgui-node-editor folder is empty and clone submodule if needed
file(GLOB RESULT "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui-node-editor/misc")
list(LENGTH RESULT RES_LEN)
if(RES_LEN EQUAL 0)
message(STATUS "Imgui node editor not found, cloning it...")
execute_process(COMMAND git submodule update --init -- 3rdparty/imgui-node-editor WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
endif()
if(NOT TARGET imgui)
set(IMGUI_SOURCES
3rdparty/imgui/imgui.cpp
3rdparty/imgui/imgui_draw.cpp
3rdparty/imgui/imgui_tables.cpp
3rdparty/imgui/imgui_widgets.cpp
3rdparty/imgui/backends/imgui_impl_glfw.cpp
3rdparty/imgui/backends/imgui_impl_opengl3.cpp
#Add Node-Editor extension
3rdparty/imgui-node-editor/crude_json.cpp
3rdparty/imgui-node-editor/crude_json.cpp
3rdparty/imgui-node-editor/imgui_canvas.cpp
3rdparty/imgui-node-editor/imgui_node_editor.cpp
3rdparty/imgui-node-editor/imgui_node_editor_api.cpp
)
set(IMGUI_HEADERS
3rdparty/imgui/imconfig.h
3rdparty/imgui/imgui.h
3rdparty/imgui/imgui_internal.h
3rdparty/imgui/imstb_rectpack.h
3rdparty/imgui/imstb_textedit.h
3rdparty/imgui/imstb_truetype.h
3rdparty/imgui/backends/imgui_impl_glfw.h
3rdparty/imgui/backends/imgui_impl_opengl3.h
#Add Node-Editor extension
3rdparty/imgui-node-editor/crude_json.h
3rdparty/imgui-node-editor/imgui_bezier_math.h
3rdparty/imgui-node-editor/imgui_bezier_math.inl
3rdparty/imgui-node-editor/imgui_canvas.h
3rdparty/imgui-node-editor/imgui_extra_math.h
3rdparty/imgui-node-editor/imgui_extra_math.inl
3rdparty/imgui-node-editor/imgui_node_editor.h
3rdparty/imgui-node-editor/imgui_node_editor_internal.h
3rdparty/imgui-node-editor/imgui_node_editor_internal.inl
)
add_library(imgui STATIC ${IMGUI_HEADERS} ${IMGUI_SOURCES})
set_property(TARGET imgui PROPERTY POSITION_INDEPENDENT_CODE ON)
set(IMGUI_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui")
target_include_directories(imgui PUBLIC "${IMGUI_DIR}")
target_include_directories(imgui PUBLIC "${IMGUI_DIR}/backends")
set(IMGUI_NODE_EDITOR_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/imgui-node-editor")
target_include_directories(imgui PUBLIC "${IMGUI_NODE_EDITOR_DIR}")
target_compile_definitions(imgui PUBLIC IMGUI_IMPL_OPENGL_LOADER_GLAD)
target_link_libraries(imgui PRIVATE OpenGL::GL glfw glad)
set_target_properties(imgui PROPERTIES FOLDER 3rdparty)
endif()
+92
View File
@@ -0,0 +1,92 @@
# Will get client.jar and server.jar urls for a given game version and save them in ${VERSION_CLIENT/SERVER_URL}
function(get_mc_version_urls game_version)
if(NOT EXISTS "${CMAKE_BINARY_DIR}/mc_version_json_files/${game_version}.json")
message(STATUS "${game_version}.json does not exist, retrieving it...")
# Download global manifest file
message(STATUS "Downloading Mojang's version_manifest_v2.json...")
file(DOWNLOAD
"https://piston-meta.mojang.com/mc/game/version_manifest_v2.json" # URL
"${CMAKE_BINARY_DIR}/mc_version_json_files/version_manifest_v2.json" # Path
STATUS DOWNLOAD_STATUS # Status code
)
# Separate the returned status code, and error message
list(GET DOWNLOAD_STATUS 0 STATUS_CODE)
list(GET DOWNLOAD_STATUS 1 ERROR_MESSAGE)
if(${STATUS_CODE} EQUAL 0)
message(STATUS "version_manifest_v2.json downloaded successfully. Extracting ${game_version} json urls...")
else()
# Exit CMake if the download failed, printing the error message.
message(FATAL_ERROR "Error occurred during version_manifest_v2.json download: ${ERROR_MESSAGE}")
endif()
file(READ "${CMAKE_BINARY_DIR}/mc_version_json_files/version_manifest_v2.json" VERSION_MANIFEST_V2_CONTENT)
# Get versions length
string(JSON versions_array_length LENGTH ${VERSION_MANIFEST_V2_CONTENT} "versions")
foreach(IDX RANGE ${versions_array_length})
# Get the version of the current element
string(JSON current_version GET ${VERSION_MANIFEST_V2_CONTENT} "versions" ${IDX} "id")
# If it matches desired game_version, get version specific json URL
if(current_version STREQUAL game_version)
string(JSON version_json_url GET ${VERSION_MANIFEST_V2_CONTENT} "versions" ${IDX} "url")
break()
endif()
endforeach()
# Download version specific json file
message(STATUS "Downloading Mojang's ${game_version}.json...")
file(DOWNLOAD
"${version_json_url}" # URL
"${CMAKE_BINARY_DIR}/mc_version_json_files/${game_version}.json" # Path
STATUS DOWNLOAD_STATUS # Status code
)
# Separate the returned status code, and error message
list(GET DOWNLOAD_STATUS 0 STATUS_CODE)
list(GET DOWNLOAD_STATUS 1 ERROR_MESSAGE)
if(${STATUS_CODE} EQUAL 0)
message(STATUS "${game_version}.json downloaded successfully. Extracting client and server urls...")
else()
# Exit CMake if the download failed, printing the error message.
message(FATAL_ERROR "Error occurred during ${game_version}.json download: ${ERROR_MESSAGE}")
endif()
endif()
# If we are here, ${game_version}.json exists, so get the URLs from it
file(READ "${CMAKE_BINARY_DIR}/mc_version_json_files/${game_version}.json" GAME_VERSION_JSON_CONTENT)
# Read client URL
string(JSON VERSION_CLIENT_URL GET ${GAME_VERSION_JSON_CONTENT} "downloads" "client" "url")
# Read server URL
string(JSON VERSION_SERVER_URL GET ${GAME_VERSION_JSON_CONTENT} "downloads" "server" "url")
set(VERSION_CLIENT_URL ${VERSION_CLIENT_URL} PARENT_SCOPE)
set(VERSION_SERVER_URL ${VERSION_SERVER_URL} PARENT_SCOPE)
endfunction()
function(download_mc_server url path)
if(NOT EXISTS ${path})
message(STATUS "Downloading server.jar...")
file(DOWNLOAD
${url} # URL
${path} # Path
STATUS DOWNLOAD_STATUS # Status code
SHOW_PROGRESS
)
# Separate the returned status code, and error message
list(GET DOWNLOAD_STATUS 0 STATUS_CODE)
list(GET DOWNLOAD_STATUS 1 ERROR_MESSAGE)
if(NOT ${STATUS_CODE} EQUAL 0)
# Exit CMake if the download failed, printing the error message.
message(FATAL_ERROR "Error occurred during server.jar download: ${ERROR_MESSAGE}")
endif()
endif()
endfunction()
+47
View File
@@ -0,0 +1,47 @@
# Add OpenSSL library
# We first try to find OpenSSL in the system
if(NOT BOTCRAFT_FORCE_LOCAL_OPENSSL)
find_package(OpenSSL QUIET)
endif()
# If not found, build from sources
if(NOT OPENSSL_FOUND)
set(OPENSSL_SRC_PATH "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/openssl/")
set(OPENSSL_BUILD_PATH "${CMAKE_CURRENT_BINARY_DIR}/3rdparty/openssl")
file(GLOB RESULT "${OPENSSL_BUILD_PATH}/install")
list(LENGTH RESULT RES_LEN)
if(RES_LEN EQUAL 0)
message(STATUS "Can't find OpenSSL, installing it locally...")
file(GLOB RESULT "${OPENSSL_SRC_PATH}")
list(LENGTH RESULT RES_LEN)
if(RES_LEN EQUAL 0)
execute_process(COMMAND git submodule update --init -- 3rdparty/openssl WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
endif()
file(MAKE_DIRECTORY "${OPENSSL_BUILD_PATH}")
execute_process(
COMMAND "${CMAKE_COMMAND}" "${OPENSSL_SRC_PATH}" "-G" "${CMAKE_GENERATOR}" "-A" "${CMAKE_GENERATOR_PLATFORM}" "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}" "-DCMAKE_BUILD_TYPE=Release" "-DCMAKE_INSTALL_PREFIX=install" "-DWITH_APPS=OFF" "-DCPACK_SOURCE_7Z=OFF" "-DCPACK_SOURCE_ZIP=OFF" "-DMSVC_RUNTIME=dynamic" "-DCMAKE_POSITION_INDEPENDENT_CODE=ON"
WORKING_DIRECTORY "${OPENSSL_BUILD_PATH}")
execute_process(COMMAND "${CMAKE_COMMAND}" "--build" "." "--target" "install" "--parallel" "2" "--config" "Release" WORKING_DIRECTORY "${OPENSSL_BUILD_PATH}")
set(OPENSSL_FOUND ON CACHE INTERNAL "")
endif()
endif()
if(NOT TARGET OpenSSL::SSL OR NOT TARGET OpenSSL::Crypto)
# Create imported targets
file(GLOB ssl_lib_file "${OPENSSL_BUILD_PATH}/install/lib/*libssl*")
add_library(OpenSSL::SSL STATIC IMPORTED)
set_property(TARGET OpenSSL::SSL PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_BUILD_PATH}/install/include")
set_target_properties(OpenSSL::SSL PROPERTIES IMPORTED_LOCATION "${ssl_lib_file}")
file(GLOB crypto_lib_file "${OPENSSL_BUILD_PATH}/install/lib/*libcrypto*")
add_library(OpenSSL::Crypto STATIC IMPORTED)
set_property(TARGET OpenSSL::Crypto PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_BUILD_PATH}/install/include")
set_target_properties(OpenSSL::Crypto PROPERTIES IMPORTED_LOCATION "${crypto_lib_file}")
endif()
+10
View File
@@ -0,0 +1,10 @@
# Check if rectpack2d folder is empty and clone submodule if needed
file(GLOB RESULT "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/rectpack2D/src")
list(LENGTH RESULT RES_LEN)
if(RES_LEN EQUAL 0)
message(STATUS "rectpack2D not found, cloning it...")
execute_process(COMMAND git submodule update --init -- 3rdparty/rectpack2D WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
endif()
add_library(rectpack2D INTERFACE IMPORTED)
set_property(TARGET rectpack2D PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/rectpack2D/src")
+2
View File
@@ -0,0 +1,2 @@
add_library(stb_image INTERFACE IMPORTED)
set_property(TARGET stb_image PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/stb_image/include")
+2
View File
@@ -0,0 +1,2 @@
add_library(subprocess INTERFACE IMPORTED)
set_property(TARGET subprocess PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/subprocess/include")
+52
View File
@@ -0,0 +1,52 @@
# Add zlib library
# We first try to find zlib in the system
if(NOT BOTCRAFT_FORCE_LOCAL_ZLIB)
find_package(ZLIB QUIET)
endif()
# If not found, build from sources
if(NOT TARGET ZLIB::ZLIB)
set(ZLIB_SRC_PATH "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zlib/")
set(ZLIB_BUILD_PATH "${CMAKE_CURRENT_BINARY_DIR}/3rdparty/zlib")
file(GLOB RESULT "${ZLIB_BUILD_PATH}/install")
list(LENGTH RESULT RES_LEN)
if(RES_LEN EQUAL 0)
message(STATUS "Can't find Zlib, cloning and building it from sources")
file(GLOB RESULT "${ZLIB_SRC_PATH}")
list(LENGTH RESULT RES_LEN)
if(RES_LEN EQUAL 0)
execute_process(COMMAND git submodule update --init -- 3rdparty/zlib WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
endif()
file(MAKE_DIRECTORY "${ZLIB_BUILD_PATH}")
execute_process(
COMMAND "${CMAKE_COMMAND}" "${ZLIB_SRC_PATH}" "-G" "${CMAKE_GENERATOR}" "-A" "${CMAKE_GENERATOR_PLATFORM}" "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}" "-DCMAKE_BUILD_TYPE=Release" "-DCMAKE_INSTALL_PREFIX=install" "-DCMAKE_POSITION_INDEPENDENT_CODE=ON"
WORKING_DIRECTORY "${ZLIB_BUILD_PATH}")
execute_process(COMMAND "${CMAKE_COMMAND}" "--build" "." "--target" "install" "--parallel" "2" "--config" "Release" WORKING_DIRECTORY "${ZLIB_BUILD_PATH}")
endif()
# Find the freshly built library
# From 3.24 there is a cmake option to find zlib static
# but before, we need to do it in a more manual way
if(${CMAKE_VERSION} VERSION_LESS "3.24.0")
set(_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
set(CMAKE_FIND_LIBRARY_SUFFIXES "static.lib" ".a")
else()
set(ZLIB_USE_STATIC_LIBS "ON")
endif()
set(ZLIB_ROOT "${ZLIB_BUILD_PATH}/install")
find_package(ZLIB QUIET)
# Revert library suffix to what they were
if(${CMAKE_VERSION} VERSION_LESS "3.24.0")
set(CMAKE_FIND_LIBRARY_SUFFIXES ${_CMAKE_FIND_LIBRARY_SUFFIXES})
unset(_CMAKE_FIND_LIBRARY_SUFFIXES)
endif()
endif()