somewhat finished cmake.

This commit is contained in:
izzy 2026-03-02 21:36:30 -05:00
parent 1ff8901ba7
commit 31a313610d
6 changed files with 4242 additions and 4120 deletions

View file

@ -5,6 +5,17 @@ project(MinecraftConsoles)
set(BACKEND "Windows64" CACHE STRING "Backend to compile. Windows64 or Cross64") set(BACKEND "Windows64" CACHE STRING "Backend to compile. Windows64 or Cross64")
set_property(CACHE BACKEND PROPERTY STRINGS "Windows64" "Cross64") set_property(CACHE BACKEND PROPERTY STRINGS "Windows64" "Cross64")
# assuming what the user wants, probably not best practice.
if(NOT DEFINED CACHE{BACKEND})
if(WIN32)
set(BACKEND "Windows64")
else()
set(BACKEND "Cross64")
endif()
endif()
message(STATUS "Building ${BACKEND}.")
if(BACKEND STREQUAL "Windows64") if(BACKEND STREQUAL "Windows64")
enable_language(C CXX ASM_MASM) enable_language(C CXX ASM_MASM)
else() else()
@ -19,11 +30,9 @@ if(MSVC)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif() endif()
# minecraftworld is shared with every backend.
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/WorldSources.cmake") include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/WorldSources.cmake")
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/ClientSources.cmake")
list(TRANSFORM MINECRAFT_WORLD_SOURCES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World/") list(TRANSFORM MINECRAFT_WORLD_SOURCES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World/")
list(TRANSFORM MINECRAFT_CLIENT_SOURCES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/")
add_library(MinecraftWorld STATIC ${MINECRAFT_WORLD_SOURCES}) add_library(MinecraftWorld STATIC ${MINECRAFT_WORLD_SOURCES})
target_include_directories(MinecraftWorld PRIVATE target_include_directories(MinecraftWorld PRIVATE
@ -36,45 +45,63 @@ target_compile_definitions(MinecraftWorld PRIVATE
) )
if(MSVC) if(MSVC)
target_compile_options(MinecraftWorld PRIVATE target_compile_options(MinecraftWorld PRIVATE
$<$<COMPILE_LANGUAGE:C,CXX>:/W3> $<$<COMPILE_LANGUAGE:C,CXX>:/W3 /MP>
$<$<COMPILE_LANGUAGE:C,CXX>:/MP>
$<$<COMPILE_LANGUAGE:CXX>:/EHsc> $<$<COMPILE_LANGUAGE:CXX>:/EHsc>
) )
endif() endif()
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/ClientSources.cmake")
# each backend is assumed to change these in some way.
set(BACKEND_SOURCES
"glWrapper.cpp"
"stubs.cpp"
"stdafx.cpp"
"iob_shim.asm"
"Windows64/Iggy/gdraw/gdraw_d3d11.cpp"
"Windows64/KeyboardMouseInput.cpp"
"Windows64/Leaderboards/WindowsLeaderboardManager.cpp"
"Windows64/Windows64_App.cpp"
"Windows64/Windows64_Minecraft.cpp"
"Windows64/Windows64_UIController.cpp"
"Windows64/Network/WinsockNetLayer.cpp"
)
# remove backend specific stuff
set(CLIENT_SHARED_SOURCES ${MINECRAFT_CLIENT_SOURCES})
list(REMOVE_ITEM CLIENT_SHARED_SOURCES ${BACKEND_SOURCES})
list(TRANSFORM CLIENT_SHARED_SOURCES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/")
if(BACKEND STREQUAL "Windows64") if(BACKEND STREQUAL "Windows64")
if(NOT WIN32) if(NOT WIN32)
message(FATAL_ERROR "The Windows64 backend currently only supports windows.") message(FATAL_ERROR "The Windows64 backend can only be built on Windows.")
endif() endif()
elseif(BACKEND STREQUAL "Cross64")
else()
message(FATAL_ERROR "Invalid Backend.")
endif()
add_executable(MinecraftClient WIN32 ${MINECRAFT_CLIENT_SOURCES}) list(TRANSFORM MINECRAFT_CLIENT_SOURCES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/")
target_include_directories(MinecraftClient PRIVATE
add_executable(MinecraftClient WIN32 ${MINECRAFT_CLIENT_SOURCES})
target_include_directories(MinecraftClient PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client" "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client"
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/Iggy/include" "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/Iggy/include"
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Xbox/Sentient/Include" "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Xbox/Sentient/Include"
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World/x64headers" "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World/x64headers"
) )
target_compile_definitions(MinecraftClient PRIVATE target_compile_definitions(MinecraftClient PRIVATE
$<$<CONFIG:Debug>:_LARGE_WORLDS;_DEBUG_MENUS_ENABLED;_DEBUG;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_WINDOWS64> $<$<CONFIG:Debug>:_LARGE_WORLDS;_DEBUG_MENUS_ENABLED;_DEBUG;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_WINDOWS64>
$<$<NOT:$<CONFIG:Debug>>:_LARGE_WORLDS;_DEBUG_MENUS_ENABLED;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_WINDOWS64> $<$<NOT:$<CONFIG:Debug>>:_LARGE_WORLDS;_DEBUG_MENUS_ENABLED;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_WINDOWS64>
) )
if(MSVC) if(MSVC)
target_compile_options(MinecraftClient PRIVATE target_compile_options(MinecraftClient PRIVATE
$<$<COMPILE_LANGUAGE:C,CXX>:/W3> $<$<COMPILE_LANGUAGE:C,CXX>:/W /MP>
$<$<COMPILE_LANGUAGE:C,CXX>:/MP>
$<$<COMPILE_LANGUAGE:CXX>:/EHsc> $<$<COMPILE_LANGUAGE:CXX>:/EHsc>
) )
endif() endif()
set_target_properties(MinecraftClient PROPERTIES set_target_properties(MinecraftClient PROPERTIES
VS_DEBUGGER_WORKING_DIRECTORY "$<TARGET_FILE_DIR:MinecraftClient>" VS_DEBUGGER_WORKING_DIRECTORY "$<TARGET_FILE_DIR:MinecraftClient>"
) )
target_link_libraries(MinecraftClient PRIVATE target_link_libraries(MinecraftClient PRIVATE
MinecraftWorld MinecraftWorld
d3d11 d3d11
XInput9_1_0 XInput9_1_0
@ -94,15 +121,91 @@ target_link_libraries(MinecraftClient PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage.lib" "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage.lib"
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC.lib" "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC.lib"
> >
) )
add_custom_command(TARGET MinecraftClient POST_BUILD add_custom_command(TARGET MinecraftClient POST_BUILD
COMMAND "${CMAKE_COMMAND}" COMMAND "${CMAKE_COMMAND}"
-DPROJECT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}" -DPROJECT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}"
-DOUTPUT_DIR="$<TARGET_FILE_DIR:MinecraftClient>" -DOUTPUT_DIR="$<TARGET_FILE_DIR:MinecraftClient>"
-DCONFIGURATION=$<CONFIG> -DCONFIGURATION=$<CONFIG>
-P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyAssets.cmake" -P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyAssets.cmake"
VERBATIM VERBATIM
) )
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT MinecraftClient) set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT MinecraftClient)
elseif(BACKEND STREQUAL "Cross64")
include(FetchContent)
FetchContent_Declare(glfw GIT_REPOSITORY https://github.com/glfw/glfw.git GIT_TAG 3.4)
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(glfw)
set(CROSS64_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Cross64")
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/Cross64Sources.cmake")
list(TRANSFORM CROSS64_SOURCES PREPEND "${CROSS64_DIR}")
add_executable(MinecraftClientCross64
${CLIENT_SHARED_SOURCES}
${CROSS64_SOURCES}
)
target_include_directories(MinecraftClientCross64 PRIVATE
"${CROSS64_DIR}"
"${CROSS64_DIR}/4JLibs/inc"
"${CROSS64_DIR}/Glad/include"
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client"
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World/x64headers"
)
if(MSVC)
target_compile_options(MinecraftClientCross64 PRIVATE
$<$<COMPILE_LANGUAGE:C,CXX>:/W3 /MP>
$<$<COMPILE_LANGUAGE:CXX>:/EHsc>
)
else()
target_compile_options(MinecraftClientCross64 PRIVATE
-Wall -Wextra
)
endif()
set_target_properties(MinecraftClientCross64 PROPERTIES
VS_DEBUGGER_WORKING_DIRECTORY "$<TARGET_FILE_DIR:MinecraftClientCross64>"
)
target_link_libraries(MinecraftClientCross64 PRIVATE
MinecraftWorld
glfw
)
if(APPLE)
target_link_libraries(MinecraftClientCross64 PRIVATE
"-framework OpenGL"
)
elseif(UNIX)
find_package(OpenGL REQUIRED)
target_link_libraries(MinecraftClientCross64 PRIVATE
OpenGL::GL pthread dl
)
elseif(WIN32)
find_package(OpenGL REQUIRED)
target_link_libraries(MinecraftClientCross64 PRIVATE
OpenGL::GL wsock32
)
endif()
add_custom_command(TARGET MinecraftClientCross64 POST_BUILD
COMMAND "${CMAKE_COMMAND}"
-DPROJECT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}"
-DOUTPUT_DIR="$<TARGET_FILE_DIR:MinecraftClientCross64>"
-DCONFIGURATION=$<CONFIG>
-P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyAssets.cmake"
VERBATIM
)
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT MinecraftClientCross64)
else()
message(FATAL_ERROR "Invalid Backend.")
endif()

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,4 @@
set(CROSS64_SOURCES
"/Glad/src/glad.c"
"/Cross64_Minecraft.cpp"
)