[PATCH v2 27/28] configure: remove overly restrictive check for clang

H.J. Lu hjl.tools@gmail.com
Thu Oct 30 22:52:14 GMT 2025


On Thu, Oct 30, 2025 at 10:33 PM Adhemerval Zanella Netto
<adhemerval.zanella@linaro.org> wrote:
>
>
>
> On 28/10/25 17:28, H.J. Lu wrote:
> > On Wed, Oct 29, 2025 at 1:13 AM Adhemerval Zanella
> > <adhemerval.zanella@linaro.org> wrote:
> >>
> >> The clang support is still experimental and not all testcase build
> >> or run correctly.  Only clang 18 and onwards is supported and only
> >> for x86_64-linux-gnu and aarch64-linux-gnu.
> >> ---
> >>  NEWS         | 5 +++++
> >>  configure    | 4 ++--
> >>  configure.ac | 4 ++--
> >>  3 files changed, 9 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/NEWS b/NEWS
> >> index 244f7613d8..b4348ac51b 100644
> >> --- a/NEWS
> >> +++ b/NEWS
> >> @@ -13,6 +13,11 @@ Major new features:
> >>
> >>  * The ISO C23 memalignment function has been added.
> >>
> >> +* Initial support for building with clang has been added.  It requires
> >> +  at least clang version 18, aarch64-linux-gnu or x86_64-linux-gnu
> >> +  targets, and libgcc compatible runtime (including libgcc_s.so for
> >> +  pthread cancellation and backtrace runtime support).
> >> +
> >>  Deprecated and removed features, and other changes affecting compatibility:
> >>
> >>  * Support for dumped heaps has been removed - malloc_set_state() now always
> >> diff --git a/configure b/configure
> >> index 3c926be3ec..a21ce56302 100755
> >> --- a/configure
> >> +++ b/configure
> >> @@ -5799,7 +5799,7 @@ int
> >>  main (void)
> >>  {
> >>
> >> -#if !defined __GNUC__ || __GNUC__ < 12 || (__GNUC__ == 12 && __GNUC_MINOR__ < 1)
> >> +#if (!defined __GNUC__ || __GNUC__ < 12 || (__GNUC__ == 12 && __GNUC_MINOR__ < 1)) && (!defined __clang__ || __clang_major__ < 18)
> >>  #error insufficient compiler
> >>  #endif
> >>    ;
> >> @@ -7642,7 +7642,7 @@ else case e in #(
> >>  extern char *strstr (const char *, const char *) __asm ("my_strstr");
> >>  char *foo (const char *a, const char *b)
> >>  {
> >> -  return __builtin_strstr (a, b);
> >> +  return strstr (a, b);
> >>  }
> >>  EOF
> >>  if { ac_try='${CC-cc} -O3 -S conftest.c -o - | grep -F "my_strstr" > /dev/null'
> >> diff --git a/configure.ac b/configure.ac
> >> index 890f1b1c9c..29c45632fd 100644
> >> --- a/configure.ac
> >> +++ b/configure.ac
> >> @@ -585,7 +585,7 @@ AC_CHECK_PROG_VER(BISON, bison, --version,
> >>  # Require GCC 12.1 to build.
> >>  AC_CACHE_CHECK([if $CC is sufficient to build libc], libc_cv_compiler_ok, [
> >>  AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[]], [[
> >> -#if !defined __GNUC__ || __GNUC__ < 12 || (__GNUC__ == 12 && __GNUC_MINOR__ < 1)
> >> +#if (!defined __GNUC__ || __GNUC__ < 12 || (__GNUC__ == 12 && __GNUC_MINOR__ < 1)) && (!defined __clang__ || __clang_major__ < 18)
> >>  #error insufficient compiler
> >
> > This change doesn't match the subject which should require clang 18 or above.
>
> But this does make clang 17 older fail.  On aarch64:
>
> checking if [...]/clang+llvm-17.0.6-aarch64-linux-gnu/bin/clang -target aarch64-linux-gnu  is sufficient to build libc... no
> checking for python3... python3
> checking version of python3... 3.12.3, ok
> configure: error:
> *** These critical programs are missing or too old: compiler

This doesn't look like "configure: remove overly restrictive check for clang".
Why not just say "configure: Require clang 18 or above" in subject?

>
> >
> >>  #endif]])],
> >>                [libc_cv_compiler_ok=yes],
> >> @@ -1474,7 +1474,7 @@ cat > conftest.c <<\EOF
> >>  extern char *strstr (const char *, const char *) __asm ("my_strstr");
> >>  char *foo (const char *a, const char *b)
> >>  {
> >> -  return __builtin_strstr (a, b);
> >> +  return strstr (a, b);
> >
> > This should be a separate patch with a clear explanation.
>
> Fair enough, I will move this a different patch.



-- 
H.J.


More information about the Libc-alpha mailing list