mirror of
https://gitlab.com/suyu-emu/suyu.git
synced 2024-03-15 23:15:44 +00:00
13bc74e957
We generally shouldn't be hijacking CMAKE_CXX_FLAGS, etc as a means to append flags to the targets, since this adds the compilation flags to everything, including our externals, which can result in weird issues and makes the build hierarchy fragile. Instead, we want to just apply these compilation flags to our targets, and let those managing external libraries to properly specify their compilation flags. This also results in us not getting as many warnings, as we don't raise the warning level on every external target.
88 lines
3.3 KiB
CMake
88 lines
3.3 KiB
CMake
# Enable modules to include each other's files
|
|
include_directories(.)
|
|
|
|
# CMake seems to only define _DEBUG on Windows
|
|
set_property(DIRECTORY APPEND PROPERTY
|
|
COMPILE_DEFINITIONS $<$<CONFIG:Debug>:_DEBUG> $<$<NOT:$<CONFIG:Debug>>:NDEBUG>)
|
|
|
|
# Set compilation flags
|
|
if (MSVC)
|
|
# Silence "deprecation" warnings
|
|
add_definitions(/D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_DEPRECATE /D_SCL_SECURE_NO_WARNINGS)
|
|
# Avoid windows.h junk
|
|
add_definitions(/DNOMINMAX)
|
|
# Avoid windows.h from including some usually unused libs like winsocks.h, since this might cause some redefinition errors.
|
|
add_definitions(/DWIN32_LEAN_AND_MEAN)
|
|
|
|
set(CMAKE_CONFIGURATION_TYPES Debug Release CACHE STRING "" FORCE)
|
|
|
|
# Tweak optimization settings
|
|
# As far as I can tell, there's no way to override the CMake defaults while leaving user
|
|
# changes intact, so we'll just clobber everything and say sorry.
|
|
message(STATUS "Cache compiler flags ignored, please edit CMakeLists.txt to change the flags.")
|
|
|
|
# /W3 - Level 3 warnings
|
|
# /MP - Multi-threaded compilation
|
|
# /Zi - Output debugging information
|
|
# /Zo - enhanced debug info for optimized builds
|
|
# /permissive- - enables stricter C++ standards conformance checks
|
|
# /EHsc - C++-only exception handling semantics
|
|
# /Zc:throwingNew - let codegen assume `operator new` will never return null
|
|
# /Zc:inline - let codegen omit inline functions in object files
|
|
set(CMAKE_CXX_FLAGS "/W3 /MP /Zi /Zo /permissive- /EHsc /std:c++latest /Zc:throwingNew,inline" CACHE STRING "" FORCE)
|
|
|
|
# /O2 - Optimization level 2
|
|
# /GS- - No stack buffer overflow checks
|
|
# /MD - Multi-threaded runtime DLL
|
|
set(CMAKE_C_FLAGS_RELEASE "/O2 /GS- /MD" CACHE STRING "" FORCE)
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}" CACHE STRING "" FORCE)
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG /MANIFEST:NO" CACHE STRING "" FORCE)
|
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/DEBUG /MANIFEST:NO /INCREMENTAL:NO /OPT:REF,ICF" CACHE STRING "" FORCE)
|
|
else()
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes")
|
|
|
|
if (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL Clang)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++")
|
|
endif()
|
|
|
|
# Set file offset size to 64 bits.
|
|
#
|
|
# On modern Unixes, this is typically already the case. The lone exception is
|
|
# glibc, which may default to 32 bits. glibc allows this to be configured
|
|
# by setting _FILE_OFFSET_BITS.
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR MINGW)
|
|
add_definitions(-D_FILE_OFFSET_BITS=64)
|
|
endif()
|
|
|
|
if (MINGW)
|
|
add_definitions(-DMINGW_HAS_SECURE_API)
|
|
|
|
if (MINGW_STATIC_BUILD)
|
|
add_definitions(-DQT_STATICPLUGIN)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static")
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
add_subdirectory(common)
|
|
add_subdirectory(core)
|
|
add_subdirectory(audio_core)
|
|
add_subdirectory(video_core)
|
|
add_subdirectory(input_common)
|
|
add_subdirectory(tests)
|
|
|
|
if (ENABLE_SDL2)
|
|
add_subdirectory(yuzu_cmd)
|
|
endif()
|
|
|
|
if (ENABLE_QT)
|
|
add_subdirectory(yuzu)
|
|
endif()
|
|
|
|
if (ENABLE_WEB_SERVICE)
|
|
add_subdirectory(web_service)
|
|
endif()
|