Add musl/OHOS compatibility: dlopen caching, _LARGEFILE64_SOURCE, config.guess

* configure.ac: Check for dlopen in libc before trying -ldl. On musl
  (and OpenHarmony), dlopen is part of libc with no separate libdl.

* configure.ac: Add _LARGEFILE64_SOURCE fallback detection for fopen64.
  On musl, fopen64 needs this define to be declared; glibc exposes it
  via _LARGEFILE_SOURCE alone.

* config.guess: Recognize HarmonyOS uname -s output and canonicalize
  as *-unknown-linux-ohos.
This commit is contained in:
sailor001 2026-06-24 15:18:34 +08:00
parent cc5a2a9b3b
commit fbd825927b
2 changed files with 17 additions and 2 deletions

5
config.guess vendored
View File

@ -940,6 +940,9 @@ EOF
*:SerenityOS:*:*)
GUESS=$UNAME_MACHINE-pc-serenity
;;
*:HarmonyOS:*:*)
GUESS=$UNAME_MACHINE-unknown-linux-ohos
;;
*:Interix*:*)
case $UNAME_MACHINE in
x86)
@ -952,7 +955,7 @@ EOF
GUESS=ia64-unknown-interix$UNAME_RELEASE
;;
esac ;;
i*:UWIN*:*)
i*:UWIN:*:*)
GUESS=$UNAME_MACHINE-pc-uwin
;;
amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)

View File

@ -274,7 +274,9 @@ AC_MSG_RESULT($do_times)
AC_CHECK_HEADERS(dlfcn.h dl.h, break)
DLLIB=''
AC_CHECK_LIB(dl,dlopen,[DLLIB=-ldl])
# First check if dlopen is in libc (musl, OHOS, etc.)
AC_CHECK_FUNC(dlopen, [DLLIB=],
[AC_CHECK_LIB(dl,dlopen,[DLLIB=-ldl])])
if test -z "$DLLIB" ; then
AC_CHECK_LIB(dld,shl_load,[DLLIB=-ldld])
fi
@ -363,6 +365,16 @@ AC_CHECK_FUNCS(realpath)
# Check that these functions exist. They are mostly C99
# functions that older compilers may not yet support.
AC_CHECK_FUNCS(fopen64)
# On musl-based systems, fopen64 may need _LARGEFILE64_SOURCE to be
# declared. Try again with it defined if the first check failed.
if test "$ac_cv_func_fopen64" != yes; then
iverilog_saved_cppflags="$CPPFLAGS"
CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
AC_CHECK_FUNCS(fopen64,
[AC_DEFINE([_LARGEFILE64_SOURCE], [1],
[Define to 1 if _LARGEFILE64_SOURCE is needed for fopen64])])
CPPFLAGS="$iverilog_saved_cppflags"
fi
# The following math functions may be defined in the math library so look
# in the default libraries first and then look in -lm for them. On some
# systems we may need to use the compiler in C99 mode to get a definition.