[elbe-devel] [PATCH v2 1/3] pbuilder: add ccache option to pbuilder

Christian Teklenborg chris at linutronix.de
Tue May 19 16:35:28 CEST 2020


By creating a pbuilder environment ccache gets installed by default. Therefore
change the pbuilder config file to implement ccache. It can be
deactivated by calling '--no-ccache' when the pbuilder environemt is created.
Also add an option '--ccache-size "size"' where size takes a number followed by
an optional suffix (k, M, G, T) and sets the maximum size of the compiler cache.
Use 0 for no limit.

Signed-off-by: Christian Teklenborg <chris at linutronix.de>
---
 elbepack/commands/control.py  | 10 ++++++++++
 elbepack/commands/pbuilder.py | 10 ++++++++++
 elbepack/elbeproject.py       |  3 ++-
 elbepack/pbuilder.py          | 18 ++++++++++++++++--
 4 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/elbepack/commands/control.py b/elbepack/commands/control.py
index 24b39269..a1c17365 100644
--- a/elbepack/commands/control.py
+++ b/elbepack/commands/control.py
@@ -92,6 +92,16 @@ def run_command(argv):
                             "combined with create. Combined with build it"
                             " will use this environment.")
 
+    oparser.add_option("--no-ccache", dest="noccache", default=False,
+                       action="store_true",
+                       help="Deactivates the compiler cache 'ccache'")
+
+    oparser.add_option("--ccache-size", dest="ccachesize", default="10G",
+                       action="store", type="string",
+                       help="set a limit for the compiler cache size "
+                            "(should be a number followed by an optional "
+                            "suffix: k, M, G, T. Use 0 for no limit.)")
+
     devel = OptionGroup(
         oparser,
         "options for elbe developers",
diff --git a/elbepack/commands/pbuilder.py b/elbepack/commands/pbuilder.py
index 91844e62..3e7dc578 100644
--- a/elbepack/commands/pbuilder.py
+++ b/elbepack/commands/pbuilder.py
@@ -52,6 +52,16 @@ def run_command(argv):
                             "combined with create. Combined with build it"
                             " will use this environment.")
 
+    oparser.add_option("--no-ccache", dest="noccache", default=False,
+                       action="store_true",
+                       help="Deactivates the compiler cache 'ccache'")
+
+    oparser.add_option("--ccache-size", dest="ccachesize", default="10G",
+                       action="store", type="string",
+                       help="set a limit for the compiler cache size "
+                            "(should be a number followed by an optional "
+                            "suffix: k, M, G, T. Use 0 for no limit.)")
+
     PreprocessWrapper.add_options(oparser)
 
     (opt, args) = oparser.parse_args(argv)
diff --git a/elbepack/elbeproject.py b/elbepack/elbeproject.py
index 8d45469d..49dbbeee 100644
--- a/elbepack/elbeproject.py
+++ b/elbepack/elbeproject.py
@@ -565,7 +565,8 @@ class ElbeProject (object):
 
         if self.xml.has('target/pbuilder') and not skip_pbuild:
             if not os.path.exists(os.path.join(self.builddir, "pbuilder")):
-                self.create_pbuilder(cross=False)
+                self.create_pbuilder(cross=False, noccache=False,
+                                     ccachesize="10G")
             for p in self.xml.node('target/pbuilder'):
                 self.pbuild(p)
                 # the package might be needed by a following pbuild, so update
diff --git a/elbepack/pbuilder.py b/elbepack/pbuilder.py
index e6f0b3cf..41697790 100644
--- a/elbepack/pbuilder.py
+++ b/elbepack/pbuilder.py
@@ -12,7 +12,7 @@ try:
 except ImportError:
     from urllib2 import urlopen
 
-def pbuilder_write_config(builddir, xml):
+def pbuilder_write_config(builddir, xml, noccache):
     distname = xml.prj.text('suite')
     pbuilderrc_fname = os.path.join(builddir, "pbuilderrc")
     fp = open(pbuilderrc_fname, "w")
@@ -60,9 +60,16 @@ def pbuilder_write_config(builddir, xml):
     fp.write('PBUILDERSATISFYDEPENDSCMD='
              '/usr/lib/pbuilder/pbuilder-satisfydepends-experimental\n')
 
+    if not noccache:
+        fp.write('export CCACHE_DIR="%s/ccache"\n' % builddir)
+        fp.write('export PATH="/usr/lib/ccache:${PATH}"\n')
+        fp.write('EXTRAPACKAGES=ccache\n')
+        fp.write('export CCACHE_CONFIGPATH="%s/ccache/ccache.conf"\n' %
+                 builddir)
+        fp.write('BINDMOUNTS="${CCACHE_DIR}"')
     fp.close()
 
-def pbuilder_write_cross_config(builddir, xml):
+def pbuilder_write_cross_config(builddir, xml, noccache):
     distname = xml.prj.text('suite')
     pbuilderrc_fname = os.path.join(builddir, "cross_pbuilderrc")
     fp = open(pbuilderrc_fname, "w")
@@ -83,6 +90,13 @@ def pbuilder_write_cross_config(builddir, xml):
     fp.write('HOOKDIR="%s"\n' % os.path.join(builddir, 'pbuilder_cross', 'hooks.d'))
     fp.write('PBUILDERSATISFYDEPENDSCMD='
              '/usr/lib/pbuilder/pbuilder-satisfydepends-apt\n')
+    if not noccache:
+        fp.write('export CCACHE_DIR="%s/ccache"\n' % builddir)
+        fp.write('export PATH="/usr/lib/ccache:${PATH}"\n')
+        fp.write('EXTRAPACKAGES=ccache\n')
+        fp.write('export CCACHE_CONFIGPATH="%s/ccache/ccache.conf"\n' %
+                 builddir)
+        fp.write('BINDMOUNTS="${CCACHE_DIR}"')
     fp.close()
 
 
-- 
2.20.1




More information about the elbe-devel mailing list