Skip to content

Commit

Permalink
move to CMake, possibly break Windows support temporarily
Browse files Browse the repository at this point in the history
  • Loading branch information
allpurposemat committed Mar 6, 2021
1 parent f7f9ed6 commit 3fc623d
Show file tree
Hide file tree
Showing 5 changed files with 446 additions and 63 deletions.
319 changes: 319 additions & 0 deletions CMakeLists (copy).txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,319 @@
cmake_minimum_required(VERSION 3.15.0 FATAL_ERROR)

set(CMAKE_SYSTEM_VERSION 10.0 CACHE STRING "" FORCE)

project(Minecraft4k C CXX)

################################################################################
# Set target arch type if empty. Visual studio solution generator provides it.
################################################################################
if(NOT CMAKE_VS_PLATFORM_NAME)
set(CMAKE_VS_PLATFORM_NAME "x64")
endif()
message("${CMAKE_VS_PLATFORM_NAME} architecture in use")

if(NOT ("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64"
OR "${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86"))
message(FATAL_ERROR "${CMAKE_VS_PLATFORM_NAME} arch is not supported!")
endif()

################################################################################
# Global configuration types
################################################################################
set(CMAKE_CONFIGURATION_TYPES
"Debug"
"Release"
CACHE STRING "" FORCE
)

################################################################################
# Global compiler options
################################################################################
if(MSVC)
# remove default flags provided with CMake for MSVC
set(CMAKE_C_FLAGS "")
set(CMAKE_C_FLAGS_DEBUG "")
set(CMAKE_C_FLAGS_RELEASE "")
set(CMAKE_CXX_FLAGS "")
set(CMAKE_CXX_FLAGS_DEBUG "")
set(CMAKE_CXX_FLAGS_RELEASE "")
endif()

################################################################################
# Global linker options
################################################################################
if(MSVC)
# remove default flags provided with CMake for MSVC
set(CMAKE_EXE_LINKER_FLAGS "")
set(CMAKE_MODULE_LINKER_FLAGS "")
set(CMAKE_SHARED_LINKER_FLAGS "")
set(CMAKE_STATIC_LINKER_FLAGS "")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_STATIC_LINKER_FLAGS_DEBUG "${CMAKE_STATIC_LINKER_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS}")
endif()

################################################################################
# Nuget packages function stub.
################################################################################
function(use_package TARGET PACKAGE VERSION)
message(WARNING "No implementation of use_package. Create yours. "
"Package \"${PACKAGE}\" with version \"${VERSION}\" "
"for target \"${TARGET}\" is ignored!")
endfunction()

################################################################################
# Common utils
################################################################################
include(CMake/Utils.cmake)

################################################################################
# Additional Global Settings(add specific info there)
################################################################################
include(CMake/GlobalSettingsInclude.cmake OPTIONAL)

################################################################################
# Use solution folders feature
################################################################################
set_property(GLOBAL PROPERTY USE_FOLDERS ON)

#include_directories(include)


set(PROJECT_NAME Minecraft4k)

################################################################################
# Source groups
################################################################################
set(Header_Files
"Constants.h"
"Shader.h"
"TextureGenerator.h"
"Util.h"
"World.h"
)
source_group("Header Files" FILES ${Header_Files})

set(Resource_Files
"res/raytrace.comp"
"res/screen.frag"
"res/screen.vert"
)
source_group("Resource Files" FILES ${Resource_Files})

set(Source_Files
"glad.c"
"Minecraft4k.cpp"
"Shader.cpp"
"TextureGenerator.cpp"
"Util.cpp"
"World.cpp"
)
source_group("Source Files" FILES ${Source_Files})

set(ALL_FILES
${Header_Files}
${Resource_Files}
${Source_Files}
)

################################################################################
# Target
################################################################################
add_executable(${PROJECT_NAME} ${ALL_FILES})

use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}")
set(ROOT_NAMESPACE Minecraft4k)

set_target_properties(${PROJECT_NAME} PROPERTIES
VS_GLOBAL_KEYWORD "Win32Proj"
)
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
set_target_properties(${PROJECT_NAME} PROPERTIES
INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE"
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86")
set_target_properties(${PROJECT_NAME} PROPERTIES
INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE"
)
endif()
################################################################################
# Include directories
################################################################################
include_directories(${PROJECT_NAME} PUBLIC
"include"
)

################################################################################
# Compile definitions
################################################################################
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
target_compile_definitions(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"_DEBUG"
">"
"$<$<CONFIG:Release>:"
"NDEBUG"
">"
"_CONSOLE;"
"UNICODE;"
"_UNICODE"
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86")
target_compile_definitions(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"_DEBUG"
">"
"$<$<CONFIG:Release>:"
"NDEBUG"
">"
"WIN32;"
"_CONSOLE;"
"UNICODE;"
"_UNICODE"
)
endif()

################################################################################
# Compile and link options
################################################################################
if(MSVC)
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
target_compile_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Release>:
/Oi-;
/Gy
>
/permissive-;
/O1;
/sdl;
/W3;
${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT};
/Os;
${DEFAULT_CXX_EXCEPTION_HANDLING}
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86")
target_compile_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Release>:
/Oi-;
/Gy
>
/permissive-;
/O1;
/sdl;
/W3;
${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT};
/Os;
${DEFAULT_CXX_EXCEPTION_HANDLING}
)
endif()
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
target_link_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Debug>:
/INCREMENTAL
>
$<$<CONFIG:Release>:
/INCREMENTAL:NO
>
/DEBUG;
/SUBSYSTEM:CONSOLE;
/OPT:REF;
/LTCG;
/OPT:ICF
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86")
target_link_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Debug>:
/INCREMENTAL
>
$<$<CONFIG:Release>:
/INCREMENTAL:NO
>
/DEBUG;
/SUBSYSTEM:CONSOLE;
/OPT:REF;
/LTCG;
/OPT:ICF
)
endif()
endif()

################################################################################
# Post build events
################################################################################
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
add_custom_command_if(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMANDS
COMMAND $<CONFIG:Debug> compress.bat $ENV{OutputPath}Minecraft4k.exe
COMMAND $<CONFIG:Release> compress.bat $ENV{OutputPath}Minecraft4k.exe
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86")
add_custom_command_if(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMANDS
COMMAND $<CONFIG:Debug> compress.bat $ENV{OutputPath}Minecraft4k.exe
COMMAND $<CONFIG:Release> compress.bat $ENV{OutputPath}Minecraft4k.exe
)
endif()

################################################################################
# Dependencies
################################################################################
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
set(ADDITIONAL_LIBRARY_DEPENDENCIES
"glfw;"
#"kernel32;"
#"user32;"
#"gdi32;"
#"winspool;"
#"comdlg32;"
#"advapi32;"
#"shell32;"
#"ole32;"
#"oleaut32;"
#"uuid;"
#"odbc32;"
#"odbccp32"
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86")
set(ADDITIONAL_LIBRARY_DEPENDENCIES
"glfw;"
#"kernel32;"
#"user32;"
#"gdi32;"
#"winspool;"
#"comdlg32;"
#"advapi32;"
#"shell32;"
#"ole32;"
#"oleaut32;"
#"uuid;"
#"odbc32;"
#"odbccp32"
)
endif()
target_link_libraries(${PROJECT_NAME} PRIVATE "${ADDITIONAL_LIBRARY_DEPENDENCIES}")

if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
link_directories(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"lib"
">"
"$<$<CONFIG:Release>:"
"lib"
">"
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86")
link_directories(${PROJECT_NAME} PRIVATE
"lib"
)
endif()

0 comments on commit 3fc623d

Please sign in to comment.