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 |