diff options
Diffstat (limited to 'hwloc-1.2.1/config/hwloc.m4')
-rw-r--r-- | hwloc-1.2.1/config/hwloc.m4 | 707 |
1 files changed, 707 insertions, 0 deletions
diff --git a/hwloc-1.2.1/config/hwloc.m4 b/hwloc-1.2.1/config/hwloc.m4 new file mode 100644 index 00000000..680eb7b3 --- /dev/null +++ b/hwloc-1.2.1/config/hwloc.m4 @@ -0,0 +1,707 @@ +dnl -*- Autoconf -*- +dnl +dnl Copyright (c) 2009-2010 INRIA. All rights reserved. +dnl Copyright (c) 2009-2011 Université Bordeaux 1 +dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana +dnl University Research and Technology +dnl Corporation. All rights reserved. +dnl Copyright (c) 2004-2005 The Regents of the University of California. +dnl All rights reserved. +dnl Copyright (c) 2004-2008 High Performance Computing Center Stuttgart, +dnl University of Stuttgart. All rights reserved. +dnl Copyright © 2006-2011 Cisco Systems, Inc. All rights reserved. +dnl See COPYING in top-level directory. + +# Main hwloc m4 macro, to be invoked by the user +# +# Expects two or three paramters: +# 1. Configuration prefix +# 2. What to do upon success +# 3. What to do upon failure +# 4. If non-empty, print the announcement banner +# +AC_DEFUN([HWLOC_SETUP_CORE],[ + AC_REQUIRE([AC_CANONICAL_TARGET]) + AC_REQUIRE([AC_PROG_CC]) + + AS_IF([test "x$4" != "x"], + [cat <<EOF + +### +### Configuring hwloc core +### +EOF]) + + # If no prefix was defined, set a good value + m4_ifval([$1], + [m4_define([hwloc_config_prefix],[$1/])], + [m4_define([hwloc_config_prefix], [])]) + + # Unless previously set to "standalone" mode, default to embedded + # mode + AS_IF([test "$hwloc_mode" = ""], [hwloc_mode=embedded]) + AC_MSG_CHECKING([hwloc building mode]) + AC_MSG_RESULT([$hwloc_mode]) + + # Get hwloc's absolute top builddir (which may not be the same as + # the real $top_builddir, because we may be building in embedded + # mode). + HWLOC_startdir=`pwd` + if test x"hwloc_config_prefix" != "x" -a ! -d "hwloc_config_prefix"; then + mkdir -p "hwloc_config_prefix" + fi + if test x"hwloc_config_prefix" != "x"; then + cd "hwloc_config_prefix" + fi + HWLOC_top_builddir=`pwd` + AC_SUBST(HWLOC_top_builddir) + + # Get hwloc's absolute top srcdir (which may not be the same as + # the real $top_srcdir, because we may be building in embedded + # mode). First, go back to the startdir incase the $srcdir is + # relative. + + cd "$HWLOC_startdir" + cd "$srcdir"/hwloc_config_prefix + HWLOC_top_srcdir="`pwd`" + AC_SUBST(HWLOC_top_srcdir) + + # Go back to where we started + cd "$HWLOC_startdir" + + AC_MSG_NOTICE([hwloc builddir: $HWLOC_top_builddir]) + AC_MSG_NOTICE([hwloc srcdir: $HWLOC_top_srcdir]) + if test "$HWLOC_top_builddir" != "$HWLOC_top_srcdir"; then + AC_MSG_NOTICE([Detected VPATH build]) + fi + + # Debug mode? + AC_MSG_CHECKING([if want hwloc maintainer support]) + hwloc_debug= + + # Unconditionally disable debug mode in embedded mode; if someone + # asks, we can add a configure-time option for it. Disable it + # now, however, because --enable-debug is not even added as an + # option when configuring in embedded mode, and we wouldn't want + # to hijack the enclosing application's --enable-debug configure + # switch. + AS_IF([test "$hwloc_mode" = "embedded"], + [hwloc_debug=0 + hwloc_debug_msg="disabled (embedded mode)"]) + AS_IF([test "$hwloc_debug" = "" -a "$enable_debug" = "yes"], + [hwloc_debug=1 + hwloc_debug_msg="enabled"]) + AS_IF([test "$hwloc_debug" = ""], + [hwloc_debug=0 + hwloc_debug_msg="disabled"]) + # Grr; we use #ifndef for HWLOC_DEBUG! :-( + AH_TEMPLATE(HWLOC_DEBUG, [Whether we are in debugging mode or not]) + AS_IF([test "$hwloc_debug" = "1"], [AC_DEFINE([HWLOC_DEBUG])]) + AC_MSG_RESULT([$hwloc_debug_msg]) + + # We need to set a path for header, etc files depending on whether + # we're standalone or embedded. this is taken care of by HWLOC_EMBEDDED. + + AC_MSG_CHECKING([for hwloc directory prefix]) + AC_MSG_RESULT(m4_ifval([$1], hwloc_config_prefix, [(none)])) + + # Note that private/config.h *MUST* be listed first so that it + # becomes the "main" config header file. Any AC-CONFIG-HEADERS + # after that (hwloc/config.h) will only have selective #defines + # replaced, not the entire file. + AC_CONFIG_HEADERS(hwloc_config_prefix[include/private/autogen/config.h]) + AC_CONFIG_HEADERS(hwloc_config_prefix[include/hwloc/autogen/config.h]) + + # What prefix are we using? + AC_MSG_CHECKING([for hwloc symbol prefix]) + AS_IF([test "$hwloc_symbol_prefix_value" = ""], + [AS_IF([test "$with_hwloc_symbol_prefix" = ""], + [hwloc_symbol_prefix_value=hwloc_], + [hwloc_symbol_prefix_value=$with_hwloc_symbol_prefix])]) + AC_DEFINE_UNQUOTED(HWLOC_SYM_PREFIX, [$hwloc_symbol_prefix_value], + [The hwloc symbol prefix]) + # Ensure to [] escape the whole next line so that we can get the + # proper tr tokens + [hwloc_symbol_prefix_value_caps="`echo $hwloc_symbol_prefix_value | tr '[:lower:]' '[:upper:]'`"] + AC_DEFINE_UNQUOTED(HWLOC_SYM_PREFIX_CAPS, [$hwloc_symbol_prefix_value_caps], + [The hwloc symbol prefix in all caps]) + AC_MSG_RESULT([$hwloc_symbol_prefix_value]) + + # Give an easy #define to know if we need to transform all the + # hwloc names + AH_TEMPLATE([HWLOC_SYM_TRANSFORM], [Whether we need to re-define all the hwloc public symbols or not]) + AS_IF([test "$hwloc_symbol_prefix_value" = "hwloc_"], + [AC_DEFINE([HWLOC_SYM_TRANSFORM], [0])], + [AC_DEFINE([HWLOC_SYM_TRANSFORM], [1])]) + + # GCC specifics. + if test "x$GCC" = "xyes"; then + HWLOC_GCC_CFLAGS="-Wall -Wmissing-prototypes -Wundef" + HWLOC_GCC_CFLAGS="$HWLOC_GCC_CFLAGS -Wpointer-arith -Wcast-align" + fi + + # Enample system extensions for O_DIRECTORY, fdopen, fssl, etc. + AC_USE_SYSTEM_EXTENSIONS + AH_VERBATIM([USE_HPUX_SYSTEM_EXTENSIONS], +[/* Enable extensions on HP-UX. */ +#ifndef _HPUX_SOURCE +# undef _HPUX_SOURCE +#endif +]) + AC_DEFINE([_HPUX_SOURCE], [1], [Are we building for HP-UX?]) + + AC_LANG_PUSH([C]) + + # Check to see if we're producing a 32 or 64 bit executable by + # checking the sizeof void*. Note that AC CHECK_SIZEOF even works + # when cross compiling (!), according to the AC 2.64 docs. This + # check is needed because on some systems, you can instruct the + # compiler to specifically build 32 or 64 bit executables -- even + # though the $target may indicate something different. + AC_CHECK_SIZEOF([void *]) + + # + # Check OS support + # + AC_MSG_CHECKING([which OS support to include]) + case ${target} in + *-*-linux*) + AC_DEFINE(HWLOC_LINUX_SYS, 1, [Define to 1 on Linux]) + hwloc_linux=yes + AC_MSG_RESULT([Linux]) + ;; + *-*-irix*) + AC_DEFINE(HWLOC_IRIX_SYS, 1, [Define to 1 on Irix]) + hwloc_irix=yes + AC_MSG_RESULT([IRIX]) + ;; + *-*-darwin*) + AC_DEFINE(HWLOC_DARWIN_SYS, 1, [Define to 1 on Darwin]) + hwloc_darwin=yes + AC_MSG_RESULT([Darwin]) + ;; + *-*-solaris*) + AC_DEFINE(HWLOC_SOLARIS_SYS, 1, [Define to 1 on Solaris]) + hwloc_solaris=yes + AC_MSG_RESULT([Solaris]) + ;; + *-*-aix*) + AC_DEFINE(HWLOC_AIX_SYS, 1, [Define to 1 on AIX]) + hwloc_aix=yes + AC_MSG_RESULT([AIX]) + ;; + *-*-osf*) + AC_DEFINE(HWLOC_OSF_SYS, 1, [Define to 1 on OSF]) + hwloc_osf=yes + AC_MSG_RESULT([OSF]) + ;; + *-*-hpux*) + AC_DEFINE(HWLOC_HPUX_SYS, 1, [Define to 1 on HP-UX]) + hwloc_hpux=yes + AC_MSG_RESULT([HP-UX]) + ;; + *-*-mingw*|*-*-cygwin*) + AC_DEFINE(HWLOC_WIN_SYS, 1, [Define to 1 on WINDOWS]) + hwloc_windows=yes + AC_MSG_RESULT([Windows]) + ;; + *-*-*freebsd*) + AC_DEFINE(HWLOC_FREEBSD_SYS, 1, [Define to 1 on *FREEBSD]) + hwloc_freebsd=yes + AC_MSG_RESULT([FreeBSD]) + ;; + *) + AC_MSG_RESULT([Unsupported! ($target)]) + AC_DEFINE(HWLOC_UNSUPPORTED_SYS, 1, [Define to 1 on unsupported systems]) + AC_MSG_WARN([***********************************************************]) + AC_MSG_WARN([*** hwloc does not support this system.]) + AC_MSG_WARN([*** hwloc will *attempt* to build (but it may not work).]) + AC_MSG_WARN([*** hwloc run-time results may be reduced to showing just one processor.]) + AC_MSG_WARN([*** You have been warned.]) + AC_MSG_WARN([*** Pausing to give you time to read this message...]) + AC_MSG_WARN([***********************************************************]) + sleep 10 + ;; + esac + + # + # Check CPU support + # + AC_MSG_CHECKING([which CPU support to include]) + case ${target} in + i*86-*-*|x86_64-*-*) + case ${ac_cv_sizeof_void_p} in + 4) + AC_DEFINE(HWLOC_X86_32_ARCH, 1, [Define to 1 on x86_32]) + hwloc_x86_32=yes + AC_MSG_RESULT([x86_32]) + ;; + 8) + AC_DEFINE(HWLOC_X86_64_ARCH, 1, [Define to 1 on x86_64]) + hwloc_x86_64=yes + AC_MSG_RESULT([x86_64]) + ;; + *) + AC_DEFINE(HWLOC_X86_64_ARCH, 1, [Define to 1 on x86_64]) + hwloc_x86_64=yes + AC_MSG_RESULT([unknown -- assuming x86_64]) + ;; + esac + esac + + AC_CHECK_SIZEOF([unsigned long]) + AC_DEFINE_UNQUOTED([HWLOC_SIZEOF_UNSIGNED_LONG], $ac_cv_sizeof_unsigned_long, [The size of `unsigned long', as computed by sizeof]) + AC_CHECK_SIZEOF([unsigned int]) + AC_DEFINE_UNQUOTED([HWLOC_SIZEOF_UNSIGNED_INT], $ac_cv_sizeof_unsigned_int, [The size of `unsigned int', as computed by sizeof]) + + # + # Check for compiler attributes and visibility + # + _HWLOC_CHECK_ATTRIBUTES + _HWLOC_CHECK_VISIBILITY + HWLOC_CFLAGS="$HWLOC_FLAGS $HWLOC_VISIBILITY_CFLAGS" + AS_IF([test "$HWLOC_VISIBILITY_CFLAGS" != ""], + [AC_MSG_WARN(["$HWLOC_VISIBILITY_CFLAGS" has been added to the hwloc CFLAGS])]) + + # + # Check for inline compatibility support + # + AC_MSG_CHECKING([for inline compatibility keyword]) + AC_TRY_COMPILE([static void __inline__ f(void) { }], [], + [__hwloc_inline=__inline__], + [AC_TRY_COMPILE([static void __inline f(void) {}], [], + [__hwloc_inline=__inline], + [__hwloc_inline=] + )] + ) + AC_MSG_RESULT([$__hwloc_inline]) + AC_DEFINE_UNQUOTED(__hwloc_inline, $__hwloc_inline, [Define this to a keyword that can safely replace inline in installed headers]) + + # + # Now detect support + # + + hwloc_strncasecmp=strncmp + AC_CHECK_FUNCS([strncasecmp], [ + _HWLOC_CHECK_DECL([strncasecmp], [ + hwloc_strncasecmp=strncasecmp + ]) + ]) + AC_DEFINE_UNQUOTED(hwloc_strncasecmp, $hwloc_strncasecmp, [Define this to either strncasecmp or strncmp]) + + AC_CHECK_FUNCS([strftime]) + AC_CHECK_FUNCS([setlocale]) + + AC_CHECK_HEADER([stdint.h], [ + AC_DEFINE([HWLOC_HAVE_STDINT_H], [1], [Define to 1 if you have the <stdint.h> header file.]) + ]) + AC_CHECK_HEADERS([sys/mman.h]) + + AC_CHECK_TYPES([KAFFINITY, + PROCESSOR_CACHE_TYPE, + CACHE_DESCRIPTOR, + LOGICAL_PROCESSOR_RELATIONSHIP, + RelationProcessorPackage, + SYSTEM_LOGICAL_PROCESSOR_INFORMATION, + GROUP_AFFINITY, + PROCESSOR_RELATIONSHIP, + NUMA_NODE_RELATIONSHIP, + CACHE_RELATIONSHIP, + PROCESSOR_GROUP_INFO, + GROUP_RELATIONSHIP, + SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, + PSAPI_WORKING_SET_EX_BLOCK, + PSAPI_WORKING_SET_EX_INFORMATION], + [],[],[[#include <windows.h>]]) + AC_CHECK_LIB([gdi32], [main], + [HWLOC_LIBS="-lgdi32 $HWLOC_LIBS" + AC_DEFINE([HAVE_LIBGDI32], 1, [Define to 1 if we have -lgdi32])]) + + AC_CHECK_HEADER([windows.h], [ + AC_DEFINE([HWLOC_HAVE_WINDOWS_H], [1], [Define to 1 if you have the `windows.h' header.]) + ]) + + AC_CHECK_HEADERS([sys/lgrp_user.h], [ + AC_CHECK_LIB([lgrp], [lgrp_latency_cookie], + [HWLOC_LIBS="-llgrp $HWLOC_LIBS" + AC_DEFINE([HAVE_LIBLGRP], 1, [Define to 1 if we have -llgrp])]) + ]) + AC_CHECK_HEADERS([kstat.h], [ + AC_CHECK_LIB([kstat], [main], + [HWLOC_LIBS="-lkstat $HWLOC_LIBS" + AC_DEFINE([HAVE_LIBKSTAT], 1, [Define to 1 if we have -lkstat])]) + ]) + + AC_CHECK_DECLS([_SC_NPROCESSORS_ONLN, + _SC_NPROCESSORS_CONF, + _SC_NPROC_ONLN, + _SC_NPROC_CONF, + _SC_LARGE_PAGESIZE],,[:],[[#include <unistd.h>]]) + + AC_HAVE_HEADERS([mach/mach_host.h]) + AC_HAVE_HEADERS([mach/mach_init.h], [ + AC_CHECK_FUNCS([host_info]) + ]) + + AC_CHECK_HEADERS([sys/param.h]) + AC_CHECK_HEADERS([sys/sysctl.h], [ + AC_CHECK_DECLS([CTL_HW, HW_NCPU],,,[[ + #if HAVE_SYS_PARAM_H + #include <sys/param.h> + #endif + #include <sys/sysctl.h> + ]]) + ],,[ + AC_INCLUDES_DEFAULT + #if HAVE_SYS_PARAM_H + #include <sys/param.h> + #endif + ]) + AC_CHECK_FUNCS([sysctl sysctlbyname]) + + case ${target} in + *-*-mingw*|*-*-cygwin*) + hwloc_pid_t=HANDLE + hwloc_thread_t=HANDLE + ;; + *) + hwloc_pid_t=pid_t + AC_CHECK_TYPES([pthread_t], [hwloc_thread_t=pthread_t], [:], [[#include <pthread.h>]]) + ;; + esac + AC_DEFINE_UNQUOTED(hwloc_pid_t, $hwloc_pid_t, [Define this to the process ID type]) + if test "x$hwloc_thread_t" != "x" ; then + AC_DEFINE_UNQUOTED(hwloc_thread_t, $hwloc_thread_t, [Define this to the thread ID type]) + fi + + _HWLOC_CHECK_DECL([sched_setaffinity], [ + AC_MSG_CHECKING([for old prototype of sched_setaffinity]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + #define _GNU_SOURCE + #include <sched.h> + static unsigned long mask; + ]], [[ sched_setaffinity(0, (void*) &mask); ]])], + [AC_DEFINE([HWLOC_HAVE_OLD_SCHED_SETAFFINITY], [1], [Define to 1 if glibc provides the old prototype of sched_setaffinity()]) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) + ], , [[ +#define _GNU_SOURCE +#include <sched.h> +]]) + + AC_MSG_CHECKING([for working CPU_SET]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + #include <sched.h> + cpu_set_t set; + ]], [[ CPU_ZERO(&set); CPU_SET(0, &set);]])], + [AC_DEFINE([HWLOC_HAVE_CPU_SET], [1], [Define to 1 if the CPU_SET macro works]) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) + + AC_MSG_CHECKING([for working CPU_SET_S]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + #include <sched.h> + cpu_set_t *set; + ]], [[ + set = CPU_ALLOC(1024); + CPU_ZERO_S(CPU_ALLOC_SIZE(1024), set); + CPU_SET_S(CPU_ALLOC_SIZE(1024), 0, set); + CPU_FREE(set); + ]])], + [AC_DEFINE([HWLOC_HAVE_CPU_SET_S], [1], [Define to 1 if the CPU_SET_S macro works]) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) + + AC_MSG_CHECKING([for working _syscall3]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + #include <linux/unistd.h> + #include <errno.h> + #define __NR_hwloc_test 123 + _syscall3(int, hwloc_test, int, param1, int, param2, int, param3); + ]], [[ hwloc_test(1, 2, 3); ]])], + [AC_DEFINE([HWLOC_HAVE__SYSCALL3], [1], [Define to 1 if the _syscall3 macro works]) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) + + # Check for kerrighed, but don't abort if not found. It's illegal + # to pass in an empty 3rd argument, but we trust the output of + # pkg-config, so just give it a value that will always work: + # printf. + HWLOC_PKG_CHECK_MODULES([KERRIGHED], [kerrighed >= 2.0], [printf], [], [:]) + + AC_PATH_PROGS([HWLOC_MS_LIB], [lib]) + AC_ARG_VAR([HWLOC_MS_LIB], [Path to Microsoft's Visual Studio `lib' tool]) + + AC_PATH_PROG([BASH], [bash]) + + AC_CHECK_FUNCS([ffs], [ + _HWLOC_CHECK_DECL([ffs],[ + AC_DEFINE([HWLOC_HAVE_DECL_FFS], [1], [Define to 1 if function `ffs' is declared by system headers]) + ]) + AC_DEFINE([HWLOC_HAVE_FFS], [1], [Define to 1 if you have the `ffs' function.]) + ]) + AC_CHECK_FUNCS([ffsl], [ + _HWLOC_CHECK_DECL([ffsl],[ + AC_DEFINE([HWLOC_HAVE_DECL_FFSL], [1], [Define to 1 if function `ffsl' is declared by system headers]) + ]) + AC_DEFINE([HWLOC_HAVE_FFSL], [1], [Define to 1 if you have the `ffsl' function.]) + ]) + + AC_CHECK_FUNCS([fls], [ + _HWLOC_CHECK_DECL([fls],[ + AC_DEFINE([HWLOC_HAVE_DECL_FLS], [1], [Define to 1 if function `fls' is declared by system headers]) + ]) + AC_DEFINE([HWLOC_HAVE_FLS], [1], [Define to 1 if you have the `fls' function.]) + ]) + AC_CHECK_FUNCS([flsl], [ + _HWLOC_CHECK_DECL([flsl],[ + AC_DEFINE([HWLOC_HAVE_DECL_FLSL], [1], [Define to 1 if function `flsl' is declared by system headers]) + ]) + AC_DEFINE([HWLOC_HAVE_FLSL], [1], [Define to 1 if you have the `flsl' function.]) + ]) + + AC_CHECK_FUNCS([clz], [ + _HWLOC_CHECK_DECL([clz],[ + AC_DEFINE([HWLOC_HAVE_DECL_CLZ], [1], [Define to 1 if function `clz' is declared by system headers]) + ]) + AC_DEFINE([HWLOC_HAVE_CLZ], [1], [Define to 1 if you have the `clz' function.]) + ]) + AC_CHECK_FUNCS([clzl], [ + _HWLOC_CHECK_DECL([clzl],[ + AC_DEFINE([HWLOC_HAVE_DECL_CLZL], [1], [Define to 1 if function `clzl' is declared by system headers]) + ]) + AC_DEFINE([HWLOC_HAVE_CLZL], [1], [Define to 1 if you have the `clzl' function.]) + ]) + + AC_CHECK_FUNCS([openat], [hwloc_have_openat=yes]) + + AC_CHECK_HEADERS([malloc.h]) + AC_CHECK_FUNCS([getpagesize memalign posix_memalign]) + + AC_CHECK_HEADERS([sys/utsname.h]) + AC_CHECK_FUNCS([uname]) + + # set_mempolicy and mbind support + AC_CHECK_HEADERS([numaif.h], [ + AC_CHECK_LIB([numa], [set_mempolicy], [ + enable_set_mempolicy=yes + AC_SUBST([HWLOC_LINUX_LIBNUMA_LIBS], ["-lnuma"]) + AC_DEFINE([HWLOC_HAVE_SET_MEMPOLICY], [1], [Define to 1 if set_mempolicy is available.]) + ]) + AC_CHECK_LIB([numa], [mbind], [ + enable_mbind=yes + AC_SUBST([HWLOC_LINUX_LIBNUMA_LIBS], ["-lnuma"]) + AC_DEFINE([HWLOC_HAVE_MBIND], [1], [Define to 1 if mbind is available.]) + ]) + AC_CHECK_LIB([numa], [migrate_pages], [ + enable_migrate_pages=yes + AC_SUBST([HWLOC_LINUX_LIBNUMA_LIBS], ["-lnuma"]) + AC_DEFINE([HWLOC_HAVE_MIGRATE_PAGES], [1], [Define to 1 if migrate_pages is available.]) + ]) + ]) + + AC_CHECK_HEADERS([pthread_np.h]) + AC_CHECK_DECLS([pthread_setaffinity_np],,[:],[[ + #include <pthread.h> + #ifdef HAVE_PTHREAD_NP_H + # include <pthread_np.h> + #endif + ]]) + AC_CHECK_DECLS([pthread_getaffinity_np],,[:],[[ + #include <pthread.h> + #ifdef HAVE_PTHREAD_NP_H + # include <pthread_np.h> + #endif + ]]) + AC_CHECK_FUNC([sched_setaffinity], [hwloc_have_sched_setaffinity=yes]) + AC_CHECK_HEADERS([sys/cpuset.h],,,[[#include <sys/param.h>]]) + AC_SEARCH_LIBS([pthread_getthrds_np], [pthread], + AC_DEFINE([HWLOC_HAVE_PTHREAD_GETTHRDS_NP], 1, `Define to 1 if you have pthread_getthrds_np') + ) + + # XML support + hwloc_xml_happy= + if test "x$enable_xml" != "xno"; then + HWLOC_PKG_CHECK_MODULES([XML], [libxml-2.0], [xmlNewDoc], + [hwloc_xml_happy=yes], + [hwloc_xml_happy=no]) + fi + if test "x$hwloc_xml_happy" = "xyes"; then + HWLOC_REQUIRES="libxml-2.0 $HWLOC_REQUIRES" + AC_DEFINE([HWLOC_HAVE_XML], [1], [Define to 1 if you have the `xml' library.]) + AC_SUBST([HWLOC_HAVE_XML], [1]) + else + AC_SUBST([HWLOC_HAVE_XML], [0]) + AS_IF([test "$enable_xml" = "yes"], + [AC_MSG_WARN([--enable-xml requested, but XML support was not found]) + AC_MSG_ERROR([Cannot continue])]) + fi + HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_XML_CFLAGS" + + # Setup HWLOC's C, CPP, and LD flags, and LIBS + AC_SUBST(HWLOC_REQUIRES) + AC_SUBST(HWLOC_CFLAGS) + HWLOC_CPPFLAGS='-I$(HWLOC_top_srcdir)/include -I$(HWLOC_top_builddir)/include' + AC_SUBST(HWLOC_CPPFLAGS) + HWLOC_LDFLAGS='-L$(HWLOC_top_builddir)/src' + AC_SUBST(HWLOC_LDFLAGS) + AC_SUBST(HWLOC_LIBS) + + # Set these values explicitly for embedded builds. Exporting + # these values through *_EMBEDDED_* values gives us the freedom to + # do something different someday if we ever need to. + HWLOC_EMBEDDED_CFLAGS=$HWLOC_CFLAGS + AC_SUBST(HWLOC_EMBEDDED_CFLAGS) + HWLOC_EMBEDDED_CPPFLAGS=$HWLOC_CPPFLAGS + AC_SUBST(HWLOC_EMBEDDED_CPPFLAGS) + HWLOC_EMBEDDED_LDADD='$(HWLOC_top_builddir)/src/libhwloc_embedded.la' + AC_SUBST(HWLOC_EMBEDDED_LDADD) + HWLOC_EMBEDDED_LIBS=$HWLOC_LIBS + AC_SUBST(HWLOC_EMBEDDED_LIBS) + + # Try to compile the cpuid inlines + AC_MSG_CHECKING([for cpuid]) + old_CPPFLAGS="$CPPFLAGS" + CFLAGS="$CFLAGS -I$HWLOC_top_srcdir/include" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + #include <stdio.h> + #include <private/cpuid.h> + ]], [[ + if (hwloc_have_cpuid()) { + unsigned eax = 0, ebx, ecx = 0, edx; + hwloc_cpuid(&eax, &ebx, &ecx, &edx); + printf("highest cpuid %x\n", eax); + return 0; + } + ]])], + [AC_MSG_RESULT([yes]) + AC_DEFINE(HWLOC_HAVE_CPUID, 1, [Define to 1 if you have cpuid]) + hwloc_have_cpuid=yes], + [AC_MSG_RESULT([no])]) + CPPFLAGS="$old_CPPFLAGS" + + # Always generate these files + AC_CONFIG_FILES( + hwloc_config_prefix[Makefile] + hwloc_config_prefix[include/Makefile] + hwloc_config_prefix[src/Makefile ] + ) + + # Cleanup + AC_LANG_POP + + # Success + $2 +])dnl + +#----------------------------------------------------------------------- + +# Specify the symbol prefix +AC_DEFUN([HWLOC_SET_SYMBOL_PREFIX],[ + hwloc_symbol_prefix_value=$1 +])dnl + +#----------------------------------------------------------------------- + +# This must be a standalone routine so that it can be called both by +# HWLOC_INIT and an external caller (if HWLOC_INIT is not invoked). +AC_DEFUN([HWLOC_DO_AM_CONDITIONALS],[ + AS_IF([test "$hwloc_did_am_conditionals" != "yes"],[ + AM_CONDITIONAL([HWLOC_BUILD_STANDALONE], [test "$hwloc_mode" = "standalone"]) + + AM_CONDITIONAL([HWLOC_HAVE_GCC], [test "x$GCC" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_MS_LIB], [test "x$HWLOC_MS_LIB" != "x"]) + AM_CONDITIONAL([HWLOC_HAVE_OPENAT], [test "x$hwloc_have_openat" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_LINUX_LIBNUMA], + [test "x$hwloc_have_linux_libnuma" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_SCHED_SETAFFINITY], + [test "x$hwloc_have_sched_setaffinity" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_LIBIBVERBS], + [test "x$hwloc_have_libibverbs" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_CUDA], + [test "x$hwloc_have_cuda" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_MYRIEXPRESS], + [test "x$hwloc_have_myriexpress" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_CUDART], + [test "x$hwloc_have_cudart" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_CAIRO], [test "x$enable_cairo" != "xno"]) + AM_CONDITIONAL([HWLOC_HAVE_XML], [test "$hwloc_xml_happy" = "yes"]) + AM_CONDITIONAL([HWLOC_HAVE_SET_MEMPOLICY], [test "x$enable_set_mempolicy" != "xno"]) + AM_CONDITIONAL([HWLOC_HAVE_MBIND], [test "x$enable_mbind" != "xno"]) + AM_CONDITIONAL([HWLOC_HAVE_BUNZIPP], [test "x$BUNZIPP" != "xfalse"]) + + AM_CONDITIONAL([HWLOC_BUILD_DOXYGEN], + [test "x$hwloc_generate_doxs" = "xyes"]) + AM_CONDITIONAL([HWLOC_BUILD_README], + [test "x$hwloc_generate_readme" = "xyes" -a \( "x$hwloc_install_doxs" = "xyes" -o "x$hwloc_generate_doxs" = "xyes" \) ]) + AM_CONDITIONAL([HWLOC_INSTALL_DOXYGEN], + [test "x$hwloc_install_doxs" = "xyes"]) + + AM_CONDITIONAL([HWLOC_HAVE_LINUX], [test "x$hwloc_linux" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_IRIX], [test "x$hwloc_irix" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_DARWIN], [test "x$hwloc_darwin" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_FREEBSD], [test "x$hwloc_freebsd" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_SOLARIS], [test "x$hwloc_solaris" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_AIX], [test "x$hwloc_aix" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_OSF], [test "x$hwloc_osf" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_HPUX], [test "x$hwloc_hpux" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_WINDOWS], [test "x$hwloc_windows" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_MINGW32], [test "x$target_os" = "xmingw32"]) + + AM_CONDITIONAL([HWLOC_HAVE_X86_32], [test "x$hwloc_x86_32" = "xyes"]) + AM_CONDITIONAL([HWLOC_HAVE_X86_64], [test "x$hwloc_x86_64" = "xyes"]) + AM_CONDITIONAL([HWLOC_DOXYGEN_BROKEN_SHORT_NAMES], [test "$HWLOC_DOXYGEN_VERSION" = "1.6.2"]) + AM_CONDITIONAL([HWLOC_HAVE_CPUID], [test "x$hwloc_have_cpuid" = "xyes"]) + AM_CONDITIONAL([HWLOC_BUILD_UTILS], [test "$hwloc_build_utils" = "yes"]) + AM_CONDITIONAL([HWLOC_BUILD_TESTS], [test "$hwloc_build_tests" = "yes"]) + ]) + hwloc_did_am_conditionals=yes +])dnl + +#----------------------------------------------------------------------- + +AC_DEFUN([_HWLOC_CHECK_DIFF_U], [ + AC_MSG_CHECKING([whether diff accepts -u]) + if diff -u /dev/null /dev/null 2> /dev/null + then + HWLOC_DIFF_U="-u" + else + HWLOC_DIFF_U="" + fi + AC_SUBST([HWLOC_DIFF_U]) + AC_MSG_RESULT([$HWLOC_DIFF_U]) +]) + +#----------------------------------------------------------------------- + +dnl HWLOC_CHECK_DECL +dnl +dnl Check declaration of given function by trying to call it with an insane +dnl number of arguments (10). Success means the compiler couldn't really check. +AC_DEFUN([_HWLOC_CHECK_DECL], [ + AC_MSG_CHECKING([whether function $1 is declared]) + AC_REQUIRE([AC_PROG_CC]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT([$4])],[$1(1,2,3,4,5,6,7,8,9,10);])], + [AC_MSG_RESULT([no]) + $3], + [AC_MSG_RESULT([yes]) + $2] + ) +]) + +#----------------------------------------------------------------------- + +dnl HWLOC_CHECK_DECLS +dnl +dnl Same as HWLOCK_CHECK_DECL, but defines HAVE_DECL_foo to 1 or 0 depending on +dnl the result. +AC_DEFUN([_HWLOC_CHECK_DECLS], [ + HWLOC_CHECK_DECL([$1], [ac_have_decl=1], [ac_have_decl=0], [$4]) + AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_DECL_$1]), [$ac_have_decl], + [Define to 1 if you have the declaration of `$1', and to 0 if you don't]) +]) + |