diff options
author | Anthony G. Basile <blueness@gentoo.org> | 2015-02-14 13:35:57 -0500 |
---|---|---|
committer | Anthony G. Basile <blueness@gentoo.org> | 2015-02-15 12:37:37 -0500 |
commit | 82bd1c573b65bbed6edbd4cc7a51468370ec1aa4 (patch) | |
tree | 0df7f9c008e73fef919dd2c262c99c37897ed0a9 | |
parent | arch/mips.py: update MIPS targets (diff) | |
download | catalyst-82bd1c573b65bbed6edbd4cc7a51468370ec1aa4.tar.gz catalyst-82bd1c573b65bbed6edbd4cc7a51468370ec1aa4.tar.bz2 catalyst-82bd1c573b65bbed6edbd4cc7a51468370ec1aa4.zip |
modules/generic_stage_target.py: handle USE_EXPAND flags
Currently catalyst does not handle USE_EXPAND flags. However, the
recent move of mmx, sse and friends from the global USE flags to the
new CPU_FLAGS_X86 USE_EXPAND flag requires this.
This commit adds code to handle a new syntax for self.setting[x] values
which can now contain dictionaries to objects. We use these to build
environment variables for USE_EXPAND flags. Eg. in arch/amd64.py
we set
self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2"]}
which is later exported in the environtment as:
clst_HOSTUSEEXPAND="CPU_FLAGS_X86"
and
clst_CPU_FLAGS_X86="mmx sse sse2"
In general one could have:
self.settings["A"]={"B":[1,2,3],"C":[4,5,6]}
which would export
clst_A="B C"
and
clst_B="1 2 3"
clst_C="4 5 6"
Signed-off-by: Anthony G. Basile <blueness@gentoo.org>
-rw-r--r-- | arch/amd64.py | 14 | ||||
-rw-r--r-- | arch/x86.py | 20 | ||||
-rw-r--r-- | modules/generic_stage_target.py | 31 | ||||
-rwxr-xr-x | targets/stage1/stage1-chroot.sh | 13 |
4 files changed, 59 insertions, 19 deletions
diff --git a/arch/amd64.py b/arch/amd64.py index 262b55a9..2743e222 100644 --- a/arch/amd64.py +++ b/arch/amd64.py @@ -13,7 +13,7 @@ class arch_amd64(generic_amd64): generic_amd64.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -pipe" self.settings["CHOST"]="x86_64-pc-linux-gnu" - self.settings["HOSTUSE"]=["mmx","sse","sse2"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2"]} class arch_nocona(generic_amd64): "improved version of Intel Pentium 4 CPU with 64-bit extensions, MMX, SSE, SSE2 and SSE3 support" @@ -21,7 +21,7 @@ class arch_nocona(generic_amd64): generic_amd64.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -march=nocona -pipe" self.settings["CHOST"]="x86_64-pc-linux-gnu" - self.settings["HOSTUSE"]=["mmx","sse","sse2"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2"]} # Requires gcc 4.3 to use this class class arch_core2(generic_amd64): @@ -30,7 +30,7 @@ class arch_core2(generic_amd64): generic_amd64.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -march=core2 -pipe" self.settings["CHOST"]="x86_64-pc-linux-gnu" - self.settings["HOSTUSE"]=["mmx","sse","sse2","ssse3"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2","ssse3"]} class arch_k8(generic_amd64): "generic k8, opteron and athlon64 support" @@ -38,7 +38,7 @@ class arch_k8(generic_amd64): generic_amd64.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -march=k8 -pipe" self.settings["CHOST"]="x86_64-pc-linux-gnu" - self.settings["HOSTUSE"]=["mmx","sse","sse2","3dnow"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2","3dnow"]} class arch_k8_sse3(generic_amd64): "improved versions of k8, opteron and athlon64 with SSE3 support" @@ -46,7 +46,7 @@ class arch_k8_sse3(generic_amd64): generic_amd64.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -march=k8-sse3 -pipe" self.settings["CHOST"]="x86_64-pc-linux-gnu" - self.settings["HOSTUSE"]=["mmx","sse","sse2","3dnow"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2","3dnow"]} class arch_amdfam10(generic_amd64): "AMD Family 10h core based CPUs with x86-64 instruction set support" @@ -54,7 +54,7 @@ class arch_amdfam10(generic_amd64): generic_amd64.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -march=amdfam10 -pipe" self.settings["CHOST"]="x86_64-pc-linux-gnu" - self.settings["HOSTUSE"]=["mmx","sse","sse2","3dnow"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2","3dnow"]} class arch_x32(generic_amd64): "builder class for generic x32 (Intel and AMD)" @@ -62,7 +62,7 @@ class arch_x32(generic_amd64): generic_amd64.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -pipe" self.settings["CHOST"]="x86_64-pc-linux-gnux32" - self.settings["HOSTUSE"]=["mmx","sse","sse2"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2"]} def register(): "inform main catalyst program of the contents of this plugin" diff --git a/arch/x86.py b/arch/x86.py index 0391b792..585dcee1 100644 --- a/arch/x86.py +++ b/arch/x86.py @@ -54,42 +54,42 @@ class arch_pentium_mmx(generic_x86): def __init__(self,myspec): generic_x86.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -march=pentium-mmx -pipe" - self.settings["HOSTUSE"]=["mmx"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx"]} class arch_pentium2(generic_x86): "Intel Pentium 2 CPU with MMX support" def __init__(self,myspec): generic_x86.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -march=pentium2 -pipe" - self.settings["HOSTUSE"]=["mmx"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx"]} class arch_pentium3(generic_x86): "Intel Pentium 3 CPU with MMX and SSE support" def __init__(self,myspec): generic_x86.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -march=pentium3 -pipe" - self.settings["HOSTUSE"]=["mmx","sse"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse"]} class arch_pentium4(generic_x86): "Intel Pentium 4 CPU with MMX, SSE and SSE2 support" def __init__(self,myspec): generic_x86.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -march=pentium4 -pipe" - self.settings["HOSTUSE"]=["mmx","sse","sse2"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2"]} class arch_pentium_m(generic_x86): "Intel Pentium M CPU with MMX, SSE and SSE2 support" def __init__(self,myspec): generic_x86.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -march=pentium-m -pipe" - self.settings["HOSTUSE"]=["mmx","sse","sse2"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2"]} class arch_prescott(generic_x86): "improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 and SSE3 support" def __init__(self,myspec): generic_x86.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -march=prescott -pipe" - self.settings["HOSTUSE"]=["mmx","sse","sse2"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2"]} self.settings["CHOST"]="i686-pc-linux-gnu" class arch_k6(generic_x86): @@ -98,7 +98,7 @@ class arch_k6(generic_x86): generic_x86.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -march=k6 -pipe" self.settings["CHOST"]="i686-pc-linux-gnu" - self.settings["HOSTUSE"]=["mmx"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx"]} class arch_k6_2(generic_x86): "AMD K6-2 CPU with MMX and 3dNOW! support" @@ -106,7 +106,7 @@ class arch_k6_2(generic_x86): generic_x86.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -march=k6-2 -pipe" self.settings["CHOST"]="i686-pc-linux-gnu" - self.settings["HOSTUSE"]=["mmx","3dnow"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","3dnow"]} class arch_athlon(generic_x86): "AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE prefetch support" @@ -114,7 +114,7 @@ class arch_athlon(generic_x86): generic_x86.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -march=athlon -pipe" self.settings["CHOST"]="i686-pc-linux-gnu" - self.settings["HOSTUSE"]=["mmx","3dnow"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","3dnow"]} class arch_athlon_xp(generic_x86): "improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and full SSE support" @@ -122,7 +122,7 @@ class arch_athlon_xp(generic_x86): generic_x86.__init__(self,myspec) self.settings["CFLAGS"]="-O2 -march=athlon-xp -pipe" self.settings["CHOST"]="i686-pc-linux-gnu" - self.settings["HOSTUSE"]=["mmx","3dnow","sse"] + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","3dnow","sse"]} def register(): "Inform main catalyst program of the contents of this plugin." diff --git a/modules/generic_stage_target.py b/modules/generic_stage_target.py index cc24c631..7bfc7892 100644 --- a/modules/generic_stage_target.py +++ b/modules/generic_stage_target.py @@ -1064,7 +1064,7 @@ class generic_stage_target(generic_target): myusevars.extend(self.settings["use"]) if myusevars: - myf.write("# These are the USE flags that were used in addition to what is provided by the\n# profile used for building.\n") + myf.write("# These are the USE and USE_EXPAND flags that were used for\n# buidling in addition to what is provided by the profile.\n") myusevars = sorted(set(myusevars)) myf.write('USE="'+string.join(myusevars)+'"\n') if '-*' in myusevars: @@ -1073,6 +1073,15 @@ class generic_stage_target(generic_target): "/use will cause portage to ignore" print "\tpackage.use in the profile and portage_confdir. You've been warned!" + myuseexpandvars={} + if "HOSTUSEEXPAND" in self.settings: + for hostuseexpand in self.settings["HOSTUSEEXPAND"]: + myuseexpandvars.update({hostuseexpand:self.settings["HOSTUSEEXPAND"][hostuseexpand]}) + + if myuseexpandvars: + for hostuseexpand in myuseexpandvars: + myf.write(hostuseexpand+'="'+string.join(myuseexpandvars[hostuseexpand])+'"\n') + myf.write('PORTDIR="/usr/portage"\n') myf.write('DISTDIR="${PORTDIR}/distfiles"\n') myf.write('PKGDIR="${PORTDIR}/packages"\n') @@ -1271,6 +1280,26 @@ class generic_stage_target(generic_target): self.env[varname]="true" else: self.env[varname]="false" + # This handles a dictionary of objects just one level deep and no deeper! + # Its currently used only for USE_EXPAND flags which are dictionaries of + # lists in arch/amd64.py and friends. If we wanted self.settigs[var] + # of any depth, we should make this function recursive. + elif type(self.settings[x])==types.DictType: + self.env[varname]=string.join(self.settings[x].keys()) + for y in self.settings[x].keys(): + varname2="clst_"+string.replace(y,"/","_") + varname2=string.replace(varname2,"-","_") + varname2=string.replace(varname2,".","_") + if type(self.settings[x][y])==types.StringType: + self.env[varname2]=self.settings[x][y] + elif type(self.settings[x][y])==types.ListType: + self.env[varname2]=string.join(self.settings[x][y]) + elif type(self.settings[x][y])==types.BooleanType: + if self.settings[x][y]: + self.env[varname]="true" + else: + self.env[varname]="false" + if "makeopts" in self.settings: self.env["MAKEOPTS"]=self.settings["makeopts"] diff --git a/targets/stage1/stage1-chroot.sh b/targets/stage1/stage1-chroot.sh index eccbd3fb..f79f360b 100755 --- a/targets/stage1/stage1-chroot.sh +++ b/targets/stage1/stage1-chroot.sh @@ -54,9 +54,20 @@ run_merge "--oneshot --nodeps sys-apps/baselayout" sed -i '/USE="${USE} -build"/d' /etc/portage/make.conf # Now, we install our packages -[ -e /etc/portage/make.conf ] && \ +if [ -e /etc/portage/make.conf ]; then echo "USE=\"-* build ${BOOTSTRAP_USE} ${clst_HOSTUSE}\"" \ >> /etc/portage/make.conf + for useexpand in "${clst_HOSTUSEEXPAND}"; do + x="clst_${useexpand}" + echo "${useexpand}=\"${!x}\"" \ + >> /etc/portage/make.conf + done +fi run_merge "--oneshot ${clst_buildpkgs}" sed -i "/USE=\"-* build ${BOOTSTRAP_USE} ${clst_HOSTUSE}\"/d" \ /etc/portage/make.conf +for useexpand in "${clst_HOSTUSEEXPAND}"; do + x="clst_${useexpand}" + sed -i "${useexpand}=\"${!x}\"" \ + /etc/portage/make.conf +done |