ref: 03c460a60b1f16b1eb28902e8c95d8807e6d811b
parent: a0f7ce8d9f6ca608a4ebd770f0fed6d292aa23f5
parent: e96619141bef8da194dd693b547db9e338fb10d0
author: Clownacy <[email protected]>
date: Sat Mar 14 18:10:00 EDT 2020
Merge branch 'accurate' into portable
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,17 @@
cmake_minimum_required(VERSION 3.12)
+
+#############
+# Constants #
+#############
+
set(ASSETS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/assets")
+
+###########
+# Options #
+###########
+
option(JAPANESE "Enable the Japanese-language build (instead of the unofficial Aeon Genesis English translation)" OFF)
option(FIX_BUGS "Fix various bugs in the game" OFF)
option(DEBUG_SAVE "Re-enable the ability to drag-and-drop save files onto the window" OFF)
@@ -13,26 +23,15 @@
option(FORCE_LOCAL_LIBS "Compile the built-in versions of SDL2, FreeType, and FLTK instead of using the system-provided ones" OFF)
-list(APPEND CMAKE_MODULE_PATH
- "${CMAKE_SOURCE_DIR}/cmake"
-)
+#########
+# Setup #
+#########
+
project(CSE2 LANGUAGES C CXX)
-if(MSVC AND MSVC_LINK_STATIC_RUNTIME)
- # Statically-link the CRT (vcpkg static libs do this)
- foreach(flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
- if(${flag_var} MATCHES "/MD")
- string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
- endif()
- endforeach()
-endif()
-
-##
-# CSE2
-##
-
-add_executable(CSE2
+add_executable(CSE2 WIN32
+ "${ASSETS_DIRECTORY}/resources/CSE2.rc"
"src/ArmsItem.cpp"
"src/ArmsItem.h"
"src/Back.cpp"
@@ -233,7 +232,15 @@
"WAVE/Wave.dat"
)
-# Handle options
+list(APPEND CMAKE_MODULE_PATH
+ "${CMAKE_SOURCE_DIR}/cmake"
+)
+
+
+###################
+# Option handling #
+###################
+
if(JAPANESE)
set(BUILD_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/game_japanese")
list(APPEND RESOURCES "BITMAP/pixel_jp.bmp" "FONT/NotoSansMonoCJKjp.otf")
@@ -255,6 +262,27 @@
target_compile_definitions(CSE2 PRIVATE DEBUG_SAVE)
endif()
+if(LTO)
+ include(CheckIPOSupported)
+
+ check_ipo_supported(RESULT result)
+
+ if(result)
+ set_target_properties(CSE2 PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE)
+ endif()
+endif()
+
+# This is messy as hell, and has been replaced by CMAKE_MSVC_RUNTIME_LIBRARY,
+# but that's a very recent CMake addition, so we're still doing it this way for now
+if(MSVC AND MSVC_LINK_STATIC_RUNTIME)
+ # Statically-link the CRT (vcpkg static libs do this)
+ foreach(flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
+ if(${flag_var} MATCHES "/MD")
+ string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
+ endif()
+ endforeach()
+endif()
+
if(BACKEND_RENDERER MATCHES "OpenGL3")
target_sources(CSE2 PRIVATE "src/Backends/Rendering/OpenGL3.cpp")
elseif(BACKEND_RENDERER MATCHES "OpenGLES2")
@@ -292,12 +320,11 @@
message(FATAL_ERROR "Invalid BACKEND_AUDIO selected")
endif()
-# Make some tweaks if we're targetting Windows
-if(WIN32)
- target_sources(CSE2 PRIVATE "${ASSETS_DIRECTORY}/resources/CSE2.rc")
- set_target_properties(CSE2 PROPERTIES WIN32_EXECUTABLE YES) # Disable the console window
-endif()
+##########
+# Tweaks #
+##########
+
# Make some tweaks if we're using MSVC
if(MSVC)
# Disable warnings that normally fire up on MSVC when using "unsafe" functions instead of using MSVC's "safe" _s functions
@@ -308,44 +335,10 @@
endif()
-# Build bin2h externally, so it isn't cross-compiled when CSE2 is (Emscripten, cross-GCC, MinGW on Linux, etc.)
-include(ExternalProject)
+##################
+# Misc. settings #
+##################
-ExternalProject_Add(bin2h
- SOURCE_DIR "${CMAKE_SOURCE_DIR}/bin2h"
- DOWNLOAD_COMMAND ""
- UPDATE_COMMAND ""
- BUILD_BYPRODUCTS "<INSTALL_DIR>/bin/bin2h"
- CMAKE_ARGS
- -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
- -DCMAKE_BUILD_TYPE=Release
- -DWARNINGS=${WARNINGS}
- -DWARNINGS_ALL=${WARNINGS_ALL}
- -DWARNINGS_FATAL=${WARNINGS_FATAL}
- INSTALL_COMMAND
- ${CMAKE_COMMAND} --build . --config Release --target install
-)
-
-ExternalProject_Get_Property(bin2h INSTALL_DIR)
-
-add_executable(bin2h_tool IMPORTED)
-add_dependencies(bin2h_tool bin2h)
-set_target_properties(bin2h_tool PROPERTIES IMPORTED_LOCATION "${INSTALL_DIR}/bin/bin2h")
-
-# Convert resources to header files
-foreach(FILENAME IN LISTS RESOURCES)
- set(IN_DIR "${ASSETS_DIRECTORY}/resources")
- set(OUT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/Resource")
- get_filename_component(DIRECTORY "${FILENAME}" DIRECTORY)
- add_custom_command(
- OUTPUT "${OUT_DIR}/${FILENAME}.h"
- COMMAND ${CMAKE_COMMAND} -E make_directory "${OUT_DIR}/${DIRECTORY}"
- COMMAND bin2h_tool "${IN_DIR}/${FILENAME}" "${OUT_DIR}/${FILENAME}.h"
- DEPENDS bin2h_tool "${IN_DIR}/${FILENAME}"
- )
- target_sources(CSE2 PRIVATE "${OUT_DIR}/${FILENAME}.h")
-endforeach()
-
# Force strict C90
set_target_properties(CSE2 PROPERTIES
C_STANDARD 90
@@ -375,17 +368,11 @@
RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BUILD_DIRECTORY}
)
-# Enable link-time optimisation if available
-if(LTO)
- if((${CMAKE_VERSION} VERSION_EQUAL 3.9) OR (${CMAKE_VERSION} VERSION_GREATER 3.9))
- include(CheckIPOSupported)
- check_ipo_supported(RESULT result)
- if(result)
- set_target_properties(CSE2 PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE)
- endif()
- endif()
-endif()
+################
+# Dependencies #
+################
+
# Find dependencies
if(NOT FORCE_LOCAL_LIBS)
@@ -451,9 +438,53 @@
target_link_libraries(CSE2 PRIVATE ${OPENGLES2_LIBRARIES})
endif()
-##
-# DoConfig
-##
+
+#######################
+# Resource conversion #
+#######################
+
+# Build bin2h externally, so it isn't cross-compiled when CSE2 is (Emscripten, cross-GCC, MinGW on Linux, etc.)
+include(ExternalProject)
+
+ExternalProject_Add(bin2h
+ SOURCE_DIR "${CMAKE_SOURCE_DIR}/bin2h"
+ DOWNLOAD_COMMAND ""
+ UPDATE_COMMAND ""
+ BUILD_BYPRODUCTS "<INSTALL_DIR>/bin/bin2h"
+ CMAKE_ARGS
+ -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
+ -DCMAKE_BUILD_TYPE=Release
+ -DWARNINGS=${WARNINGS}
+ -DWARNINGS_ALL=${WARNINGS_ALL}
+ -DWARNINGS_FATAL=${WARNINGS_FATAL}
+ INSTALL_COMMAND
+ ${CMAKE_COMMAND} --build . --config Release --target install
+)
+
+ExternalProject_Get_Property(bin2h INSTALL_DIR)
+
+add_executable(bin2h_tool IMPORTED)
+add_dependencies(bin2h_tool bin2h)
+set_target_properties(bin2h_tool PROPERTIES IMPORTED_LOCATION "${INSTALL_DIR}/bin/bin2h")
+
+# Convert resources to header files
+foreach(FILENAME IN LISTS RESOURCES)
+ set(IN_DIR "${ASSETS_DIRECTORY}/resources")
+ set(OUT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/Resource")
+ get_filename_component(DIRECTORY "${FILENAME}" DIRECTORY)
+ add_custom_command(
+ OUTPUT "${OUT_DIR}/${FILENAME}.h"
+ COMMAND ${CMAKE_COMMAND} -E make_directory "${OUT_DIR}/${DIRECTORY}"
+ COMMAND bin2h_tool "${IN_DIR}/${FILENAME}" "${OUT_DIR}/${FILENAME}.h"
+ DEPENDS bin2h_tool "${IN_DIR}/${FILENAME}"
+ )
+ target_sources(CSE2 PRIVATE "${OUT_DIR}/${FILENAME}.h")
+endforeach()
+
+
+############
+# DoConfig #
+############
add_subdirectory("DoConfig")
--- a/Makefile
+++ b/Makefile
@@ -31,16 +31,6 @@
DOCONFIG_FILENAME_DEF = DoConfig_debug$(EXE_EXTENSION)
endif
-ifeq ($(LTO), 1)
- ALL_CFLAGS += -flto
- ALL_CXXFLAGS += -flto
-endif
-
-ifeq ($(NATIVE_OPTIMIZATIONS), 1)
- ALL_CFLAGS += -march=native
- ALL_CXXFLAGS += -march=native
-endif
-
ifeq ($(JAPANESE), 1)
BUILD_DIRECTORY = game_japanese
--- a/README.md
+++ b/README.md
@@ -95,7 +95,6 @@
--------|--------
`RELEASE=1` | Compile a release build (optimised, stripped, etc.)
`STATIC=1` | Produce a statically-linked executable (good for Windows builds, so you don't need to bundle DLL files)
-`LTO=1` | Enable link-time optimisation
`JAPANESE=1` | Enable the Japanese-language build (instead of the unofficial Aeon Genesis English translation)
`FIX_BUGS=1` | Fix various bugs in the game
`WINDOWS=1` | Build for Windows