# 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=-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 '-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=-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= 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_ ])