This mirrors the existing mechanism used by glibc to to set various required definitions when no C library header file has been included directly.
Signed-off-by: Keith Packard <[email protected]> --- gcc/config.gcc | 4 ++++ gcc/config/picolibc-c.cc | 37 +++++++++++++++++++++++++++++++++++++ gcc/config/t-picolibc | 22 ++++++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 gcc/config/picolibc-c.cc create mode 100644 gcc/config/t-picolibc diff --git a/gcc/config.gcc b/gcc/config.gcc index 328c49ac383..13a0757c5a6 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -3673,6 +3673,10 @@ case "${target}_${with_picolibc}" in *-picolibc-*|*_yes) default_use_cxa_atexit=yes use_gcc_stdint=none + tmake_file="${tmake_file} t-picolibc" + c_target_objs="${c_target_objs} picolibc-c.o" + cxx_target_objs="${cxx_target_objs} picolibc-c.o" + target_has_targetcm=yes # add newlib-stdint.h if not already present case "${tm_file}" in *newlib-stdint.h*) diff --git a/gcc/config/picolibc-c.cc b/gcc/config/picolibc-c.cc new file mode 100644 index 00000000000..b1ea02b3fd3 --- /dev/null +++ b/gcc/config/picolibc-c.cc @@ -0,0 +1,37 @@ +/* C-family target hooks initializer for targets possibly using picolibc. + Copyright © 2026 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "c-family/c-target.h" +#include "c-family/c-target-def.h" + +/* Implement TARGET_C_PREINCLUDE for picolibc targets. */ + +static const char * +picolibc_c_preinclude (void) +{ + return "stdc-predef.h"; +} + +#undef TARGET_C_PREINCLUDE +#define TARGET_C_PREINCLUDE picolibc_c_preinclude + +struct gcc_targetcm targetcm = TARGETCM_INITIALIZER; diff --git a/gcc/config/t-picolibc b/gcc/config/t-picolibc new file mode 100644 index 00000000000..137a423cafc --- /dev/null +++ b/gcc/config/t-picolibc @@ -0,0 +1,22 @@ +# +# Copyright © 2026 Keith Packard <[email protected]> +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +picolibc-c.o: config/picolibc-c.cc + $(COMPILE) $< + $(POSTCOMPILE) -- 2.55.0
