A bunch of CMake file cleanup

This commit is contained in:
Clownacy 2019-04-20 05:00:43 +01:00
parent 014d128396
commit 2bf46dc700

View file

@ -25,6 +25,21 @@ set(CMAKE_CXX_STANDARD 98)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_EXTENSIONS OFF)
if(MSVC)
# Static-link the CRT, so we don't need to lug around 10 different DLLs
foreach(FLAG_VAR
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
src/ArmsItem.cpp src/ArmsItem.cpp
src/ArmsItem.h src/ArmsItem.h
@ -251,8 +266,24 @@ else()
list(APPEND RESOURCES "ICON/ICON_MINI.bmp") list(APPEND RESOURCES "ICON/ICON_MINI.bmp")
endif() endif()
# Make some tweaks if we're using MSVC
if(MSVC)
# Work around MSVC2003's lack of stdint.h
include(CheckIncludeFiles)
check_include_files(stdint.h STDINT_EXISTS)
if(NOT STDINT_EXISTS)
target_include_directories(CSE2 PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/msvc/msvc2003")
endif()
# Shut up those stupid warnings
target_compile_definitions(CSE2 PRIVATE _CRT_SECURE_NO_WARNINGS)
endif()
# Magic to convert resources to header files # Magic to convert resources to header files
add_executable(bin2h src/misc/bin2h.c) add_executable(bin2h "src/misc/bin2h.c")
if(MSVC)
target_compile_definitions(bin2h PRIVATE _CRT_SECURE_NO_WARNINGS) # Shut up those stupid warnings
endif()
foreach(FILENAME IN LISTS RESOURCES) foreach(FILENAME IN LISTS RESOURCES)
set(IN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/res") set(IN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/res")
set(OUT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/Resource") set(OUT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src/Resource")
@ -266,9 +297,9 @@ foreach(FILENAME IN LISTS RESOURCES)
target_sources(CSE2 PRIVATE "${OUT_DIR}/${FILENAME}.h") target_sources(CSE2 PRIVATE "${OUT_DIR}/${FILENAME}.h")
endforeach() endforeach()
# Enable link-time optimisation if available
if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
if((${CMAKE_VERSION} VERSION_EQUAL 3.9) OR (${CMAKE_VERSION} VERSION_GREATER 3.9)) if((${CMAKE_VERSION} VERSION_EQUAL 3.9) OR (${CMAKE_VERSION} VERSION_GREATER 3.9))
# Enable link-time optimisation if available
include(CheckIPOSupported) include(CheckIPOSupported)
check_ipo_supported(RESULT result) check_ipo_supported(RESULT result)
if(result) if(result)
@ -277,54 +308,28 @@ if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
endif() endif()
endif() endif()
if (MSVC)
# Find dependencies # Find dependencies
if(MSVC)
# In MSVC we just use our own provided copy of SDL2 and FreeType # In MSVC we just use our own provided copy of SDL2 and FreeType
set(SDL2_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/msvc/SDL2/include") target_include_directories(CSE2 PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/msvc/SDL2/include" "${CMAKE_CURRENT_SOURCE_DIR}/msvc/freetype/include")
set(FREETYPE_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/msvc/freetype/include")
if(CMAKE_CL_64) if(CMAKE_CL_64)
set(SDL2_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/msvc/SDL2/lib/x64/SDL2.lib;${CMAKE_CURRENT_SOURCE_DIR}/msvc/SDL2/lib/x64/SDL2main.lib") target_link_libraries(CSE2 "${CMAKE_CURRENT_SOURCE_DIR}/msvc/SDL2/lib/x64/SDL2.lib" "${CMAKE_CURRENT_SOURCE_DIR}/msvc/SDL2/lib/x64/SDL2main.lib" "${CMAKE_CURRENT_SOURCE_DIR}/msvc/freetype/win64/freetype.lib")
set(FREETYPE_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/msvc/freetype/win64/freetype.lib")
else() else()
set(SDL2_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/msvc/SDL2/lib/x86/SDL2.lib;${CMAKE_CURRENT_SOURCE_DIR}/msvc/SDL2/lib/x86/SDL2main.lib") target_link_libraries(CSE2 "${CMAKE_CURRENT_SOURCE_DIR}/msvc/SDL2/lib/x86/SDL2.lib" "${CMAKE_CURRENT_SOURCE_DIR}/msvc/SDL2/lib/x86/SDL2main.lib" "${CMAKE_CURRENT_SOURCE_DIR}/msvc/freetype/win32/freetype.lib")
set(FREETYPE_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/msvc/freetype/win32/freetype.lib")
endif() endif()
# Static-link the CRT, so we don't need to lug around 10 different DLLs
foreach(FLAG_VAR
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()
# Work around MSVC2003's lack of stdint.h
include(CheckIncludeFiles)
check_include_files(stdint.h STDINT_EXISTS)
if (NOT STDINT_EXISTS)
target_include_directories(CSE2 PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/msvc/msvc2003")
endif()
# Shut up those stupid warnings
target_compile_definitions(CSE2 PRIVATE _CRT_SECURE_NO_WARNINGS)
elseif(MSYS) elseif(MSYS)
target_link_libraries(CSE2 -static)
# Fall back on pkg-config, since cmake's static support sucks # Fall back on pkg-config, since cmake's static support sucks
find_package(PkgConfig REQUIRED) find_package(PkgConfig REQUIRED)
pkg_check_modules(SDL2 REQUIRED sdl2) pkg_check_modules(SDL2 REQUIRED sdl2)
set(SDL2_INCLUDE_DIRS ${SDL2_STATIC_INCLUDE_DIRS})
set(SDL2_CFLAGS_OTHER ${SDL2_STATIC_CFLAGS_OTHER})
set(SDL2_LIBRARIES ${SDL2_STATIC_LIBRARIES})
pkg_check_modules(FREETYPE REQUIRED freetype2) pkg_check_modules(FREETYPE REQUIRED freetype2)
set(FREETYPE_INCLUDE_DIRS ${FREETYPE_STATIC_INCLUDE_DIRS})
set(FREETYPE_CFLAGS_OTHER ${FREETYPE_STATIC_CFLAGS_OTHER})
set(FREETYPE_LIBRARIES ${FREETYPE_STATIC_LIBRARIES})
target_link_libraries(CSE2 -static) target_include_directories(CSE2 PRIVATE ${SDL2_STATIC_INCLUDE_DIRS} ${FREETYPE_STATIC_INCLUDE_DIRS})
target_compile_options(CSE2 PRIVATE ${SDL2_STATIC_CFLAGS_OTHER} ${FREETYPE_STATIC_CFLAGS_OTHER})
target_link_libraries(CSE2 ${SDL2_STATIC_LIBRARIES} ${FREETYPE_STATIC_LIBRARIES})
else() else()
# SDL2 has no standard way of being used by cmake, so avoid # SDL2 has no standard way of being used by cmake, so avoid
# that mess entirely and just use pkg-config instead # that mess entirely and just use pkg-config instead
@ -332,12 +337,13 @@ else()
pkg_check_modules(SDL2 REQUIRED sdl2) pkg_check_modules(SDL2 REQUIRED sdl2)
find_package(Freetype REQUIRED) find_package(Freetype REQUIRED)
endif()
target_include_directories(CSE2 PRIVATE ${SDL2_INCLUDE_DIRS} ${FREETYPE_INCLUDE_DIRS}) target_include_directories(CSE2 PRIVATE ${SDL2_INCLUDE_DIRS} ${FREETYPE_INCLUDE_DIRS})
target_compile_options(CSE2 PRIVATE ${SDL2_CFLAGS_OTHER} ${FREETYPE_CFLAGS_OTHER}) target_compile_options(CSE2 PRIVATE ${SDL2_CFLAGS_OTHER} ${FREETYPE_CFLAGS_OTHER})
target_link_libraries(CSE2 ${SDL2_LIBRARIES} ${FREETYPE_LIBRARIES}) target_link_libraries(CSE2 ${SDL2_LIBRARIES} ${FREETYPE_LIBRARIES})
endif()
# Send executable to the build_en/build_jp directory
set_target_properties(CSE2 PROPERTIES set_target_properties(CSE2 PROPERTIES
RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BUILD_DIRECTORY} RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BUILD_DIRECTORY}
RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${BUILD_DIRECTORY} RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${BUILD_DIRECTORY}
@ -345,6 +351,7 @@ set_target_properties(CSE2 PROPERTIES
RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BUILD_DIRECTORY} RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BUILD_DIRECTORY}
) )
# Also send across SDL2.dll if using MSVC
if(MSVC) if(MSVC)
if(CMAKE_CL_64) if(CMAKE_CL_64)
set(SDL2_DLL_ARCH "x64") set(SDL2_DLL_ARCH "x64")
@ -357,11 +364,21 @@ if (MSVC)
) )
endif() endif()
# Now for DoConfig ##
# DoConfig
##
add_executable(DoConfig "DoConfig/DoConfig.cpp" "DoConfig/icon.rc") add_executable(DoConfig "DoConfig/DoConfig.cpp" "DoConfig/icon.rc")
# Windows tweak
if(WIN32)
set_target_properties(DoConfig PROPERTIES WIN32_EXECUTABLE YES) # Disable the console window set_target_properties(DoConfig PROPERTIES WIN32_EXECUTABLE YES) # Disable the console window
endif()
# MSVC tweak
if(MSVC)
target_compile_definitions(DoConfig PRIVATE _CRT_SECURE_NO_WARNINGS) # Shut up those stupid warnings
endif()
# Find FLTK # Find FLTK
if(MSVC) if(MSVC)
@ -378,9 +395,6 @@ if (MSVC)
target_link_libraries(DoConfig "legacy_stdio_definitions.lib") target_link_libraries(DoConfig "legacy_stdio_definitions.lib")
endif() endif()
endif() endif()
# Shut up those stupid warnings
target_compile_definitions(DoConfig PRIVATE _CRT_SECURE_NO_WARNINGS)
elseif(MSYS) elseif(MSYS)
target_link_libraries(DoConfig -static) target_link_libraries(DoConfig -static)
@ -400,6 +414,7 @@ else()
target_link_libraries(DoConfig ${FLTK_LIBRARIES}) target_link_libraries(DoConfig ${FLTK_LIBRARIES})
endif() endif()
# Send executable to the build_en/build_jp directory
set_target_properties(DoConfig PROPERTIES set_target_properties(DoConfig PROPERTIES
RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BUILD_DIRECTORY} RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BUILD_DIRECTORY}
RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${BUILD_DIRECTORY} RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${BUILD_DIRECTORY}
@ -407,9 +422,9 @@ set_target_properties(DoConfig PROPERTIES
RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BUILD_DIRECTORY} RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BUILD_DIRECTORY}
) )
# Enable link-time optimisation if available
if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
if((${CMAKE_VERSION} VERSION_EQUAL 3.9) OR (${CMAKE_VERSION} VERSION_GREATER 3.9)) if((${CMAKE_VERSION} VERSION_EQUAL 3.9) OR (${CMAKE_VERSION} VERSION_GREATER 3.9))
# Enable link-time optimisation if available
include(CheckIPOSupported) include(CheckIPOSupported)
check_ipo_supported(RESULT result) check_ipo_supported(RESULT result)
if(result) if(result)