summaryrefslogtreecommitdiffstats
path: root/m4/rtems-setup-recurse.m4
diff options
context:
space:
mode:
Diffstat (limited to 'm4/rtems-setup-recurse.m4')
-rw-r--r--m4/rtems-setup-recurse.m4224
1 files changed, 224 insertions, 0 deletions
diff --git a/m4/rtems-setup-recurse.m4 b/m4/rtems-setup-recurse.m4
new file mode 100644
index 0000000..e3f39ec
--- /dev/null
+++ b/m4/rtems-setup-recurse.m4
@@ -0,0 +1,224 @@
+# This macro assembles a list of RTEMS CPUs and if the list
+# contains more than one member then it creates a build subdirectory
+# for each CPU architecture, 'chdirs' into the subdirectory and recursively
+# configures for the CPU.
+#
+# Several options affect the behavior of this macro:
+#
+# --with-rtems-top
+# --host
+# --enable-rtemsbsp
+#
+# 1) if --with-rtems-top is NOT given (NOT RTEMS) OR if
+# --host=<xyz>-rtems was given (RTEMS CPU defined by user)
+# THEN the macro does nothing.
+#
+# 2) ELSE (--with-rtems-top given but --host is NOT *rtems*
+# i) assemble a list of all '<cpu>-rtems*' subdirectories
+# under ${with_rtems_top}
+#
+# ii) if --enable-rtemsbsp was given then remove CPU
+# architectures not being required by any of the listed
+# BSPS.
+#
+# iii) for each remaining CPU architecture create a subdirectory,
+# chdir there and recursively call 'configure' again with
+# the original arguments but --host=<cpu>-rtems appended.
+#
+# Note: this macro should not be used directly. It is expanded from
+# TILLAC_RTEMS_SETUP
+#
+# TILLAC_RTEMS_CONFIG_CPUS_RECURSIVE
+AC_DEFUN([TILLAC_RTEMS_CONFIG_CPUS_RECURSIVE],
+ [if test ! "${with_rtems_top+set}" = "set" || TILLAC_RTEMS_HOSTOS_IS_RTEMS ; then : ; else
+ # with_rtems_top is set but host_os is not *rtems*, i.e.,
+ # we have to figure out a list of CPUs/arches that are installed.
+ AC_MSG_CHECKING([for all installed CPUs/architectures])
+ _tillac_rtems_cpulist="`(cd $with_rtems_top; ls -d *-rtems* | tr '\n\r' ' ')`"
+ AC_MSG_RESULT([Found: $_tillac_rtems_cpulist])
+ # if 'enable-rtemsbsp' was given then filter away
+ # architectures that match none of the BSPs
+ if test "${enable_rtemsbsp+set}" = "set" ; then
+ # convert space separated list into ORed (|) pattern
+ _tillac_rtems_bspfilt=`echo "$enable_rtemsbsp" | sed -e 's/[[ \t]]\+/|/g'`
+ AC_MSG_NOTICE([Filtering CPU/architecture list against bsps: $_tillac_rtems_bspfilt])
+ _tillac_rtems_cpuall="$_tillac_rtems_cpulist"
+ _tillac_rtems_cpulist=""
+ AC_MSG_CHECKING([CPU/architectures matching requested BSPs])
+ for _tillac_rtems_cpucand in $_tillac_rtems_cpuall ; do
+ # look for directories which have a 'Makefile.inc'
+ for _tillac_rtems_bspcand in `(cd $with_rtems_top/$_tillac_rtems_cpucand ; ls */Makefile.inc | tr '\n\r' ' ')` ; do
+ AC_MSG_NOTICE([testing $_tillac_rtems_bspcand])
+ # reduce to bsp name
+ _tillac_rtems_bspcand=`dirname $_tillac_rtems_bspcand`
+ if eval "case `echo $_tillac_rtems_bspcand` in $_tillac_rtems_bspfilt) : ;; *) false ;; esac" ; then
+ # only add candidate to list of cpus if not already there
+ if test -z "$_tillac_rtems_cpulist" ; then
+ _tillac_rtems_cpulist="$_tillac_rtems_cpucand"
+ else
+ _tillac_rtems_cpufilt=`echo "$_tillac_rtems_cpulist" | sed -e 's/[[ \t]]\+/|/g'`
+ if eval "case `echo $_tillac_rtems_cpucand` in $_tillac_rtems_cpufilt) false ;; *) : ;; esac" ; then
+ _tillac_rtems_cpulist="$_tillac_rtems_cpulist $_tillac_rtems_cpucand"
+ fi
+ fi
+ fi
+ done
+ done
+ AC_MSG_RESULT([found: $_tillac_rtems_cpulist])
+ fi
+ if test "$_tillac_rtems_cpulist"xx = "xx" ; then
+ AC_MSG_ERROR([No RTEMS architectures found])
+ fi
+ # Create directory and configure
+ for _tillac_rtems_cpucand in $_tillac_rtems_cpulist ; do
+ if test -d $_tillac_rtems_cpucand || mkdir $_tillac_rtems_cpucand ; then : ; else
+ AC_MSG_ERROR([Unable to create subdirectory $_tillac_rtems_cpucand])
+ fi
+ TILLAC_RTEMS_TRIM_CONFIG_DIR(_tillac_rtems_config_dir)
+ # SUB-CONFIGURE
+ AC_MSG_NOTICE([Running $_tillac_rtems_config_dir/[$]0 "$ac_configure_args --host=$_tillac_rtems_cpucand" in "'$_tillac_rtems_cpucand'" subdir])
+ eval \( cd $_tillac_rtems_cpucand \; $SHELL $_tillac_rtems_config_dir/"[$]0" $ac_configure_args --host=$_tillac_rtems_cpucand \)
+ done
+ AC_MSG_NOTICE([Creating cpu/arch level makefile])
+ AC_SUBST(the_subdirs,[$_tillac_rtems_cpulist])
+ AC_SUBST(the_distsub,['$(firstword '"$_tillac_rtems_cpulist"')'])
+ _tillac_rtems_recursing=yes
+ false
+ fi]dnl
+)
+
+# This macro
+#
+# - removes --enable-rtemsbsp options from the current commandline
+# - for each BSP listed in '${enable_rtemsbsp}'
+# i) creates a BSP subdirectory in the build tree
+# ii) chdirs into the subdirectory
+# iii) figures out a few BSP-specific build settings
+# (cflags, gcc specs, ...)
+# iv) configures for the BSP passing the properties determined
+# under iii) along to 'configure' on the commandline.
+# Also, --enable-rtemsbsp=<this_bsp> is appended to the
+# configure commandline.
+#
+# Note: this macro should not be used directly. It is expanded from
+# TILLAC_RTEMS_SETUP
+#
+# TILLAC_RTEMS_CONFIG_BSPS_RECURSIVE
+AC_DEFUN([TILLAC_RTEMS_CONFIG_BSPS_RECURSIVE],
+ [if test ! "${RTEMS_TILL_MAKEVARS_SET}" = "YES"; then
+ # strip all --enable-rtemsbsp options from original
+ # commandline
+ AC_MSG_NOTICE([Stripping --enable-rtemsbsp option(s) from commandline])
+ _tillac_rtems_config_args=""
+ eval for _tillac_rtems_arg in $ac_configure_args \; do case \$_tillac_rtems_arg in --enable-rtemsbsp\* \) \;\; \*\) _tillac_rtems_config_args=\"\$_tillac_rtems_config_args \'\$_tillac_rtems_arg\'\" \;\; esac done
+ AC_MSG_NOTICE([Commandline now: $_tillac_rtems_config_args])
+
+ AC_MSG_NOTICE([Creating BSP subdirectories and sub-configuring])
+ TILLAC_RTEMS_SAVE_MAKEVARS
+ for _tillac_rtems_bsp in $enable_rtemsbsp ; do
+ if test ! -d $_tillac_rtems_bsp ; then
+ AC_MSG_CHECKING([Creating $_tillac_rtems_bsp])
+ if mkdir $_tillac_rtems_bsp ; then
+ AC_MSG_RESULT([OK])
+ else
+ AC_MSG_ERROR([Failed])
+ fi
+ fi
+ TILLAC_RTEMS_TRIM_CONFIG_DIR(_tillac_rtems_config_dir)
+ TILLAC_RTEMS_RESET_MAKEVARS
+ TILLAC_RTEMS_MAKEVARS(${host_cpu}-${host_os},$_tillac_rtems_bsp)
+ tillac_rtems_cppflags="$tillac_rtems_cppflags -I$with_rtems_top/${host_cpu}-${host_os}/$_tillac_rtems_bsp/lib/include"
+ TILLAC_RTEMS_EXPORT_MAKEVARS(${host_cpu}-${host_os},$_tillac_rtems_bsp)
+ AC_MSG_NOTICE([Running $_tillac_rtems_config_dir/[$]0 $_tillac_rtems_config_args --enable-rtemsbsp=$_tillac_rtems_bsp in $_tillac_rtems_bsp subdir])
+ eval \( cd $_tillac_rtems_bsp \; $SHELL $_tillac_rtems_config_dir/"[$]0" $_tillac_rtems_config_args --enable-rtemsbsp=$_tillac_rtems_bsp \)
+ done
+ TILLAC_RTEMS_RESET_MAKEVARS
+ AC_MSG_NOTICE([Creating toplevel makefile])
+ AC_SUBST(the_subdirs,[$enable_rtemsbsp])
+ AC_SUBST(the_distsub,['$(firstword '"$enable_rtemsbsp"')'])
+ fi]dnl
+)
+
+# Grand Master Macro for RTEMS configuration.
+#
+# This sets up most things for a RTEMS configuration
+# for multiple CPU-arches and BSPs.
+#
+# A package may add the optional (literal) argument
+# 'domultilib'. In this case, multilib support is enabled
+# and the user may configure with '--enable-multilib'.
+# Note that the package must properly support multilibs!
+#
+# If the host system is not RTEMS (no with-rtems-top given)
+# then this macro does *nothing*.
+#
+# TILLAC_RTEMS_SETUP([domultilib])
+AC_DEFUN([TILLAC_RTEMS_SETUP],
+ [AC_REQUIRE([TILLAC_RTEMS_OPTIONS])dnl
+ AM_CONDITIONAL(OS_IS_RTEMS,[TILLAC_RTEMS_OS_IS_RTEMS])
+ if TILLAC_RTEMS_CONFIG_CPUS_RECURSIVE ; then
+ m4_if($1,domultilib,
+ [TILLAC_RTEMS_MULTILIB([Makefile],[.])],
+ [AC_REQUIRE([TILLAC_RTEMS_OPTIONS])dnl
+ if test "${enable_multilib}" = "yes" ; then
+ AC_MSG_ERROR(["multilibs not supported, sorry"])
+ fi]dnl
+ )
+ if TILLAC_RTEMS_OS_IS_RTEMS ; then
+ TILLAC_RTEMS_CHECK_TOP
+ AC_ARG_VAR([RTEMS_TILL_MAKEVARS_SET],[Internal use; do NOT set in environment nor on commandline])
+ AC_ARG_VAR([DOWNEXT],[extension of downloadable binary (if applicable)])
+ AC_ARG_VAR([APPEXEEXT], [extension of linked binary])
+ AC_ARG_VAR([RTEMS_BSP_FAMILY],[Internal use; do NOT set in environment nor on commandline])
+ AC_ARG_VAR([RTEMS_BSP_INSTTOP],[Internal use; do NOT set in environment nor on commandline])
+ if test "$1" = "domultilib" && test "$enable_multilib" = "yes" ; then
+ if test "${enable_rtemsbsp+set}" = "set" ; then
+ AC_MSG_ERROR([Cannot --enable-rtemsbsp AND --enable-multilib; build either multilibs or for particular BSP(s)])
+ fi
+ TILLAC_RTEMS_EXPORT_MAKEVARS(${host_cpu}-${host_os},)
+ else
+ TILLAC_RTEMS_CHECK_BSPS
+ fi
+ if test ! "${RTEMS_TILL_MAKEVARS_SET}" = "YES"; then
+ TILLAC_RTEMS_CONFIG_BSPS_RECURSIVE(makefile)
+ _tillac_rtems_recursing=yes
+ else
+ TILLAC_RTEMS_FIXUP_PREFIXES
+dnl set those in the configure script so that 'configure' uses these settings when trying to compile stuff
+dnl AC_SUBST(rtems_gccspecs, [$tillac_rtems_gccspecs])
+dnl AC_SUBST(rtems_cpu_cflags, [$tillac_rtems_cpu_cflags])
+dnl AC_SUBST(rtems_cpu_asflags,["$tillac_rtems_cpu_asflags -DASM"])
+dnl AC_SUBST(rtems_cppflags, [$tillac_rtems_cppflags])
+ AC_SUBST(rtems_bsp, [$enable_rtemsbsp])
+ AC_MSG_NOTICE([Setting DOWNEXT to .ralf])
+ DOWNEXT=.ralf
+ AC_MSG_NOTICE([Setting APPEXEEXT to .exe])
+ APPEXEEXT=.exe
+ TILLAC_RTEMS_VERSTEST
+ fi
+ fi
+ fi
+ if test "${_tillac_rtems_recursing}" = "yes" ; then
+ AC_CONFIG_FILES([makefile:makefile.top.in])
+ AC_OUTPUT
+ exit 0
+ false
+ fi]dnl
+)
+
+dnl m4_syscmd is executed when aclocal is run
+m4_syscmd([cat - > makefile.top.am <<'EOF_'
+AUTOMAKE_OPTIONS=foreign
+SUBDIRS=@the_subdirs@
+# When making a distribution we only want to
+# recurse into (any) one single BSP subdir.
+DIST_SUBDIRS=@the_distsub@
+
+# The dist-hook then removes this extra
+# directory level again.
+dist-hook:
+ if test "$(PACKAGE_VERSION)" = "untagged" ; then echo "Need tagged version to cut distribution"; exit 1; fi
+ cp -frl $(distdir)/$(DIST_SUBDIRS)/* $(distdir)
+ rm -fr $(distdir)/$(DIST_SUBDIRS)
+EOF_
+])