# Set build-directive (used in core to tell which buildtype we used) target_compile_definitions(trinity-compile-option-interface INTERFACE -D_BUILD_DIRECTIVE="$") set(GCC_EXPECTED_VERSION 10.0.0) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS GCC_EXPECTED_VERSION) message(FATAL_ERROR "GCC: TrinityCore requires version ${GCC_EXPECTED_VERSION} to build but found ${CMAKE_CXX_COMPILER_VERSION}") else() message(STATUS "GCC: Minimum version required is ${GCC_EXPECTED_VERSION}, found ${CMAKE_CXX_COMPILER_VERSION} - ok!") endif() if(PLATFORM EQUAL 32) # Required on 32-bit systems to enable SSE2 (standard on x64) target_compile_options(trinity-compile-option-interface INTERFACE -msse2 -mfpmath=sse) endif() if(TRINITY_SYSTEM_PROCESSOR MATCHES "x86|amd64") target_compile_definitions(trinity-compile-option-interface INTERFACE -DHAVE_SSE2 -D__SSE2__) message(STATUS "GCC: SFMT enabled, SSE2 flags forced") endif() if(WITH_WARNINGS) target_compile_options(trinity-warning-interface INTERFACE -W -Wall -Wextra -Winit-self -Winvalid-pch -Wfatal-errors -Woverloaded-virtual -Wno-missing-field-initializers) # this warning is useless when combined with structure members that have default initializers message(STATUS "GCC: All warnings enabled") endif() if(WITH_COREDEBUG) target_compile_options(trinity-compile-option-interface INTERFACE -g3) message(STATUS "GCC: Debug-flags set (-g3)") endif() if(ASAN) target_compile_options(trinity-compile-option-interface INTERFACE -fno-omit-frame-pointer -fsanitize=address -fsanitize-recover=address -fsanitize-address-use-after-scope) target_link_options(trinity-compile-option-interface INTERFACE -fno-omit-frame-pointer -fsanitize=address -fsanitize-recover=address -fsanitize-address-use-after-scope) message(STATUS "GCC: Enabled Address Sanitizer") endif() if(BUILD_SHARED_LIBS) target_compile_options(trinity-compile-option-interface INTERFACE -fPIC -Wno-attributes) target_compile_options(trinity-hidden-symbols-interface INTERFACE -fvisibility=hidden) # Should break the build when there are TRINITY_*_API macros missing # but it complains about missing references in precompiled headers. # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,--no-undefined") # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--no-undefined") message(STATUS "GCC: Enabled shared linking") endif()