1 |
commit: b432f67903a419af3189abe3637300a42554415d |
2 |
Author: Thomas Deutschmann <whissi <AT> gentoo <DOT> org> |
3 |
AuthorDate: Tue Jul 14 15:03:47 2020 +0000 |
4 |
Commit: Thomas Deutschmann <whissi <AT> gentoo <DOT> org> |
5 |
CommitDate: Thu Jul 16 14:29:16 2020 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=b432f679 |
7 |
|
8 |
gen_compile.sh: compile_generic() refactored |
9 |
|
10 |
- Use an array to construct command to run. |
11 |
|
12 |
- Make sure we set all environment variables used by kernel's build |
13 |
system to honor our toolchain. |
14 |
Tested with with sys-devel/binutils-config[-native-symlinks] |
15 |
and sys-devel/gcc-config[-native-symlinks]. |
16 |
|
17 |
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org> |
18 |
|
19 |
gen_compile.sh | 117 +++++++++++++++++---------------------------------------- |
20 |
gen_funcs.sh | 22 +++++++++++ |
21 |
2 files changed, 57 insertions(+), 82 deletions(-) |
22 |
|
23 |
diff --git a/gen_compile.sh b/gen_compile.sh |
24 |
index e5254d7..0fa6912 100755 |
25 |
--- a/gen_compile.sh |
26 |
+++ b/gen_compile.sh |
27 |
@@ -80,85 +80,42 @@ compile_generic() { |
28 |
local argstype=${2} |
29 |
local RET |
30 |
|
31 |
+ local -a compile_cmd=() |
32 |
+ |
33 |
+ if [ ${NICE} -ne 0 ] |
34 |
+ then |
35 |
+ compile_cmd+=( nice "-n${NICE}" ) |
36 |
+ fi |
37 |
+ |
38 |
case "${argstype}" in |
39 |
kernel|kernelruntask) |
40 |
if [ -z "${KERNEL_MAKE}" ] |
41 |
then |
42 |
gen_die "KERNEL_MAKE undefined - I don't know how to compile a kernel for this arch!" |
43 |
else |
44 |
- local MAKE=${KERNEL_MAKE} |
45 |
+ local -x MAKE=${KERNEL_MAKE} |
46 |
+ compile_cmd+=( "${MAKE}" "${MAKEOPTS}" ) |
47 |
fi |
48 |
|
49 |
- # Build kernel compile parameter. |
50 |
- local ARGS="" |
51 |
+ if [[ "${argstype}" == 'kernelruntask' ]] |
52 |
+ then |
53 |
+ # silent operation, forced -j1 |
54 |
+ compile_cmd+=( -s -j1 ) |
55 |
+ fi |
56 |
|
57 |
- # Allow for CC/LD... user override! |
58 |
- local -a kernel_vars |
59 |
- kernel_vars+=( 'ARCH' ) |
60 |
- kernel_vars+=( 'AS' ) |
61 |
- kernel_vars+=( 'CC' ) |
62 |
- kernel_vars+=( 'LD' ) |
63 |
+ # Pass kernel compile parameter |
64 |
+ compile_cmd+=( "ARCH='${KERNEL_ARCH}'" ) |
65 |
|
66 |
- local kernel_var= |
67 |
- for kernel_var in "${kernel_vars[@]}" |
68 |
+ local tc_var |
69 |
+ for tc_var in AS AR CC LD NM OBJCOPY OBJDUMP READELF STRIP |
70 |
do |
71 |
- local kernel_varname="KERNEL_${kernel_var}" |
72 |
- local kernel_default_varname="DEFAULT_${kernel_varname}" |
73 |
- |
74 |
- if [[ -z "${!kernel_default_varname}" ]] \ |
75 |
- || [[ -n "${!kernel_default_varname}" ]] \ |
76 |
- && [[ "${!kernel_varname}" != "${!kernel_default_varname}" ]] |
77 |
- then |
78 |
- ARGS="${ARGS} ${kernel_var}=\"${!kernel_varname}\"" |
79 |
- fi |
80 |
+ compile_cmd+=( "${tc_var}='$(TC_PROG_TYPE=KERNEL tc-get${tc_var})'" ) |
81 |
done |
82 |
- unset kernel_var kernel_vars kernel_varname kernel_default_varname |
83 |
|
84 |
- if isTrue "$(tc-is-cross-compiler)" |
85 |
- then |
86 |
- local can_tc_cross_compile=no |
87 |
- local cpu_cbuild=${CBUILD%%-*} |
88 |
- local cpu_chost=${CHOST%%-*} |
89 |
- |
90 |
- case "${cpu_cbuild}" in |
91 |
- powerpc64*) |
92 |
- if [[ "${cpu_chost}" == "powerpc" ]] |
93 |
- then |
94 |
- can_tc_cross_compile=yes |
95 |
- fi |
96 |
- ;; |
97 |
- x86_64*) |
98 |
- if [[ "${cpu_chost}" == "i686" ]] |
99 |
- then |
100 |
- can_tc_cross_compile=yes |
101 |
- fi |
102 |
- ;; |
103 |
- esac |
104 |
- |
105 |
- if isTrue "${can_tc_cross_compile}" |
106 |
- then |
107 |
- local -a kernel_vars |
108 |
- kernel_vars+=( 'AS' ) |
109 |
- kernel_vars+=( 'CC' ) |
110 |
- kernel_vars+=( 'LD' ) |
111 |
- |
112 |
- local kernel_var= |
113 |
- for kernel_var in "${kernel_vars[@]}" |
114 |
- do |
115 |
- if [[ "${ARGS}" == *${kernel_var}=* ]] |
116 |
- then |
117 |
- # User wants to run specific program ... |
118 |
- continue |
119 |
- else |
120 |
- ARGS="${ARGS} ${kernel_var}=\"$(tc-get${kernel_var})\"" |
121 |
- fi |
122 |
- done |
123 |
- unset kernel_var kernel_vars |
124 |
- else |
125 |
- ARGS="${ARGS} CROSS_COMPILE=\"${CHOST}-\"" |
126 |
- fi |
127 |
- unset can_tc_cross_compile cpu_cbuild cpu_chost |
128 |
- fi |
129 |
+ compile_cmd+=( "HOSTAR='$(tc-getBUILD_AR)'" ) |
130 |
+ compile_cmd+=( "HOSTCC='$(tc-getBUILD_CC)'" ) |
131 |
+ compile_cmd+=( "HOSTCXX='$(tc-getBUILD_CXX)'" ) |
132 |
+ compile_cmd+=( "HOSTLD='$(tc-getBUILD_LD)'" ) |
133 |
|
134 |
if [ -n "${KERNEL_OUTPUTDIR}" -a "${KERNEL_OUTPUTDIR}" != "${KERNEL_DIR}" ] |
135 |
then |
136 |
@@ -174,7 +131,7 @@ compile_generic() { |
137 |
error_message+=" Please re-install a fresh kernel source!" |
138 |
gen_die "${error_message}" |
139 |
else |
140 |
- ARGS="${ARGS} O=\"${KERNEL_OUTPUTDIR}\"" |
141 |
+ compile_cmd+=( "O='${KERNEL_OUTPUTDIR}'" ) |
142 |
fi |
143 |
fi |
144 |
;; |
145 |
@@ -184,34 +141,30 @@ compile_generic() { |
146 |
gen_die "${error_msg}" |
147 |
;; |
148 |
esac |
149 |
- shift 2 |
150 |
|
151 |
- if [ ${NICE} -ne 0 ] |
152 |
- then |
153 |
- NICEOPTS="nice -n${NICE} " |
154 |
- else |
155 |
- NICEOPTS="" |
156 |
- fi |
157 |
+ compile_cmd+=( "${target}" ) |
158 |
+ |
159 |
+ print_info 3 "COMMAND: ${compile_cmd[*]}" 1 0 1 |
160 |
|
161 |
# the eval usage is needed in the next set of code |
162 |
# as ARGS can contain spaces and quotes, eg: |
163 |
# ARGS='CC="ccache gcc"' |
164 |
- if [ "${argstype}" == 'kernelruntask' ] |
165 |
+ if [[ "${argstype}" == 'kernelruntask' ]] |
166 |
then |
167 |
- # Silent operation, forced -j1 |
168 |
- print_info 3 "COMMAND: ${NICEOPTS}${MAKE} ${MAKEOPTS} -j1 ${ARGS} ${target} $*" 1 0 1 |
169 |
- eval ${NICEOPTS}${MAKE} -s ${MAKEOPTS} -j1 ${ARGS} ${target} $* |
170 |
+ eval "${compile_cmd[@]}" |
171 |
RET=$? |
172 |
elif [ "${LOGLEVEL}" -gt 3 ] |
173 |
then |
174 |
# Output to stdout and logfile |
175 |
- print_info 3 "COMMAND: ${NICEOPTS}${MAKE} ${MAKEOPTS} ${ARGS} ${target} $*" 1 0 1 |
176 |
- eval ${NICEOPTS}${MAKE} ${MAKEOPTS} ${ARGS} ${target} $* 2>&1 | tee -a "${LOGFILE}" |
177 |
+ compile_cmd+=( "2>&1 | tee -a '${LOGFILE}'" ) |
178 |
+ |
179 |
+ eval "${compile_cmd[@]}" |
180 |
RET=${PIPESTATUS[0]} |
181 |
else |
182 |
# Output to logfile only |
183 |
- print_info 3 "COMMAND: ${NICEOPTS}${MAKE} ${MAKEOPTS} ${ARGS} ${target} $*" 1 0 1 |
184 |
- eval ${NICEOPTS}${MAKE} ${MAKEOPTS} ${ARGS} ${target} $* >> "${LOGFILE}" 2>&1 |
185 |
+ compile_cmd+=( ">> '${LOGFILE}' 2>&1" ) |
186 |
+ |
187 |
+ eval "${compile_cmd[@]}" |
188 |
RET=$? |
189 |
fi |
190 |
|
191 |
|
192 |
diff --git a/gen_funcs.sh b/gen_funcs.sh |
193 |
index 81a7026..4d604e4 100755 |
194 |
--- a/gen_funcs.sh |
195 |
+++ b/gen_funcs.sh |
196 |
@@ -1240,14 +1240,31 @@ tc-getAS() { |
197 |
tc-getPROG AR ar "$@" |
198 |
} |
199 |
|
200 |
+tc-getBUILD_AR() { |
201 |
+ tc-getBUILD_PROG AR ar "$@" |
202 |
+} |
203 |
+ |
204 |
tc-getBUILD_CC() { |
205 |
tc-getBUILD_PROG CC gcc "$@" |
206 |
} |
207 |
|
208 |
+tc-getBUILD_CPP() { |
209 |
+ local cc=$(tc-getBUILD_CC) |
210 |
+ tc-getPROG CPP "${cc} -E" "$@" |
211 |
+} |
212 |
+ |
213 |
tc-getBUILD_CXX() { |
214 |
tc-getBUILD_PROG CXX g++ "$@" |
215 |
} |
216 |
|
217 |
+tc-getBUILD_LD() { |
218 |
+ tc-getBUILD_PROG LD ld "$@" |
219 |
+} |
220 |
+ |
221 |
+tc-getBUILD_READELF() { |
222 |
+ tc-getBUILD_PROG READELF readelf "$@" |
223 |
+} |
224 |
+ |
225 |
tc-getCC() { |
226 |
tc-getPROG CC gcc "$@" |
227 |
} |
228 |
@@ -1277,6 +1294,10 @@ tc-getOBJDUMP() { |
229 |
tc-getPROG OBJDUMP objdump "$@" |
230 |
} |
231 |
|
232 |
+tc-getREADELF() { |
233 |
+ tc-getPROG READELF readelf "$@" |
234 |
+} |
235 |
+ |
236 |
tc-getBUILD_PROG() { |
237 |
local vars="BUILD_$1 $1_FOR_BUILD HOST$1" |
238 |
# respect host vars if not cross-compiling |
239 |
@@ -1442,6 +1463,7 @@ gkbuild() { |
240 |
"OBJCOPY='$(tc-getOBJCOPY)'" |
241 |
"OBJDUMP='$(tc-getOBJDUMP)'" |
242 |
"RANLIB='$(tc-getRANLIB)'" |
243 |
+ "READELF='$(tc-getREADELF)'" |
244 |
"STRIP='$(tc-getSTRIP)'" |
245 |
) |