# SPDX-License-Identifier: MPL-2.0 # # Options de compilation communes à toutes les cibles SEQUA. # Les règles de déterminisme suivent docs/SEQUA_Engine_resume_complet_v2.md §10.1 : # pas de fast-math, pas de contraction multiplication-addition. if(SEQUA_CLANG_TIDY) find_program(SEQUA_CLANG_TIDY_EXE NAMES clang-tidy REQUIRED) endif() # Sanitizers : appliqués à TOUT le build, dépendances comprises (ce fichier est inclus # avant SequaDependencies.cmake). Sous MSVC, ASan modifie la disposition des conteneurs # de la STL (annotate_string, annotate_vector) : mélanger du code instrumenté et non # instrumenté échoue à l'édition de liens (LNK2038). if(SEQUA_SANITIZERS) if(MSVC) if("address" IN_LIST SEQUA_SANITIZERS) add_compile_options(/fsanitize=address /Zi) add_link_options(/INCREMENTAL:NO) endif() if("undefined" IN_LIST SEQUA_SANITIZERS) message(STATUS "UBSan n'existe pas sous MSVC : ignoré") endif() else() list(JOIN SEQUA_SANITIZERS "," _sequa_sanitizers) add_compile_options(-fsanitize=${_sequa_sanitizers} -fno-omit-frame-pointer -fno-sanitize-recover=all) add_link_options(-fsanitize=${_sequa_sanitizers}) endif() endif() function(sequa_target_defaults target) if(MSVC) target_compile_options(${target} PRIVATE /W4 /permissive- /utf-8 /Zc:__cplusplus /Zc:preprocessor # Depuis VS 2022, /fp:precise ne contracte plus a*b+c en FMA (seul /fp:contract le fait). /fp:precise) if(SEQUA_WARNINGS_AS_ERRORS) target_compile_options(${target} PRIVATE /WX) endif() else() target_compile_options(${target} PRIVATE -Wall -Wextra -Wpedantic -Wshadow -Wconversion -Wsign-conversion -Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual -ffp-contract=off -fno-fast-math) if(SEQUA_WARNINGS_AS_ERRORS) target_compile_options(${target} PRIVATE -Werror) endif() endif() if(SEQUA_CLANG_TIDY) set_target_properties(${target} PROPERTIES CXX_CLANG_TIDY "${SEQUA_CLANG_TIDY_EXE}") endif() endfunction()