diff options
| -rw-r--r-- | meta/classes/kernel.bbclass | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass index ce2cab65ae..2a765547ac 100644 --- a/meta/classes/kernel.bbclass +++ b/meta/classes/kernel.bbclass | |||
| @@ -255,8 +255,39 @@ python do_devshell_prepend () { | |||
| 255 | 255 | ||
| 256 | addtask bundle_initramfs after do_install before do_deploy | 256 | addtask bundle_initramfs after do_install before do_deploy |
| 257 | 257 | ||
| 258 | get_cc_option () { | ||
| 259 | # Check if KERNEL_CC supports the option "file-prefix-map". | ||
| 260 | # This option allows us to build images with __FILE__ values that do not | ||
| 261 | # contain the host build path. | ||
| 262 | cc_option_supported=`${KERNEL_CC} -Q --help=joined | grep ffile-prefix-map` | ||
| 263 | cc_extra="" | ||
| 264 | if [ $cc_option_supported = "-ffile-prefix-map=<old=new>" ]; then | ||
| 265 | cc_extra=-ffile-prefix-map=${S}=/kernel-source/ | ||
| 266 | fi | ||
| 267 | echo $cc_extra | ||
| 268 | } | ||
| 269 | |||
| 258 | kernel_do_compile() { | 270 | kernel_do_compile() { |
| 259 | unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE | 271 | unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE |
| 272 | if [ "$BUILD_REPRODUCIBLE_BINARIES" = "1" ]; then | ||
| 273 | # kernel sources do not use do_unpack, so SOURCE_DATE_EPOCH may not | ||
| 274 | # be set.... | ||
| 275 | if [ "$SOURCE_DATE_EPOCH" = "0" ]; then | ||
| 276 | olddir=`pwd` | ||
| 277 | cd ${S} | ||
| 278 | SOURCE_DATE_EPOCH=`git log -1 --pretty=%ct` | ||
| 279 | # git repo not guaranteed, so fall back to REPRODUCIBLE_TIMESTAMP_ROOTFS | ||
| 280 | if [ $? -ne 0 ]; then | ||
| 281 | SOURCE_DATE_EPOCH=${REPRODUCIBLE_TIMESTAMP_ROOTFS} | ||
| 282 | fi | ||
| 283 | cd $olddir | ||
| 284 | fi | ||
| 285 | |||
| 286 | ts=`LC_ALL=C date -d @$SOURCE_DATE_EPOCH` | ||
| 287 | export KBUILD_BUILD_TIMESTAMP="$ts" | ||
| 288 | export KCONFIG_NOTIMESTAMP=1 | ||
| 289 | bbnote "KBUILD_BUILD_TIMESTAMP: $ts" | ||
| 290 | fi | ||
| 260 | # The $use_alternate_initrd is only set from | 291 | # The $use_alternate_initrd is only set from |
| 261 | # do_bundle_initramfs() This variable is specifically for the | 292 | # do_bundle_initramfs() This variable is specifically for the |
| 262 | # case where we are making a second pass at the kernel | 293 | # case where we are making a second pass at the kernel |
| @@ -270,20 +301,22 @@ kernel_do_compile() { | |||
| 270 | copy_initramfs | 301 | copy_initramfs |
| 271 | use_alternate_initrd=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio | 302 | use_alternate_initrd=CONFIG_INITRAMFS_SOURCE=${B}/usr/${INITRAMFS_IMAGE_NAME}.cpio |
| 272 | fi | 303 | fi |
| 304 | cc_extra=$(get_cc_option) | ||
| 273 | for typeformake in ${KERNEL_IMAGETYPE_FOR_MAKE} ; do | 305 | for typeformake in ${KERNEL_IMAGETYPE_FOR_MAKE} ; do |
| 274 | oe_runmake ${typeformake} CC="${KERNEL_CC}" LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS} $use_alternate_initrd | 306 | oe_runmake ${typeformake} CC="${KERNEL_CC} $cc_extra " LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS} $use_alternate_initrd |
| 275 | done | 307 | done |
| 276 | # vmlinux.gz is not built by kernel | 308 | # vmlinux.gz is not built by kernel |
| 277 | if (echo "${KERNEL_IMAGETYPES}" | grep -wq "vmlinux\.gz"); then | 309 | if (echo "${KERNEL_IMAGETYPES}" | grep -wq "vmlinux\.gz"); then |
| 278 | mkdir -p "${KERNEL_OUTPUT_DIR}" | 310 | mkdir -p "${KERNEL_OUTPUT_DIR}" |
| 279 | gzip -9c < ${B}/vmlinux > "${KERNEL_OUTPUT_DIR}/vmlinux.gz" | 311 | gzip -9cn < ${B}/vmlinux > "${KERNEL_OUTPUT_DIR}/vmlinux.gz" |
| 280 | fi | 312 | fi |
| 281 | } | 313 | } |
| 282 | 314 | ||
| 283 | do_compile_kernelmodules() { | 315 | do_compile_kernelmodules() { |
| 284 | unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE | 316 | unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS MACHINE |
| 285 | if (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then | 317 | if (grep -q -i -e '^CONFIG_MODULES=y$' ${B}/.config); then |
| 286 | oe_runmake -C ${B} ${PARALLEL_MAKE} modules CC="${KERNEL_CC}" LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS} | 318 | cc_extra=$(get_cc_option) |
| 319 | oe_runmake -C ${B} ${PARALLEL_MAKE} modules CC="${KERNEL_CC} $cc_extra " LD="${KERNEL_LD}" ${KERNEL_EXTRA_ARGS} | ||
| 287 | 320 | ||
| 288 | # Module.symvers gets updated during the | 321 | # Module.symvers gets updated during the |
| 289 | # building of the kernel modules. We need to | 322 | # building of the kernel modules. We need to |
