]> code.ossystems Code Review - openembedded-core.git/commitdiff
siteconfig: generate configuration data caches for autoconf
authorJeff Polk <jeff.polk@windriver.com>
Thu, 2 Sep 2010 21:08:59 +0000 (15:08 -0600)
committerRichard Purdie <rpurdie@linux.intel.com>
Fri, 3 Sep 2010 09:50:02 +0000 (10:50 +0100)
siteinfo: Use configuration caches when available

Generate cached configuration data for autoconf for the package
based on a list of header, types, and functions to eliminate the
need for all subesequent package builds to do the actual tests
via the cross compiler and sysroot.  The cache files are
stored in the sysroot in ${STAGING_DATADIR}/${TARGET_SYS}_config_site.d.
Siteinfo appends any files it finds in that directory to the normal
CONFIG_SITE.  All of the cache values set the variables only if not
already set so they may be overridden by any of the normal site files.

Signed-off-by: Jeff Polk <jeff.polk@windriver.com>
meta/classes/siteconfig.bbclass [new file with mode: 0644]
meta/classes/siteinfo.bbclass
scripts/gen-site-config [new file with mode: 0755]

diff --git a/meta/classes/siteconfig.bbclass b/meta/classes/siteconfig.bbclass
new file mode 100644 (file)
index 0000000..5311653
--- /dev/null
@@ -0,0 +1,31 @@
+siteconfig_do_siteconfig() {
+       if [ ! -d ${FILE_DIRNAME}/site_config ]; then
+               exit 0
+       fi
+       mkdir ${WORKDIR}/site_config
+       gen-site-config ${FILE_DIRNAME}/site_config \
+               >${WORKDIR}/site_config/configure.ac
+       cd ${WORKDIR}/site_config
+       autoconf
+        CONFIG_SITE="" ./configure ${CONFIGUREOPTS} --cache-file ${PN}_cache
+       sed -n -e "/ac_cv_c_bigendian/p" -e "/ac_cv_sizeof_/p" \
+               -e "/ac_cv_type_/p" -e "/ac_cv_header_/p" -e "/ac_cv_func_/p" \
+               < ${PN}_cache > ${PN}_config
+       mkdir -p ${SYSROOT_DESTDIR}${STAGING_DATADIR}/${TARGET_SYS}_config_site.d
+       cp ${PN}_config ${SYSROOT_DESTDIR}${STAGING_DATADIR}/${TARGET_SYS}_config_site.d
+}
+
+# Ugly integration with sstate_task_postfunc for now.  The normal package 
+# sysroot components must be installed in order to generate the cache, but
+# the site cache must be generated before the staging archive is generated.
+python sstate_task_postfunc () {
+    shared_state = sstate_state_fromvars(d)
+    sstate_install(shared_state, d)
+    if shared_state['name'] == 'populate-sysroot':
+        bb.build.exec_func('do_siteconfig', d)
+        sstate_clean(shared_state, d)
+        sstate_install(shared_state, d)
+    sstate_package(shared_state, d)
+}
+
+EXPORT_FUNCTIONS do_siteconfig
index c4206c2d85886ab1b32b0b64aea250e7c6d5c28a..130fdc4cfb3c350def760e0b5e5f013989945907 100644 (file)
@@ -96,6 +96,13 @@ def siteinfo_get_files(d):
                if os.path.exists(fname):
                        sitefiles += fname + " "
 
+       # Now check for siteconfig cache files
+       path_siteconfig = os.path.join(bb.data.getVar('STAGING_DATADIR', d, 1), bb.data.getVar('TARGET_SYS', d, 1) + "_config_site.d")
+       if os.path.isdir(path_siteconfig):
+               for i in os.listdir(path_siteconfig):
+                       fname = os.path.join(path_siteconfig, i)
+                       sitefiles += fname + " "
+
        bb.debug(1, "SITE files " + sitefiles);
        return sitefiles
 
diff --git a/scripts/gen-site-config b/scripts/gen-site-config
new file mode 100755 (executable)
index 0000000..7da7a0b
--- /dev/null
@@ -0,0 +1,53 @@
+#! /bin/sh
+#  Copyright (c) 2005-2008 Wind River Systems, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+cat << EOF
+AC_PREREQ(2.57)
+AC_INIT([site_wide],[1.0.0])
+
+EOF
+
+# Disable as endian is set in the default config
+#echo AC_C_BIGENDIAN
+#echo
+
+if [ -e $1/types ] ; then
+  while read type ; do
+    echo "AC_CHECK_SIZEOF([$type])"
+  done < $1/types
+
+  echo
+fi
+
+if [ -e $1/funcs ]; then
+  while read func ; do
+    echo "AC_CHECK_FUNCS([$func])"
+  done < $1/funcs
+
+  echo
+fi
+
+if [ -e $1/headers ]; then
+  while read header ; do
+    echo "AC_CHECK_HEADERS([$header])"
+  done < $1/headers
+
+  echo
+fi
+
+cat << EOF
+AC_OUTPUT
+EOF