Gentoo Archives: gentoo-catalyst

From: "Anthony G. Basile" <basile@××××××××××××××.edu>
To: gentoo-catalyst@l.g.o
Cc: "Anthony G. Basile" <blueness@g.o>
Subject: [gentoo-catalyst] [PATCH] modules/generic_stage_target.py: handle USE_EXPAND flags
Date: Sat, 14 Feb 2015 20:57:25
Message-Id: 1423947404-22416-1-git-send-email-basile@opensource.dyc.edu
1 From: "Anthony G. Basile" <blueness@g.o>
2
3 Currently catalyst does not handle USE_EXPAND flags. However, the
4 recent move of mmx, sse and friends from the global USE flags to the
5 new CPU_FLAGS_X86 USE_EXPAND flag requires this.
6
7 This commit adds code to handle a new syntax for self.setting[x] values
8 which can now contain dictionaries to objects. We use these to build
9 environment variables for USE_EXPAND flags. Eg. in arch/amd64.py
10 we set
11
12 self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2"]}
13
14 which is later exported in the environtment as:
15
16 clst_HOSTUSEEXPAND="CPU_FLAGS_X86"
17
18 and
19
20 clst_CPU_FLAGS_X86="mmx sse sse2"
21
22 In general one could have:
23
24 self.settings["A"]={"B":[1,2,3],"C":[4,5,6]}
25
26 which would export
27
28 clst_A="B C"
29
30 and
31
32 clst_B="1 2 3"
33 clst_C="4 5 6"
34
35 Signed-off-by: Anthony G. Basile <blueness@g.o>
36 ---
37 arch/amd64.py | 14 +++++++-------
38 arch/x86.py | 20 ++++++++++----------
39 modules/generic_stage_target.py | 30 ++++++++++++++++++++++++++++++
40 targets/stage1/stage1-chroot.sh | 13 ++++++++++++-
41 4 files changed, 59 insertions(+), 18 deletions(-)
42
43 diff --git a/arch/amd64.py b/arch/amd64.py
44 index 262b55a..2743e22 100644
45 --- a/arch/amd64.py
46 +++ b/arch/amd64.py
47 @@ -13,7 +13,7 @@ class arch_amd64(generic_amd64):
48 generic_amd64.__init__(self,myspec)
49 self.settings["CFLAGS"]="-O2 -pipe"
50 self.settings["CHOST"]="x86_64-pc-linux-gnu"
51 - self.settings["HOSTUSE"]=["mmx","sse","sse2"]
52 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2"]}
53
54 class arch_nocona(generic_amd64):
55 "improved version of Intel Pentium 4 CPU with 64-bit extensions, MMX, SSE, SSE2 and SSE3 support"
56 @@ -21,7 +21,7 @@ class arch_nocona(generic_amd64):
57 generic_amd64.__init__(self,myspec)
58 self.settings["CFLAGS"]="-O2 -march=nocona -pipe"
59 self.settings["CHOST"]="x86_64-pc-linux-gnu"
60 - self.settings["HOSTUSE"]=["mmx","sse","sse2"]
61 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2"]}
62
63 # Requires gcc 4.3 to use this class
64 class arch_core2(generic_amd64):
65 @@ -30,7 +30,7 @@ class arch_core2(generic_amd64):
66 generic_amd64.__init__(self,myspec)
67 self.settings["CFLAGS"]="-O2 -march=core2 -pipe"
68 self.settings["CHOST"]="x86_64-pc-linux-gnu"
69 - self.settings["HOSTUSE"]=["mmx","sse","sse2","ssse3"]
70 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2","ssse3"]}
71
72 class arch_k8(generic_amd64):
73 "generic k8, opteron and athlon64 support"
74 @@ -38,7 +38,7 @@ class arch_k8(generic_amd64):
75 generic_amd64.__init__(self,myspec)
76 self.settings["CFLAGS"]="-O2 -march=k8 -pipe"
77 self.settings["CHOST"]="x86_64-pc-linux-gnu"
78 - self.settings["HOSTUSE"]=["mmx","sse","sse2","3dnow"]
79 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2","3dnow"]}
80
81 class arch_k8_sse3(generic_amd64):
82 "improved versions of k8, opteron and athlon64 with SSE3 support"
83 @@ -46,7 +46,7 @@ class arch_k8_sse3(generic_amd64):
84 generic_amd64.__init__(self,myspec)
85 self.settings["CFLAGS"]="-O2 -march=k8-sse3 -pipe"
86 self.settings["CHOST"]="x86_64-pc-linux-gnu"
87 - self.settings["HOSTUSE"]=["mmx","sse","sse2","3dnow"]
88 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2","3dnow"]}
89
90 class arch_amdfam10(generic_amd64):
91 "AMD Family 10h core based CPUs with x86-64 instruction set support"
92 @@ -54,7 +54,7 @@ class arch_amdfam10(generic_amd64):
93 generic_amd64.__init__(self,myspec)
94 self.settings["CFLAGS"]="-O2 -march=amdfam10 -pipe"
95 self.settings["CHOST"]="x86_64-pc-linux-gnu"
96 - self.settings["HOSTUSE"]=["mmx","sse","sse2","3dnow"]
97 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2","3dnow"]}
98
99 class arch_x32(generic_amd64):
100 "builder class for generic x32 (Intel and AMD)"
101 @@ -62,7 +62,7 @@ class arch_x32(generic_amd64):
102 generic_amd64.__init__(self,myspec)
103 self.settings["CFLAGS"]="-O2 -pipe"
104 self.settings["CHOST"]="x86_64-pc-linux-gnux32"
105 - self.settings["HOSTUSE"]=["mmx","sse","sse2"]
106 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2"]}
107
108 def register():
109 "inform main catalyst program of the contents of this plugin"
110 diff --git a/arch/x86.py b/arch/x86.py
111 index 0391b79..585dcee 100644
112 --- a/arch/x86.py
113 +++ b/arch/x86.py
114 @@ -54,42 +54,42 @@ class arch_pentium_mmx(generic_x86):
115 def __init__(self,myspec):
116 generic_x86.__init__(self,myspec)
117 self.settings["CFLAGS"]="-O2 -march=pentium-mmx -pipe"
118 - self.settings["HOSTUSE"]=["mmx"]
119 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx"]}
120
121 class arch_pentium2(generic_x86):
122 "Intel Pentium 2 CPU with MMX support"
123 def __init__(self,myspec):
124 generic_x86.__init__(self,myspec)
125 self.settings["CFLAGS"]="-O2 -march=pentium2 -pipe"
126 - self.settings["HOSTUSE"]=["mmx"]
127 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx"]}
128
129 class arch_pentium3(generic_x86):
130 "Intel Pentium 3 CPU with MMX and SSE support"
131 def __init__(self,myspec):
132 generic_x86.__init__(self,myspec)
133 self.settings["CFLAGS"]="-O2 -march=pentium3 -pipe"
134 - self.settings["HOSTUSE"]=["mmx","sse"]
135 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse"]}
136
137 class arch_pentium4(generic_x86):
138 "Intel Pentium 4 CPU with MMX, SSE and SSE2 support"
139 def __init__(self,myspec):
140 generic_x86.__init__(self,myspec)
141 self.settings["CFLAGS"]="-O2 -march=pentium4 -pipe"
142 - self.settings["HOSTUSE"]=["mmx","sse","sse2"]
143 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2"]}
144
145 class arch_pentium_m(generic_x86):
146 "Intel Pentium M CPU with MMX, SSE and SSE2 support"
147 def __init__(self,myspec):
148 generic_x86.__init__(self,myspec)
149 self.settings["CFLAGS"]="-O2 -march=pentium-m -pipe"
150 - self.settings["HOSTUSE"]=["mmx","sse","sse2"]
151 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2"]}
152
153 class arch_prescott(generic_x86):
154 "improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 and SSE3 support"
155 def __init__(self,myspec):
156 generic_x86.__init__(self,myspec)
157 self.settings["CFLAGS"]="-O2 -march=prescott -pipe"
158 - self.settings["HOSTUSE"]=["mmx","sse","sse2"]
159 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","sse","sse2"]}
160 self.settings["CHOST"]="i686-pc-linux-gnu"
161
162 class arch_k6(generic_x86):
163 @@ -98,7 +98,7 @@ class arch_k6(generic_x86):
164 generic_x86.__init__(self,myspec)
165 self.settings["CFLAGS"]="-O2 -march=k6 -pipe"
166 self.settings["CHOST"]="i686-pc-linux-gnu"
167 - self.settings["HOSTUSE"]=["mmx"]
168 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx"]}
169
170 class arch_k6_2(generic_x86):
171 "AMD K6-2 CPU with MMX and 3dNOW! support"
172 @@ -106,7 +106,7 @@ class arch_k6_2(generic_x86):
173 generic_x86.__init__(self,myspec)
174 self.settings["CFLAGS"]="-O2 -march=k6-2 -pipe"
175 self.settings["CHOST"]="i686-pc-linux-gnu"
176 - self.settings["HOSTUSE"]=["mmx","3dnow"]
177 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","3dnow"]}
178
179 class arch_athlon(generic_x86):
180 "AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE prefetch support"
181 @@ -114,7 +114,7 @@ class arch_athlon(generic_x86):
182 generic_x86.__init__(self,myspec)
183 self.settings["CFLAGS"]="-O2 -march=athlon -pipe"
184 self.settings["CHOST"]="i686-pc-linux-gnu"
185 - self.settings["HOSTUSE"]=["mmx","3dnow"]
186 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","3dnow"]}
187
188 class arch_athlon_xp(generic_x86):
189 "improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and full SSE support"
190 @@ -122,7 +122,7 @@ class arch_athlon_xp(generic_x86):
191 generic_x86.__init__(self,myspec)
192 self.settings["CFLAGS"]="-O2 -march=athlon-xp -pipe"
193 self.settings["CHOST"]="i686-pc-linux-gnu"
194 - self.settings["HOSTUSE"]=["mmx","3dnow","sse"]
195 + self.settings["HOSTUSEEXPAND"]={"CPU_FLAGS_X86":["mmx","3dnow","sse"]}
196
197 def register():
198 "Inform main catalyst program of the contents of this plugin."
199 diff --git a/modules/generic_stage_target.py b/modules/generic_stage_target.py
200 index cc24c63..3649223 100644
201 --- a/modules/generic_stage_target.py
202 +++ b/modules/generic_stage_target.py
203 @@ -1073,6 +1073,16 @@ class generic_stage_target(generic_target):
204 "/use will cause portage to ignore"
205 print "\tpackage.use in the profile and portage_confdir. You've been warned!"
206
207 + myuseexpandvars={}
208 + if "HOSTUSEEXPAND" in self.settings:
209 + for hostuseexpand in self.settings["HOSTUSEEXPAND"]:
210 + myuseexpandvars.update({hostuseexpand:self.settings["HOSTUSEEXPAND"][hostuseexpand]})
211 +
212 + if myuseexpandvars:
213 + myf.write("# These are the USE EXPAND flags that were used in addition to what is provided by the\n# profile used for building.\n")
214 + for hostuseexpand in myuseexpandvars:
215 + myf.write(hostuseexpand+'="'+string.join(myuseexpandvars[hostuseexpand])+'"\n')
216 +
217 myf.write('PORTDIR="/usr/portage"\n')
218 myf.write('DISTDIR="${PORTDIR}/distfiles"\n')
219 myf.write('PKGDIR="${PORTDIR}/packages"\n')
220 @@ -1271,6 +1281,26 @@ class generic_stage_target(generic_target):
221 self.env[varname]="true"
222 else:
223 self.env[varname]="false"
224 + # This handles a dictionary of objects just one level deep and no deeper!
225 + # Its currently used only for USE_EXPAND flags which are dictionaries of
226 + # lists in arch/amd64.py and friends. If we wanted self.settigs[var]
227 + # of any depth, we should make this function recursive.
228 + elif type(self.settings[x])==types.DictType:
229 + self.env[varname]=string.join(self.settings[x].keys())
230 + for y in self.settings[x].keys():
231 + varname2="clst_"+string.replace(y,"/","_")
232 + varname2=string.replace(varname2,"-","_")
233 + varname2=string.replace(varname2,".","_")
234 + if type(self.settings[x][y])==types.StringType:
235 + self.env[varname2]=self.settings[x][y]
236 + elif type(self.settings[x][y])==types.ListType:
237 + self.env[varname2]=string.join(self.settings[x][y])
238 + elif type(self.settings[x][y])==types.BooleanType:
239 + if self.settings[x][y]:
240 + self.env[varname]="true"
241 + else:
242 + self.env[varname]="false"
243 +
244 if "makeopts" in self.settings:
245 self.env["MAKEOPTS"]=self.settings["makeopts"]
246
247 diff --git a/targets/stage1/stage1-chroot.sh b/targets/stage1/stage1-chroot.sh
248 index eccbd3f..f79f360 100755
249 --- a/targets/stage1/stage1-chroot.sh
250 +++ b/targets/stage1/stage1-chroot.sh
251 @@ -54,9 +54,20 @@ run_merge "--oneshot --nodeps sys-apps/baselayout"
252 sed -i '/USE="${USE} -build"/d' /etc/portage/make.conf
253
254 # Now, we install our packages
255 -[ -e /etc/portage/make.conf ] && \
256 +if [ -e /etc/portage/make.conf ]; then
257 echo "USE=\"-* build ${BOOTSTRAP_USE} ${clst_HOSTUSE}\"" \
258 >> /etc/portage/make.conf
259 + for useexpand in "${clst_HOSTUSEEXPAND}"; do
260 + x="clst_${useexpand}"
261 + echo "${useexpand}=\"${!x}\"" \
262 + >> /etc/portage/make.conf
263 + done
264 +fi
265 run_merge "--oneshot ${clst_buildpkgs}"
266 sed -i "/USE=\"-* build ${BOOTSTRAP_USE} ${clst_HOSTUSE}\"/d" \
267 /etc/portage/make.conf
268 +for useexpand in "${clst_HOSTUSEEXPAND}"; do
269 + x="clst_${useexpand}"
270 + sed -i "/${useexpand}=\"${!x}\"/d" \
271 + /etc/portage/make.conf
272 +done
273 --
274 2.0.5