Shcore.dll and SetProcessDpiAwareness were introduced in Windows 8 and higher, so to keep compatibility with Windows 7, we use GetProcAddress to call this function dynamically, avoiding linker writing binary dependency on shcore.dll in the import table
83 lines
3.5 KiB
CMake
83 lines
3.5 KiB
CMake
cmake_minimum_required(VERSION 3.24)
|
|
|
|
project(MinecraftConsoles LANGUAGES C CXX)
|
|
|
|
if(NOT WIN32)
|
|
message(FATAL_ERROR "This CMake build currently supports Windows only.")
|
|
endif()
|
|
|
|
if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
message(FATAL_ERROR "Use a 64-bit generator/toolchain (x64).")
|
|
endif()
|
|
|
|
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
|
|
|
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_CLIENT_SOURCES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/")
|
|
|
|
add_library(MinecraftWorld STATIC ${MINECRAFT_WORLD_SOURCES})
|
|
target_include_directories(MinecraftWorld PRIVATE
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World/x64headers"
|
|
)
|
|
target_compile_definitions(MinecraftWorld PRIVATE
|
|
$<$<CONFIG:Debug>:_LARGE_WORLDS;_DEBUG_MENUS_ENABLED;_DEBUG;_LIB;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_WINDOWS64>
|
|
$<$<NOT:$<CONFIG:Debug>>:_LARGE_WORLDS;_DEBUG_MENUS_ENABLED;_LIB;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_WINDOWS64>
|
|
)
|
|
if(MSVC)
|
|
target_compile_options(MinecraftWorld PRIVATE /W3 /MP /EHsc)
|
|
endif()
|
|
|
|
add_executable(MinecraftClient WIN32 ${MINECRAFT_CLIENT_SOURCES})
|
|
target_include_directories(MinecraftClient PRIVATE
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/Iggy/include"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Xbox/Sentient/Include"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World/x64headers"
|
|
)
|
|
target_compile_definitions(MinecraftClient PRIVATE
|
|
$<$<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>
|
|
)
|
|
if(MSVC)
|
|
target_compile_options(MinecraftClient PRIVATE /W3 /MP /EHsc)
|
|
endif()
|
|
|
|
set_target_properties(MinecraftClient PROPERTIES
|
|
VS_DEBUGGER_WORKING_DIRECTORY "$<TARGET_FILE_DIR:MinecraftClient>"
|
|
)
|
|
|
|
target_link_libraries(MinecraftClient PRIVATE
|
|
MinecraftWorld
|
|
d3d11
|
|
XInput9_1_0
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/Iggy/lib/iggy_w64.lib"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/Miles/lib/mss64.lib"
|
|
$<$<CONFIG:Debug>:
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Input_d.lib"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage_d.lib"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Profile_d.lib"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC_d.lib"
|
|
>
|
|
$<$<NOT:$<CONFIG:Debug>>:
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Input_r.lib"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage_r.lib"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Profile_r.lib"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC.lib"
|
|
>
|
|
)
|
|
|
|
add_custom_command(TARGET MinecraftClient POST_BUILD
|
|
COMMAND "${CMAKE_COMMAND}"
|
|
-DPROJECT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}"
|
|
-DOUTPUT_DIR="$<TARGET_FILE_DIR:MinecraftClient>"
|
|
-DCONFIGURATION=$<CONFIG>
|
|
-P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyAssets.cmake"
|
|
VERBATIM
|
|
)
|
|
|
|
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT MinecraftClient)
|