cmake_minimum_required(VERSION 3.24) # Name of the project, also is the name of the file project(SGD2FreeRes) # Define requirements for C set(CMAKE_C_STANDARD 90) set(CMAKE_C_STANDARD_REQUIRED ON) # Define requirements for C++ set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) # External dependencies add_subdirectory(external) # Enable NASM set(CMAKE_ASM_NASM_OBJECT_FORMAT win32) enable_language(ASM_NASM) # Remove MinGW compiled binary "lib" prefix if (MINGW) set(CMAKE_IMPORT_LIBRARY_PREFIX "") set(CMAKE_SHARED_LIBRARY_PREFIX "") set(CMAKE_STATIC_LIBRARY_PREFIX "") endif (MINGW) # List all of the source files here set(PROJECT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/SlashGaming-Diablo-II-Free-Resolution") set(RESOURCE_FILES "${PROJECT_DIR}/resource/resource.rc" ) set(CPP_FILES "${PROJECT_DIR}/src/helper/800_interface_bar.cc" "${PROJECT_DIR}/src/helper/abstract_multiversion_patch.cpp" "${PROJECT_DIR}/src/helper/abstract_version_patch.cpp" "${PROJECT_DIR}/src/helper/cel_file_collection.cc" "${PROJECT_DIR}/src/helper/custom_mpq.cc" "${PROJECT_DIR}/src/helper/ddraw_version.cc" "${PROJECT_DIR}/src/helper/evaluation.c" "${PROJECT_DIR}/src/helper/file_string.cc" "${PROJECT_DIR}/src/helper/file_version.cc" "${PROJECT_DIR}/src/helper/game_resolution.cc" "${PROJECT_DIR}/src/helper/glide3x_d2dx.cpp" "${PROJECT_DIR}/src/helper/glide3x_d2gl.cpp" "${PROJECT_DIR}/src/helper/glide3x_version.cc" "${PROJECT_DIR}/src/helper/patch_address_and_size.cpp" "${PROJECT_DIR}/src/helper/position_realignment.cc" "${PROJECT_DIR}/src/patches/patches.cc" "${PROJECT_DIR}/src/sgd2mapi_extension/game_function/d2client_function/d2client_draw_screens.cpp" "${PROJECT_DIR}/src/sgd2mapi_extension/game_variable/d2gfx/is_perspective_mode_enabled.cpp" "${PROJECT_DIR}/src/config.cc" "${PROJECT_DIR}/src/dll_main.cc" "${PROJECT_DIR}/src/sgd2fml_mod_exports.cc" "${PROJECT_DIR}/src/helper/checksum_hash.c" ) set(NASM_FILES "${PROJECT_DIR}/src/helper/cel_file_collection_asm.asm" ) set(PCH_C_FILES "${PROJECT_DIR}/src/pch.h" ) set(PCH_CXX_FILES "${PROJECT_DIR}/src/pch.hpp" ) set(SOURCE_FILES ${RESOURCE_FILES} ${CPP_FILES} ${NASM_FILES} ) # Output DLL add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES}) target_precompile_headers(${PROJECT_NAME} PRIVATE "$<$:${PCH_C_FILES}>" "$<$:${PCH_CXX_FILES}>" ) add_subdirectory("src") add_subdirectory(${PROJECT_DIR}) add_dependencies(${PROJECT_NAME} libMDCc libMDCcpp98 libSGD2MAPI SGD2FreeRes.Common rapidjson mjsoni) target_link_libraries(${PROJECT_NAME} PUBLIC libMDCc libMDCcpp98 libSGD2MAPI SGD2FreeRes.Common rapidjson mjsoni) get_target_property(SOURCE_FILES ${PROJECT_NAME} SOURCES) source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SOURCE_FILES}) # MSVC options if (MSVC) target_compile_definitions(${PROJECT_NAME} PRIVATE NOMINMAX _CRT_SECURE_NO_WARNINGS) endif (MSVC) # MinGW options if (MINGW) target_compile_options(${PROJECT_NAME} PRIVATE "-std=c++20") endif (MINGW) # Tests option(ENABLE_SGD2FREERES_TESTS "Enable tests" OFF) if (ENABLE_SGD2FREERES_TESTS) enable_testing() add_subdirectory("tests") endif (ENABLE_SGD2FREERES_TESTS) install(TARGETS ${PROJECT_NAME})