From ecdf51995f1b186e9c298d1058bfacfe9069eb97 Mon Sep 17 00:00:00 2001 From: Alexey Gladkov Date: Mon, 7 Oct 2024 17:39:29 +0200 Subject: [PATCH] Use -std=gnu11 Such a standard is used for linux kernel compilation. Since kbd follows the linux kernel interfaces we can use the same standard for compiler. Signed-off-by: Alexey Gladkov --- configure.ac | 2 ++ docs/process/programming-language.md | 34 ++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 docs/process/programming-language.md diff --git a/configure.ac b/configure.ac index 448ee4aa..f278f55e 100644 --- a/configure.ac +++ b/configure.ac @@ -31,6 +31,8 @@ AC_PROG_LN_S AC_PROG_MAKE_SET AC_CANONICAL_HOST +AX_CHECK_COMPILE_FLAG([-std=gnu11],[CFLAGS="$CFLAGS -std=gnu11"]) + dnl older versions of automake didn't include this macro m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) LT_INIT diff --git a/docs/process/programming-language.md b/docs/process/programming-language.md new file mode 100644 index 00000000..86392dea --- /dev/null +++ b/docs/process/programming-language.md @@ -0,0 +1,34 @@ +Programming Language +==================== + +The kernel is written in the C programming language [c-language]. +More precisely, the kernel is typically compiled with `gcc` [gcc] +under `-std=gnu11` [gcc-c-dialect-options]: the GNU dialect of ISO C11. +`clang` [clang] is also supported. + +This dialect contains many extensions to the language [gnu-extensions], +and many of them are used within the kbd as a matter of course. + +Attributes +--------------- + +One of the common extensions used throughout the kernel are +attributes [gcc-attribute-syntax]. Attributes allow to introduce +implementation-defined semantics to language entities (like variables, +functions or types) without having to make significant syntactic changes +to the language (e.g. adding a new keyword) [n2049]. + +In some cases, attributes are optional (i.e. a compiler not supporting them +should still produce proper code, even if it is slower or does not perform +as many compile-time checks/diagnostics). + +Please refer to `src/libcommon/compiler_attributes.h` for more information. + + +[c-language] http://www.open-std.org/jtc1/sc22/wg14/www/standards +[gcc] https://gcc.gnu.org +[clang] https://clang.llvm.org +[gcc-c-dialect-options] https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html +[gnu-extensions] https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html +[gcc-attribute-syntax] https://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html +[n2049] http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2049.pdf