summaryrefslogtreecommitdiffstats
path: root/m4/rtems-makevars.m4
diff options
context:
space:
mode:
Diffstat (limited to 'm4/rtems-makevars.m4')
-rw-r--r--m4/rtems-makevars.m4142
1 files changed, 142 insertions, 0 deletions
diff --git a/m4/rtems-makevars.m4 b/m4/rtems-makevars.m4
new file mode 100644
index 0000000..2850dc6
--- /dev/null
+++ b/m4/rtems-makevars.m4
@@ -0,0 +1,142 @@
+# This macro saves the BSP-specific variables (such as CC, CXX, CPP, ...)
+# into intermediate variables from where they can be restored
+# with TILLAC_RTEMS_RESET_MAKEVARS
+#
+# Note: this macro should not be used directly. It is expanded from
+# TILLAC_RTEMS_SETUP
+#
+# TILLAC_RTEMS_SAVE_MAKEVARS
+AC_DEFUN([TILLAC_RTEMS_SAVE_MAKEVARS],
+ [
+ tillac_rtems_cc_orig="$CC"
+ tillac_rtems_cxx_orig="$CXX"
+ tillac_rtems_ccas_orig="$CCAS"
+ tillac_rtems_cpp_orig="$CPP"
+ tillac_rtems_ldflags_orig="$LDFLAGS"
+ tillac_rtems_bsp_family_orig=""
+ tillac_rtems_bsp_insttop_orig=""]dnl
+)
+
+# This macro restores the BSP-specific variables (such as CC, CXX, CPP, ...)
+# from intermediate variables that were set by TILLAC_RTEMS_SAVE_MAKEVARS
+#
+# Note: this macro should not be used directly. It is expanded from
+# TILLAC_RTEMS_SETUP
+#
+# TILLAC_RTEMS_RESET_MAKEVARS
+AC_DEFUN([TILLAC_RTEMS_RESET_MAKEVARS],
+ [
+ RTEMS_TILL_MAKEVARS_SET=NO
+ CC="$tillac_rtems_cc_orig"
+ CXX="$tillac_rtems_cxx_orig"
+ CCAS="$tillac_rtems_ccas_orig"
+ CPP="$tillac_rtems_cpp_orig"
+ LDFLAGS="$tillac_rtems_ldflags_orig"
+ RTEMS_BSP_FAMILY="$tillac_rtems_family_orig"
+ RTEMS_BSP_INSTTOP="$tillac_rtems_insttop_orig"]dnl
+)
+
+# Determine critical, BSP-specific build parameters from the
+# RTEMS makefiles. These parameters are cflags, gccspecs, ...
+#
+# Note: this macro should not be used directly. It is expanded from
+# TILLAC_RTEMS_SETUP
+#
+# TILLAC_RTEMS_MAKEVARS(HOST_SYSTEM, BSP)
+AC_DEFUN([TILLAC_RTEMS_MAKEVARS],
+ [
+ AC_MSG_CHECKING([Determining RTEMS Makefile parameters for BSP:])
+dnl DOWNEXT is set in leaf.cfg and we don't include that
+ if _tillac_rtems_result=`make -s -f - rtems_makevars <<EOF_
+include $with_rtems_top/$1/$2/Makefile.inc
+include \\\$(RTEMS_CUSTOM)
+include \\\$(CONFIG.CC)
+
+rtems_makevars:
+ @echo tillac_rtems_cpu_cflags=\'\\\$(CPU_CFLAGS) \\\$(AM_CFLAGS)\'
+ @echo tillac_rtems_gccspecs=\'\\\$(GCCSPECS)\'
+ @echo tillac_rtems_cpu_asflags=\'\\\$(CPU_ASFLAGS)\'
+ @echo tillac_rtems_ldflags=\'\\\$(AM_LDFLAGS) \\\$(LDFLAGS)\'
+ @echo tillac_rtems_cppflags=
+ @echo RTEMS_BSP_FAMILY=\'\\\$(RTEMS_BSP_FAMILY)\'
+ @echo RTEMS_BSP_INSTTOP=\'\\\$(PROJECT_RELEASE)\'
+EOF_
+` ; then
+ AC_MSG_RESULT([OK: $_tillac_rtems_result])
+ else
+ AC_MSG_ERROR([$_tillac_rtems_result])
+ fi
+ # propagate cpu_cflags and gccspecs into currently executing shell
+ eval $_tillac_rtems_result
+ export RTEMS_BSP_INSTTOP="$RTEMS_BSP_INSTTOP"
+ export RTEMS_BSP_FAMILY="$RTEMS_BSP_FAMILY"]dnl
+)
+
+# Export the set of critical, BSP-specific build parameters
+# (cflags, gccspecs, ...) that were determined by TILLAC_RTEMS_MAKEVARS
+# into the environment.
+#
+# This macro takes two (optional) arguments:
+#
+# <HOST_SYSTEM> and <LIBSUBDIR>
+#
+# The macro also, adds the paths listed in the --with-extra-incdirs and
+# --with-extra-libdirs options to the cppflags and ldflags, respectively
+# (adding -I, -L). If 'LIBSUBDIR' is given then it is appended to
+# any of the directories listed in --with-extra-libdirs (if the LIBSUBDIR
+# exists) there.
+#
+# Furthermore, if it is determined that RTEMS was configured for
+# a multilibbed cpukit then
+# i) -I${with_rtems_top}/${host_cpu}-${host_os}/include
+# is added to the cppflags (if the directory exists)
+# ii) -B${with_rtems_top}/<HOST_SYSTEM>/lib is added to the
+# gcc specs so that multilibs are found (workaround for
+# a bug in the rtems 4.9.0 makefiles)
+#
+# Note: this macro should not be used directly. It is expanded from
+# TILLAC_RTEMS_SETUP
+#
+# TILLAC_RTEMS_EXPORT_MAKEVARS([HOST_SYSTEM],[LIBSUBDIR])
+AC_DEFUN([TILLAC_RTEMS_EXPORT_MAKEVARS],
+ [
+ AC_MSG_CHECKING([Checking if RTEMS CC & friends MAKEVARS are already set])
+ if test ! "${RTEMS_TILL_MAKEVARS_SET}" = "YES"; then
+ AC_MSG_RESULT([No (probably a multilibbed build)])
+ export RTEMS_TILL_MAKEVARS_SET=YES
+ # if this is a multilibbed cpukit we need to include
+ if test -d $with_rtems_top/${host_cpu}-${host_os}/include ; then
+ tillac_rtems_cppflags="$tillac_rtems_cppflags -I$with_rtems_top/${host_cpu}-${host_os}/include"
+ # and since the RTEMS (4.9) makefiles seem to be broken
+ # for multilibbed cpukits (fail to add -B <libdir>) we
+ # do it here
+ tillac_rtems_gccspecs="$tillac_rtems_gccspecs -B $with_rtems_top/$1/lib"
+ fi
+ if test "${with_extra_incdirs+set}" = "set" ; then
+ for tillac_extra_incs_val in ${with_extra_incdirs} ; do
+ tillac_rtems_cppflags="$tillac_rtems_cppflags -I$tillac_extra_incs_val"
+ done
+ fi
+ if test "${with_extra_libdirs+set}" = "set" ; then
+ for tillac_extra_libs_val in ${with_extra_libdirs} ; do
+ if test -d $tillac_extra_libs_val/$2 ; then
+ tillac_rtems_ldflags="$tillac_rtems_ldflags -L$tillac_extra_libs_val/$2"
+ else
+ tillac_rtems_ldflags="$tillac_rtems_ldflags -L$tillac_extra_libs_val"
+ fi
+ done
+ fi
+#export forged CC & friends so that they are used by sub-configures, too
+ export CC="$CC $tillac_rtems_gccspecs $tillac_rtems_cpu_cflags $tillac_rtems_cppflags"
+ export CXX="$CXX $tillac_rtems_gccspecs $tillac_rtems_cpu_cflags $tillac_rtems_cppflags"
+ export CCAS="$CCAS $tillac_rtems_gccspecs $tillac_rtems_cpu_asflags -DASM"
+ export CPP="$CPP $tillac_rtems_gccspecs $tillac_rtems_cppflags"
+# export CFLAGS="$CFLAGS $tillac_rtems_cpu_cflags"
+# export CXXFLAGS="$CXXFLAGS $tillac_rtems_cpu_cflags"
+# export CCASFLAGS="$CCASFLAGS $tillac_rtems_cpu_asflags -DASM"
+# export CPPFLAGS="$CPPFLAGS $tillac_rtems_cppflags"
+ export LDFLAGS="$LDFLAGS $tillac_rtems_ldflags"
+ else
+ AC_MSG_RESULT([yes])
+ fi]dnl
+)