From 5460a1f25d9ddecb5c70667267d66d51af177a99 Mon Sep 17 00:00:00 2001 From: Shih-wei Liao Date: Fri, 16 Mar 2012 22:41:16 -0700 Subject: Linkloader improvement: mclinker. Change-Id: I8805e39ccbc2ee204234fb3e71c70c906f3990bb --- m4/gtest.m4 | 74 +++++++++++++++++++++++++++++ m4/llvm-target.m4 | 65 +++++++++++++++++++++++++ m4/llvm.m4 | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 279 insertions(+) create mode 100644 m4/gtest.m4 create mode 100644 m4/llvm-target.m4 create mode 100644 m4/llvm.m4 (limited to 'm4') diff --git a/m4/gtest.m4 b/m4/gtest.m4 new file mode 100644 index 0000000..6598ba7 --- /dev/null +++ b/m4/gtest.m4 @@ -0,0 +1,74 @@ +dnl GTEST_LIB_CHECK([minimum version [, +dnl action if found [,action if not found]]]) +dnl +dnl Check for the presence of the Google Test library, optionally at a minimum +dnl version, and indicate a viable version with the HAVE_GTEST flag. It defines +dnl standard variables for substitution including GTEST_CPPFLAGS, +dnl GTEST_CXXFLAGS, GTEST_LDFLAGS, and GTEST_LIBS. It also defines +dnl GTEST_VERSION as the version of Google Test found. Finally, it provides +dnl optional custom action slots in the event GTEST is found or not. +AC_DEFUN([GTEST_LIB_CHECK], +[ +dnl Provide a flag to enable or disable Google Test usage. +AC_ARG_ENABLE([gtest], + [AS_HELP_STRING([--enable-gtest], + [Enable tests using the Google C++ Testing Framework. + (Default is enabled.)])], + [], + [enable_gtest=]) +AC_ARG_VAR([GTEST_CONFIG], + [The exact path of Google Test's 'gtest-config' script.]) +AC_ARG_VAR([GTEST_CPPFLAGS], + [C-like preprocessor flags for Google Test.]) +AC_ARG_VAR([GTEST_CXXFLAGS], + [C++ compile flags for Google Test.]) +AC_ARG_VAR([GTEST_LDFLAGS], + [Linker path and option flags for Google Test.]) +AC_ARG_VAR([GTEST_LIBS], + [Library linking flags for Google Test.]) +AC_ARG_VAR([GTEST_VERSION], + [The version of Google Test available.]) +HAVE_GTEST="no" +AS_IF([test "x${enable_gtest}" != "xno"], + [AC_MSG_CHECKING([for 'gtest-config']) + AS_IF([test "x${enable_gtest}" != "xyes"], + [AS_IF([test -x "${enable_gtest}/scripts/gtest-config"], + [GTEST_CONFIG="${enable_gtest}/scripts/gtest-config"], + [GTEST_CONFIG="${enable_gtest}/bin/gtest-config"]) + AS_IF([test -x "${GTEST_CONFIG}"], [], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([dnl +Unable to locate either a built or installed Google Test. +The specific location '${enable_gtest}' was provided for a built or installed +Google Test, but no 'gtest-config' script could be found at this location.]) + ])], + [AC_PATH_PROG([GTEST_CONFIG], [gtest-config])]) + AS_IF([test -x "${GTEST_CONFIG}"], + [AC_MSG_RESULT([${GTEST_CONFIG}]) + m4_ifval([$1], + [_gtest_min_version="--min-version=$1" + AC_MSG_CHECKING([for Google Test at least version >= $1])], + [_gtest_min_version="--min-version=0" + AC_MSG_CHECKING([for Google Test])]) + AS_IF([${GTEST_CONFIG} ${_gtest_min_version}], + [AC_MSG_RESULT([yes]) + HAVE_GTEST='yes'], + [AC_MSG_RESULT([no])])], + [AC_MSG_RESULT([no])]) + AS_IF([test "x${HAVE_GTEST}" = "xyes"], + [GTEST_CPPFLAGS=`${GTEST_CONFIG} --cppflags` + GTEST_CXXFLAGS=`${GTEST_CONFIG} --cxxflags` + GTEST_LDFLAGS=`${GTEST_CONFIG} --ldflags` + GTEST_LIBS=`${GTEST_CONFIG} --libs` + GTEST_VERSION=`${GTEST_CONFIG} --version` + AC_DEFINE([HAVE_GTEST],[1],[Defined when Google Test is available.])], + [AS_IF([test "x${enable_gtest}" = "xyes"], + [AC_MSG_ERROR([dnl +Google Test was enabled, but no viable version could be found.]) + ])])]) +AC_SUBST([HAVE_GTEST]) +AM_CONDITIONAL([HAVE_GTEST],[test "x$HAVE_GTEST" = "xyes"]) +AS_IF([test "x$HAVE_GTEST" = "xyes"], + [m4_ifval([$2], [$2])], + [m4_ifval([$3], [$3])]) +]) diff --git a/m4/llvm-target.m4 b/m4/llvm-target.m4 new file mode 100644 index 0000000..0dbcd51 --- /dev/null +++ b/m4/llvm-target.m4 @@ -0,0 +1,65 @@ +dnl +dnl @synopsis ENUM_LLVM_TARGETS +dnl +dnl @summary enumlate LLVM Targets, set up variables: +dnl LLVM_ENUM_TARGETS +dnl LLVM_ENUM_LINKERS +dnl +dnl Luba Tang + +AC_DEFUN([ENUM_LLVM_TARGETS], +[dnl + dnl from ${LLVM}/autoconf/configure.ac + dnl Allow specific targets to be specified for building (or not) + TARGETS_TO_BUILD=""; + + AC_ARG_ENABLE([targets], + [AS_HELP_STRING([--enable-targets], + [Build specific host targets: all or target1,target2,... Valid targets are: + host, x86, x86_64, sparc, powerpc, alpha, arm, mips, spu, + xcore, msp430, systemz, blackfin, ptx, cbe, and cpp (default=all)])], + [], + [enableval=all]) + + case "$enableval" in + all) TARGETS_TO_BUILD="X86 Sparc PowerPC Alpha ARM Mips CellSPU XCore MSP430 SystemZ Blackfin CBackend CppBackend MBlaze PTX" ;; + *)for a_target in `echo $enableval|sed -e 's/,/ /g' ` ; do + case "$a_target" in + x86) TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;; + x86_64) TARGETS_TO_BUILD="X86 $TARGETS_TO_BUILD" ;; + sparc) TARGETS_TO_BUILD="Sparc $TARGETS_TO_BUILD" ;; + powerpc) TARGETS_TO_BUILD="PowerPC $TARGETS_TO_BUILD" ;; + alpha) TARGETS_TO_BUILD="Alpha $TARGETS_TO_BUILD" ;; + arm) TARGETS_TO_BUILD="ARM $TARGETS_TO_BUILD" ;; + mips) TARGETS_TO_BUILD="Mips $TARGETS_TO_BUILD" ;; + spu) TARGETS_TO_BUILD="CellSPU $TARGETS_TO_BUILD" ;; + xcore) TARGETS_TO_BUILD="XCore $TARGETS_TO_BUILD" ;; + msp430) TARGETS_TO_BUILD="MSP430 $TARGETS_TO_BUILD" ;; + systemz) TARGETS_TO_BUILD="SystemZ $TARGETS_TO_BUILD" ;; + blackfin) TARGETS_TO_BUILD="Blackfin $TARGETS_TO_BUILD" ;; + cbe) TARGETS_TO_BUILD="CBackend $TARGETS_TO_BUILD" ;; + cpp) TARGETS_TO_BUILD="CppBackend $TARGETS_TO_BUILD" ;; + mblaze) TARGETS_TO_BUILD="MBlaze $TARGETS_TO_BUILD" ;; + ptx) TARGETS_TO_BUILD="PTX $TARGETS_TO_BUILD" ;; + *) AC_MSG_ERROR([Unrecognized target $a_target]) ;; + esac + done + ;; + esac + AC_SUBST(TARGETS_TO_BUILD,$TARGETS_TO_BUILD) + + dnl Build the LLVM_TARGET and LLVM_... macros for Targets.def and the individual + dnl target feature def files. + LLVM_ENUM_TARGETS="" + LLVM_ENUM_LINKERS="" + for target_to_build in $TARGETS_TO_BUILD; do + if test -d ${srcdir}/lib/Target/${target_to_build} ; then + LLVM_ENUM_TARGETS="LLVM_TARGET($target_to_build) $LLVM_ENUM_TARGETS" + fi + if test -f ${srcdir}/lib/Target/${target_to_build}/*LDBackend.cpp ; then + LLVM_ENUM_LINKERS="LLVM_LINKER($target_to_build) $LLVM_ENUM_LINKERS"; + fi + done + AC_SUBST(LLVM_ENUM_TARGETS) + AC_SUBST(LLVM_ENUM_LINKERS) +]) diff --git a/m4/llvm.m4 b/m4/llvm.m4 new file mode 100644 index 0000000..018a7ce --- /dev/null +++ b/m4/llvm.m4 @@ -0,0 +1,140 @@ +dnl +dnl @synopsis CHECK_LLVM([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl +dnl @summary check LLVM, set up variables: +dnl LLVM_CFLAGS="`${LLVM_CONFIG_BIN} --cflags`" +dnl LLVM_CPPFLAGS="`${LLVM_CONFIG_BIN} --cxxflags`" +dnl LLVM_LDFLAGS="`${LLVM_CONFIG_BIN} --ldflags --libs`" +dnl +dnl Luba Tang + + +AC_DEFUN([CHECK_LLVM], +[dnl + + AC_ARG_WITH( + [llvm-config], + [AS_HELP_STRING([--with-llvm-config[[=PATH]]], + [path to llvm-config (by default, searching in $PATH)])], + [llvm_config_path="${withval}"], + [llvm_config_path="/usr/"]) + + #Set up ${LLVM_CONFIG_BIN} + AC_MSG_CHECKING(for llvm-config) + + if test -x "${llvm_config_path}" -a ! -d "${llvm_config_path}"; then + LLVM_CONFIG_BIN=${llvm_config_path} + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + llvm_config_path=${PATH} + if test -d "${LLVM_BINDIR}"; then + llvm_config_path="${llvm_config_path}:${LLVM_BINDIR}" + fi + AC_PATH_PROG(LLVM_CONFIG_BIN, llvm-config, [no], ${llvm_config_path}) + if test "${LLVM_CONFIG_BIN}" = "no"; then + ifelse([$3], , , [$3]) + AC_MSG_NOTICE([*** The 'llvm-config' is not found!]) + AC_MSG_ERROR([*** Please use --with-llvm-config option with the full path of 'llvm-config'.]) + fi + fi + + dnl Use llvm-config to do: + dnl 1. is the minimum version correct? + dnl 2. the includedir + dnl 3. the flags - cflags, cxxflags, cppflags, ldflags + dnl 4. the libs + AC_MSG_CHECKING(for llvm - version >= $1) + cur_version="`${LLVM_CONFIG_BIN} --version`"; + tool_major="`${LLVM_CONFIG_BIN} --version | sed 's/svn//' | sed 's/\([[0-9]]*\).\([[0-9]]*\)/\1/'`" + tool_minor="`${LLVM_CONFIG_BIN} --version | sed 's/svn//'| sed 's/\([[0-9]]*\).\([[0-9]]*\)/\2/'`" + + require_major="`echo $1 | sed 's/svn//' | sed 's/\([[0-9]]*\).\([[0-9]]*\)/\1/'`" + require_minor="`echo $1 | sed 's/svn//' | sed 's/\([[0-9]]*\).\([[0-9]]*\)/\2/'`" + + if test "${tool_major}" -lt "${require_major}"; then + AC_MSG_RESULT([no]) + AC_MSG_ERROR([*** The version of LLVM is too low! (${cur_version}<$1)]) + elif test "${tool_major}" -eq "${require_major}"; then + if test "${tool_minor}" -lt "${require_minor}"; then + AC_MSG_RESULT([no]) + AC_MSG_ERROR([*** The version of LLVM is too low! (${cur_version}<$1)]) + fi + fi + AC_MSG_RESULT([yes]) + + LLVM_CFLAGS="`${LLVM_CONFIG_BIN} --cflags`" + LLVM_CPPFLAGS="`${LLVM_CONFIG_BIN} --cxxflags`" + LLVM_LDFLAGS="`${LLVM_CONFIG_BIN} --libs`" + LLVM_LDFLAGS="${LLVM_LDFLAGS} `${LLVM_CONFIG_BIN} --ldflags`" + LLVM_LDFLAGS="`echo ${LLVM_LDFLAGS} | sed 's/\n//g'`" + LLVM_LDFLAGS="`echo ${LLVM_LDFLAGS} | sed 's/-lgtest_main -lgtest//g'`" + LLVM_VERSION=${tool_major} + + AC_SUBST(LLVM_CFLAGS) + AC_SUBST(LLVM_CPPFLAGS) + AC_SUBST(LLVM_LDFLAGS) + AC_SUBST(LLVM_VERSION) + ifelse([$2], , , [$2]) + + AC_CACHE_CHECK([type of operating system we're going to host on], + [llvm_cv_platform_type], + [case $host in + *-*-aix*) + llvm_cv_platform_type="Unix" ;; + *-*-irix*) + llvm_cv_platform_type="Unix" ;; + *-*-cygwin*) + llvm_cv_platform_type="Unix" ;; + *-*-darwin*) + llvm_cv_platform_type="Unix" ;; + *-*-minix*) + llvm_cv_platform_type="Unix" ;; + *-*-freebsd*) + llvm_cv_platform_type="Unix" ;; + *-*-openbsd*) + llvm_cv_platform_type="Unix" ;; + *-*-netbsd*) + llvm_cv_platform_type="Unix" ;; + *-*-dragonfly*) + llvm_cv_platform_type="Unix" ;; + *-*-hpux*) + llvm_cv_platform_type="Unix" ;; + *-*-interix*) + llvm_cv_platform_type="Unix" ;; + *-*-linux*) + llvm_cv_platform_type="Unix" ;; + *-*-solaris*) + llvm_cv_platform_type="Unix" ;; + *-*-auroraux*) + llvm_cv_platform_type="Unix" ;; + *-*-win32*) + llvm_cv_platform_type="Win32" ;; + *-*-mingw*) + llvm_cv_platform_type="Win32" ;; + *-*-haiku*) + llvm_cv_platform_type="Unix" ;; + *-unknown-eabi*) + llvm_cv_platform_type="Unix" ;; + *-unknown-elf*) + llvm_cv_platform_type="Unix" ;; + *) + llvm_cv_platform_type="Unknown" ;; + esac]) + + dnl Set the "LLVM_ON_*" variables based on llvm_cv_llvm_cv_platform_type + dnl This is used by lib/Support to determine the basic kind of implementation + dnl to use. + case $llvm_cv_platform_type in + Unix) + AC_DEFINE([LLVM_ON_UNIX],[1],[Define if this is Unixish platform]) + AC_SUBST(LLVM_ON_UNIX,[1]) + AC_SUBST(LLVM_ON_WIN32,[0]) + ;; + Win32) + AC_DEFINE([LLVM_ON_WIN32],[1],[Define if this is Win32ish platform]) + AC_SUBST(LLVM_ON_UNIX,[0]) + AC_SUBST(LLVM_ON_WIN32,[1]) + ;; + esac +]) -- cgit v1.2.3