From 54b2016ecc4efc5f0d416167bd76b9eed9cb987f Mon Sep 17 00:00:00 2001 From: John Ericson <John.Ericson@Obsidian.Systems> Date: Fri, 5 Nov 2021 04:31:03 +0000 Subject: [PATCH] Move lib{numa,dw} defines to RTS configure Clean up the m4 to handle the auto case always and be more consistent. Also simplify the CPP --- we should always have both headers if we are using libnuma. "side effects" (AC_DEFINE, and AC_SUBST) are removed from the macros to better separate searching from actions taken based on search results. This might seem overkill now, but will make shuffling logic between configure scripts easier later. The macro comments are converted from `dnl` to `#` following the recomendation in https://www.gnu.org/software/autoconf/manual/autoconf-2.71/html_node/Macro-Definitions.html --- configure.ac | 13 +++++++++---- m4/fp_find_libdw.m4 | 43 +++++++++++++++++++++---------------------- m4/fp_find_libnuma.m4 | 41 ++++++++++++++++++----------------------- rts/configure.ac | 14 ++++++++++++++ 4 files changed, 62 insertions(+), 49 deletions(-) diff --git a/configure.ac b/configure.ac index 35a4e43dce3b..1cbd5510dff2 100644 --- a/configure.ac +++ b/configure.ac @@ -1131,7 +1131,14 @@ FP_FIND_LIBZSTD dnl ** Other RTS features dnl -------------------------------------------------------------- FP_FIND_LIBDW +AC_SUBST(UseLibdw) +AC_SUBST(LibdwLibDir) +AC_SUBST(LibdwIncludeDir) + FP_FIND_LIBNUMA +AC_SUBST(UseLibNuma) +AC_SUBST(LibNumaLibDir) +AC_SUBST(LibNumaIncludeDir) dnl ** Documentation dnl -------------------------------------------------------------- @@ -1282,17 +1289,15 @@ echo "\ cabal-install : $CABAL " -USING_LIBNUMA=$(if [ "$HaveLibNuma" = "1" ]; then echo "YES"; else echo "NO"; fi;) USING_LIBZSTD=$(if [ "$HaveLibZstd" = "1" ]; then echo "YES"; else echo "NO"; fi;) STATIC_LIBZSTD=$(if [ "$StaticLibZstd" = "1" ]; then echo "YES"; else echo "NO"; fi;) -USING_LIBDW=$(if [ "$USE_LIBDW" = "1" ]; then echo "YES"; else echo "NO"; fi;) echo "\ Using optional dependencies: - libnuma : $USING_LIBNUMA + libnuma : $UseLibNuma libzstd : $USING_LIBZSTD statically linked? : $STATIC_LIBZSTD - libdw : $USING_LIBDW + libdw : $UseLibdw Using LLVM tools llc : $LlcCmd diff --git a/m4/fp_find_libdw.m4 b/m4/fp_find_libdw.m4 index 29008408d792..22f24ab0232f 100644 --- a/m4/fp_find_libdw.m4 +++ b/m4/fp_find_libdw.m4 @@ -1,6 +1,11 @@ -dnl ** Have libdw? -dnl -------------------------------------------------------------- -dnl Sets UseLibdw. +# FP_FIND_LIBDW +# -------------------------------------------------------------- +# Should we used libdw? (yes, no, or auto.) +# +# Sets variables: +# - UseLibdw: [YES|NO] +# - LibdwLibDir: optional path +# - LibdwIncludeDir: optional path AC_DEFUN([FP_FIND_LIBDW], [ AC_ARG_WITH([libdw-libraries], @@ -12,8 +17,6 @@ AC_DEFUN([FP_FIND_LIBDW], LIBDW_LDFLAGS="-L$withval" ]) - AC_SUBST(LibdwLibDir) - AC_ARG_WITH([libdw-includes], [AS_HELP_STRING([--with-libdw-includes=ARG], [Find includes for libdw in ARG [default=system default]]) @@ -23,32 +26,28 @@ AC_DEFUN([FP_FIND_LIBDW], LIBDW_CFLAGS="-I$withval" ]) - AC_SUBST(LibdwIncludeDir) + AC_ARG_ENABLE(dwarf-unwind, + [AS_HELP_STRING([--enable-dwarf-unwind], + [Enable DWARF unwinding support in the runtime system via elfutils' libdw [default=no]])], + [], + [enable_dwarf_unwind=no]) UseLibdw=NO - USE_LIBDW=0 - AC_ARG_ENABLE(dwarf-unwind, - [AS_HELP_STRING([--enable-dwarf-unwind], - [Enable DWARF unwinding support in the runtime system via elfutils' libdw [default=no]])]) - if test "$enable_dwarf_unwind" = "yes" ; then + if test "$enable_dwarf_unwind" != "no" ; then CFLAGS2="$CFLAGS" CFLAGS="$LIBDW_CFLAGS $CFLAGS" LDFLAGS2="$LDFLAGS" LDFLAGS="$LIBDW_LDFLAGS $LDFLAGS" - AC_CHECK_LIB(dw, dwfl_attach_state, - [AC_CHECK_HEADERS([elfutils/libdw.h], [break], []) - UseLibdw=YES], - [AC_MSG_ERROR([Cannot find system libdw (required by --enable-dwarf-unwind)])]) + AC_CHECK_HEADER([elfutils/libdwfl.h], + [AC_CHECK_LIB(dw, dwfl_attach_state, + [UseLibdw=YES])]) + + if test "x:$enable_dwarf_unwind:$UseLibdw" = "x:yes:NO" ; then + AC_MSG_ERROR([Cannot find system libdw (required by --enable-dwarf-unwind)]) + fi CFLAGS="$CFLAGS2" LDFLAGS="$LDFLAGS2" fi - - AC_SUBST(UseLibdw) - if test $UseLibdw = "YES" ; then - USE_LIBDW=1 - fi - AC_DEFINE_UNQUOTED([USE_LIBDW], [$USE_LIBDW], [Set to 1 to use libdw]) ]) - diff --git a/m4/fp_find_libnuma.m4 b/m4/fp_find_libnuma.m4 index 4f55453f8e32..83930954f475 100644 --- a/m4/fp_find_libnuma.m4 +++ b/m4/fp_find_libnuma.m4 @@ -1,7 +1,13 @@ +# FP_FIND_LIBNUMA +# -------------------------------------------------------------- +# Should we used libnuma? (yes, no, or auto.) +# +# Sets variables: +# - UseLibNuma: [YES|NO] +# - LibNumaLibDir: optional path +# - LibNumaIncludeDir: optional path AC_DEFUN([FP_FIND_LIBNUMA], [ - dnl ** Have libnuma? - dnl -------------------------------------------------------------- AC_ARG_WITH([libnuma-libraries], [AS_HELP_STRING([--with-libnuma-libraries=ARG], [Find libraries for libnuma in ARG [default=system default]]) @@ -11,8 +17,6 @@ AC_DEFUN([FP_FIND_LIBNUMA], LIBNUMA_LDFLAGS="-L$withval" ]) - AC_SUBST(LibNumaLibDir) - AC_ARG_WITH([libnuma-includes], [AS_HELP_STRING([--with-libnuma-includes=ARG], [Find includes for libnuma in ARG [default=system default]]) @@ -22,14 +26,14 @@ AC_DEFUN([FP_FIND_LIBNUMA], LIBNUMA_CFLAGS="-I$withval" ]) - AC_SUBST(LibNumaIncludeDir) - - HaveLibNuma=0 AC_ARG_ENABLE(numa, - [AS_HELP_STRING([--enable-numa], - [Enable NUMA memory policy and thread affinity support in the - runtime system via numactl's libnuma [default=auto]])]) + [AS_HELP_STRING([--enable-numa], + [Enable NUMA memory policy and thread affinity support in the + runtime system via numactl's libnuma [default=auto]])], + [], + [enable_numa=auto]) + UseLibNuma=NO if test "$enable_numa" != "no" ; then CFLAGS2="$CFLAGS" CFLAGS="$LIBNUMA_CFLAGS $CFLAGS" @@ -38,23 +42,14 @@ AC_DEFUN([FP_FIND_LIBNUMA], AC_CHECK_HEADERS([numa.h numaif.h]) - if test "$ac_cv_header_numa_h$ac_cv_header_numaif_h" = "yesyes" ; then - AC_CHECK_LIB(numa, numa_available,HaveLibNuma=1) + if test "$ac_cv_header_numa_h:$ac_cv_header_numaif_h" = "yes:yes" ; then + AC_CHECK_LIB([numa], [numa_available], [UseLibNuma=YES]) fi - if test "$enable_numa:$HaveLibNuma" = "yes:0" ; then - AC_MSG_ERROR([Cannot find system libnuma (required by --enable-numa)]) + if test "$enable_numa:$UseLibNuma" = "yes:NO" ; then + AC_MSG_ERROR([Cannot find system libnuma (required by --enable-numa)]) fi CFLAGS="$CFLAGS2" LDFLAGS="$LDFLAGS2" fi - - AC_DEFINE_UNQUOTED([HAVE_LIBNUMA], [$HaveLibNuma], [Define to 1 if you have libnuma]) - if test $HaveLibNuma = "1" ; then - AC_SUBST([UseLibNuma],[YES]) - AC_SUBST([CabalHaveLibNuma],[True]) - else - AC_SUBST([UseLibNuma],[NO]) - AC_SUBST([CabalHaveLibNuma],[False]) - fi ]) diff --git a/rts/configure.ac b/rts/configure.ac index 3284a1d5d9c8..a4c0dc2a234b 100644 --- a/rts/configure.ac +++ b/rts/configure.ac @@ -33,6 +33,20 @@ GHC_CONVERT_PLATFORM_PARTS([host], [Host]) FPTOOLS_SET_PLATFORM_VARS([host], [Host]) FPTOOLS_SET_HASKELL_PLATFORM_VARS([Host]) +dnl ** Other RTS features +dnl -------------------------------------------------------------- +AC_DEFINE_UNQUOTED([USE_LIBDW], [$CABAL_FLAG_libdw], [Set to 1 to use libdw]) + +AC_DEFINE_UNQUOTED([HAVE_LIBNUMA], [$CABAL_FLAG_libnuma], [Define to 1 if you have libnuma]) +dnl We should have these headers if the flag is set, but check anyways +dnl in order to define `HAVE_*` macros. +AS_IF( + [test "$CABAL_FLAG_libnuma" = 1], + [AC_CHECK_HEADERS([numa.h numaif.h])]) + +dnl ** Write config files +dnl -------------------------------------------------------------- + AC_OUTPUT dnl ###################################################################### -- GitLab