Gentoo Archives: gentoo-commits

From: Thomas Deutschmann <whissi@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/genkernel:master commit in: /
Date: Thu, 16 Jul 2020 15:03:33
Message-Id: 1594909756.b432f67903a419af3189abe3637300a42554415d.whissi@gentoo
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 )