# --------------------------------------------------------------------------- # Warnungen als INTERFACE-Target. # # Als Target und nicht als globales CMAKE_C_FLAGS, damit der vendorte Code in # third_party/ die Warnungen NICHT abbekommt: unity.c und doctest.h sind nicht # unser Code, und -Wconversion darauf ergibt nur Rauschen. # # Kein -Werror (bewusste Entscheidung): waehrend eines TDD-Zyklus soll ein # unbenutztes Argument den Build nicht blockieren. Warnungen werden trotzdem # live in Neovim angezeigt, weil clangd sie ohnehin liefert. # --------------------------------------------------------------------------- # Die Datei kann aus zwei verschiedenen Projekten eingebunden werden # (Superprojekt und libpda im Alleinbetrieb). Ohne include_guard waere der # zweite add_library()-Aufruf ein harter Fehler: "target already exists". include_guard(GLOBAL) add_library(pda_warnings INTERFACE) set(PDA_GCC_LIKE_WARNINGS -Wall -Wextra -Wpedantic # Shadowing ist in C mit kurzen Namen (p, h, s) eine echte Fehlerquelle. -Wshadow # Implizite Verengungen (size_t -> uint16_t und aehnliches). Explizite # Casts -- (uint16_t) len -- schweigen weiterhin, implizite nicht. -Wconversion -Wsign-conversion -Wcast-qual -Wdouble-promotion -Wformat=2 -Wundef -Wunused -Wnull-dereference -Wimplicit-fallthrough -Warray-bounds ) # Bewusst NICHT dabei: -Wcast-align. # # Uebernommen aus dem Hausstandard: clang warnt bereits, wenn ein uint8_t* auf # einen ausgerichteten Typ gecastet wird, unabhaengig davon, wie der Puffer # tatsaechlich ausgerichtet ist -- also auch auf korrektem Code. Wer hier mit # rohen Puffern experimentiert, sichert die Ausrichtung im Code zu # (alignas(...)), wo sie ueberpruefbar ist. set(PDA_C_ONLY_WARNINGS # Ein () statt (void) in C ist eine Funktion mit unbekannten Parametern -- # in C23 zwar geheilt, aber die Warnung haelt aelteren Code ehrlich. -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition ) set(PDA_CXX_ONLY_WARNINGS -Wnon-virtual-dtor -Woverloaded-virtual -Wold-style-cast ) target_compile_options(pda_warnings INTERFACE $<$:${PDA_GCC_LIKE_WARNINGS};${PDA_C_ONLY_WARNINGS}> $<$:${PDA_GCC_LIKE_WARNINGS};${PDA_CXX_ONLY_WARNINGS}> )