From 4276c30363db6a3252f9de9fd77302e126243772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=B6k=C3=A7en=20Eraslan?= Date: Thu, 13 Oct 2011 16:14:16 +0000 Subject: [PATCH] configfile: Move all toolchain executable names to configfile to make them overridable. Now we can override all toolchain executable names in pisi.conf file to use another compiler like clang or for cross-compile purposes. --- pisi/actionsapi/get.py | 31 ++++++++++--------------------- pisi/actionsapi/variables.py | 6 ++++-- pisi/configfile.py | 25 +++++++++++++++++++++++++ pisi/operations/build.py | 8 ++++++-- pisi/util.py | 6 +++--- 5 files changed, 48 insertions(+), 28 deletions(-) diff --git a/pisi/actionsapi/get.py b/pisi/actionsapi/get.py index 5f863c8b..1f09bcef 100644 --- a/pisi/actionsapi/get.py +++ b/pisi/actionsapi/get.py @@ -34,6 +34,7 @@ class BinutilsError(pisi.actionsapi.Error): # Globals env = pisi.actionsapi.variables.glb.env dirs = pisi.actionsapi.variables.glb.dirs +config = pisi.actionsapi.variables.glb.config generals = pisi.actionsapi.variables.glb.generals def curDIR(): @@ -164,41 +165,29 @@ def qtDIR(): # Binutils Variables -def getBinutilsInfo(util): - cross_build_name = '%s-%s' % (HOST(), util) - if not pisi.util.search_executable(cross_build_name): - if not pisi.util.search_executable(util): - raise BinutilsError(_('Util %s cannot be found') % util) - else: - ctx.ui.debug(_('Warning: %s does not exist, using plain name %s') \ - % (cross_build_name, util)) - return util - else: - return cross_build_name - def AR(): - return getBinutilsInfo('ar') + return config.values.build.ar def AS(): - return getBinutilsInfo('as') + return config.values.build.assembler def CC(): - return getBinutilsInfo('gcc') + return config.values.build.cc def CXX(): - return getBinutilsInfo('g++') + return config.values.build.cxx def LD(): - return getBinutilsInfo('ld') + return config.values.build.ld def NM(): - return getBinutilsInfo('nm') + return config.values.build.nm def RANLIB(): - return getBinutilsInfo('ranlib') + return config.values.build.ranlib def F77(): - return getBinutilsInfo('g77') + return config.values.build.f77 def GCJ(): - return getBinutilsInfo('gcj') + return config.values.build.gcj diff --git a/pisi/actionsapi/variables.py b/pisi/actionsapi/variables.py index 057afbf0..33a8e262 100644 --- a/pisi/actionsapi/variables.py +++ b/pisi/actionsapi/variables.py @@ -14,6 +14,7 @@ import os # Pisi-Core Modules import pisi.context as ctx +import pisi.util # Set individual information, that are generally needed for ActionsAPI @@ -35,8 +36,9 @@ def exportFlags(): os.environ['JOBS'] = values.build.jobs # http://liste.pardus.org.tr/gelistirici/2009-January/016442.html - os.environ['CC'] = "%s-gcc" % values.build.host - os.environ['CXX'] = "%s-g++" % values.build.host + os.environ['CC'] = values.build.cc + os.environ['CXX'] = values.build.cxx + os.environ['LD'] = values.build.ld class Env(object): '''General environment variables used in actions API''' diff --git a/pisi/configfile.py b/pisi/configfile.py index 14536cd9..37ea46c1 100644 --- a/pisi/configfile.py +++ b/pisi/configfile.py @@ -30,6 +30,17 @@ #cflags= -mtune=generic -march=i686 -O2 -pipe -fomit-frame-pointer -fstack-protector -D_FORTIFY_SOURCE=2 #cxxflags= -mtune=generic -march=i686 -O2 -pipe -fomit-frame-pointer -fstack-protector -D_FORTIFY_SOURCE=2 #ldflags= -Wl,-O1 -Wl,-z,relro -Wl,--hash-style=gnu -Wl,--as-needed -Wl,--sort-common +#ar = "ar" +#assembler = "as" +#cc = "gcc" +#cxx = "g++" +#ld = "ld" +#nm = "nm" +#ranlib = "ranlib" +#f77 = "g77" +#gcj = "gcj" +#strip = "strip" +#objcopy= "objcopy" #buildhelper = None / ccache / icecream #compressionlevel = 1 #fallback = "ftp://ftp.pardus.org.tr/pub/source/2011" @@ -87,6 +98,20 @@ class BuildDefaults: enableSandbox = True cflags = "-mtune=generic -march=i686 -O2 -pipe -fomit-frame-pointer -fstack-protector -D_FORTIFY_SOURCE=2" cxxflags = "-mtune=generic -march=i686 -O2 -pipe -fomit-frame-pointer -fstack-protector -D_FORTIFY_SOURCE=2" + + # Toolchain defaults + ar = "ar" + assembler = "as" + cc = "gcc" + cxx = "g++" + ld = "ld" + nm = "nm" + ranlib = "ranlib" + f77 = "g77" + gcj = "gcj" + strip = "strip" + objcopy= "objcopy" + ldflags = "-Wl,-O1 -Wl,-z,relro -Wl,--hash-style=gnu -Wl,--as-needed -Wl,--sort-common" buildhelper = None compressionlevel = 1 diff --git a/pisi/operations/build.py b/pisi/operations/build.py index 4035c58f..60febecf 100644 --- a/pisi/operations/build.py +++ b/pisi/operations/build.py @@ -408,12 +408,14 @@ class Builder: # First check icecream, if not found use ccache # TODO: Add support for using both of them if ctx.config.values.build.buildhelper == "icecream": - if os.path.exists("/opt/icecream/bin/gcc"): + if os.path.exists("/opt/icecream/bin/%s" % ctx.config.values.build.cc): self.has_icecream = True os.environ["PATH"] = "/opt/icecream/bin:%(PATH)s" % os.environ + else: + ctx.ui.warning(_("Specified compiler is not supported by icecream, it will be disabled.")) elif ctx.config.values.build.buildhelper == "ccache": - if os.path.exists("/usr/lib/ccache/bin/gcc"): + if os.path.exists("/usr/lib/ccache/bin/%s" % ctx.config.values.build.cc): self.has_ccache = True os.environ["PATH"] = "/usr/lib/ccache/bin:%(PATH)s" \ @@ -421,6 +423,8 @@ class Builder: # Force ccache to use /root/.ccache instead of $HOME/.ccache # as $HOME can be modified through actions.py os.environ["CCACHE_DIR"] = "/root/.ccache" + else: + ctx.ui.warning(_("Specified compiler is not supported by ccache, it will be disabled.")) def fetch_files(self): self.fetch_patches() diff --git a/pisi/util.py b/pisi/util.py index 68f4603d..185b5936 100644 --- a/pisi/util.py +++ b/pisi/util.py @@ -552,7 +552,7 @@ def do_patch(sourceDir, patchFile, level=0, name=None, reverse=False): def strip_file(filepath, fileinfo, outpath): """Strip an elf file from debug symbols.""" def run_strip(f, flags=""): - p = os.popen("strip %s %s" %(flags, f)) + p = os.popen("%s %s %s" %(ctx.config.values.build.strip, flags, f)) ret = p.close() if ret: ctx.ui.warning(_("strip command failed for file '%s'!") % f) @@ -566,13 +566,13 @@ def strip_file(filepath, fileinfo, outpath): def save_elf_debug(f, o): """copy debug info into file.debug file""" - p = os.popen("objcopy --only-keep-debug %s %s%s" % (f, o, ctx.const.debug_file_suffix)) + p = os.popen("%s --only-keep-debug %s %s%s" % (ctx.config.values.build.objcopy, f, o, ctx.const.debug_file_suffix)) ret = p.close() if ret: ctx.ui.warning(_("objcopy (keep-debug) command failed for file '%s'!") % f) """mark binary/shared objects to use file.debug""" - p = os.popen("objcopy --add-gnu-debuglink=%s%s %s" % (o, ctx.const.debug_file_suffix, f)) + p = os.popen("%s --add-gnu-debuglink=%s%s %s" % (ctx.config.values.build.objcopy, o, ctx.const.debug_file_suffix, f)) ret = p.close() if ret: ctx.ui.warning(_("objcopy (add-debuglink) command failed for file '%s'!") % f)