diff options
author | Yongqin Liu <yongqin.liu@linaro.org> | 2013-06-13 14:33:19 +0800 |
---|---|---|
committer | Yongqin Liu <yongqin.liu@linaro.org> | 2013-06-13 14:33:19 +0800 |
commit | ed16d5a3d669d42a94219fe9201697e43315cbd2 (patch) | |
tree | c8fc33c46380fb6f1b214b92b5cdbc5fcefc4c24 | |
parent | 577cb358d7f448331c2587e0c00d33613d3526d2 (diff) |
kernel.mk: Add Kernel CI supportlinaro-jb
Add target for combining compiled kernel related file with the existed
precompiled user space image files.
Change-Id: I40641ffadb60ec5d651c9875f3098030f096449e
Signed-off-by: Yongqin Liu <yongqin.liu@linaro.org>
-rw-r--r-- | tasks/kernel.mk | 71 | ||||
-rwxr-xr-x | tasks/updatetarball.sh | 57 |
2 files changed, 126 insertions, 2 deletions
diff --git a/tasks/kernel.mk b/tasks/kernel.mk index cc2b3a2..b07773e 100644 --- a/tasks/kernel.mk +++ b/tasks/kernel.mk @@ -32,7 +32,7 @@ ifneq ($(strip $(BUILD_TINY_ANDROID)),true) ifneq ($(wildcard $(KERNEL_SRC)/tools/perf/compat-android.h),) INCLUDE_PERF ?= 1 ifeq ($(INCLUDE_PERF),1) - PERF_DEP := $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libelf_intermediates/libelf.a $(TARGET_OUT_SHARED_LIBRARIES)/libc.so + PERF_DEP := $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libelf_intermediates/libelf.a $(PRODUCT_OUT)/obj/lib/crtend_android.o $(PRODUCT_OUT)/obj/lib/crtbegin_dynamic.o $(TARGET_OUT_SHARED_LIBRARIES)/libc.so endif endif endif @@ -75,6 +75,7 @@ ifeq ($(INCLUDE_PERF),1) export PATH=$(KERNEL_COMPILER_PATHS):$(PATH) &&\ cd $(KERNEL_SRC)/tools/perf &&\ mkdir -p $(KERNEL_OUT)/tools/perf &&\ + mkdir -p $(REALTOP)/$(PRODUCT_OUT)/system/bin/ &&\ if [ -e $(ABS_TARGET_TOOLS_PREFIX)ld.bfd ]; then LD=$(ABS_TARGET_TOOLS_PREFIX)ld.bfd; else LD=$(ABS_TARGET_TOOLS_PREFIX)ld; fi && \ $(MAKE) ANDROID_CFLAGS="$(TARGET_EXTRA_CFLAGS) $(LOCAL_CFLAGS) -isystem $(REALTOP)/bionic/libc/include -isystem $(REALTOP)/bionic/libc/kernel/common -isystem $(REALTOP)/bionic/libc/kernel/arch-arm -isystem $(REALTOP)/bionic/libc/arch-arm/include -I$(REALTOP)/external/elfutils/libelf -isystem $(REALTOP)/bionic/libm/include -isystem $(shell dirname $(ABS_TARGET_TOOLS_PREFIX))/../include -I$(KERNEL_OUT)/tools/perf" BASIC_LDFLAGS="-nostdlib -Wl,-dynamic-linker,/system/bin/linker,-z,muldefs$(shell if test $(PLATFORM_SDK_VERSION) -lt 16; then echo -ne ',-T$(REALTOP)/$(BUILD_SYSTEM)/armelf.x'; fi),-z,nocopyreloc,--no-undefined -L$(REALTOP)/$(TARGET_OUT_STATIC_LIBRARIES) -L$(REALTOP)/$(PRODUCT_OUT)/system/lib -L$(REALTOP)/external/elfutils -L$(realpath $(PRODUCT_OUT))/obj/STATIC_LIBRARIES/libelf_intermediates -lpthread -lelf -lm -lc $(REALTOP)/$(TARGET_CRTBEGIN_DYNAMIC_O) $(REALTOP)/$(TARGET_CRTEND_O)" $(KERNEL_VERBOSE) O=$(KERNEL_OUT)/tools/perf/ OUTPUT=$(KERNEL_OUT)/tools/perf/ ARCH=$(ARCH) CROSS_COMPILE=$(ABS_TARGET_TOOLS_PREFIX) LD=$$LD prefix=/system NO_DWARF=1 NO_NEWT=1 NO_LIBPERL=1 NO_LIBPYTHON=1 NO_GTK2=1 NO_STRLCPY=1 WERROR=0 && \ cp -f $(KERNEL_OUT)/tools/perf/perf $(REALTOP)/$(PRODUCT_OUT)/system/bin/ @@ -182,7 +183,6 @@ $(patsubst %,$(KERNEL_OUT)/arch/arm/boot/%,$(DTB_TARGETS)) : all_dtbs endif - $(INSTALLED_BOOTTARBALL_TARGET): $(DTB_INSTALL_TARGETS) $(INSTALLED_DTB_TARGET): $(DTB_INSTALL_TARGETS) @@ -190,3 +190,70 @@ $(INSTALLED_DTB_TARGET): $(DTB_INSTALL_TARGETS) ifeq ($(TARGET_PRODUCT), vexpress_rtsm) bootwrapper: $(DTB_INSTALL_TARGETS) endif + +kernel_files : $(INSTALLED_KERNEL_TARGET) $(DTB_INSTALL_TARGETS) android_kernel_modules + cp $(INSTALLED_KERNEL_TARGET) $(PRODUCT_OUT)/boot/ + +PREBUILT_IMAGES_DIR := $(PRODUCT_OUT)/prebuilt-images/ +$(PREBUILT_IMAGES_DIR) : + mkdir -p $(PREBUILT_IMAGES_DIR) + +ifneq ($(strip $(ANDROID_PREBUILT_URL)),) +REAL_OUT=$(realpath $(PRODUCT_OUT)) +UPDATE_TARBALL := device/linaro/common/tasks/updatetarball.sh +define update-boottarball + $(hide) echo "Target boot fs tarball: $(INSTALLED_BOOTTARBALL_TARGET)" + $(hide) $(UPDATE_TARBALL) $(FS_GET_STATS) $(PRODUCT_OUT) boot $(PRIVATE_BOOT_TAR) \ + $(INSTALLED_BOOTTARBALL_TARGET) +endef +define update-systemtarball + $(hide) echo "Target system fs tarball: $(INSTALLED_SYSTEMTARBALL_TARGET)" + $(UPDATE_TARBALL) $(FS_GET_STATS) $(PRODUCT_OUT) system $(PRIVATE_SYSTEM_TAR) \ + $(INSTALLED_SYSTEMTARBALL_TARGET) +endef + +download_prebuilt_boot_image : $(PREBUILT_IMAGES_DIR) + cd $(PREBUILT_IMAGES_DIR) &&\ + wget -nv --no-check-certificate $(ANDROID_PREBUILT_URL)/boot.tar.bz2 +download_prebuilt_system_image : $(PREBUILT_IMAGES_DIR) + cd $(PREBUILT_IMAGES_DIR) &&\ + wget -nv --no-check-certificate $(ANDROID_PREBUILT_URL)/system.tar.bz2 +download_prebuilt_userdata_image : $(PREBUILT_IMAGES_DIR) + cd $(PREBUILT_IMAGES_DIR) &&\ + wget -nv --no-check-certificate $(ANDROID_PREBUILT_URL)/userdata.tar.bz2 + +PRIVATE_BOOT_TAR := $(boot_tar) +## do we need to generate the cmdline and uInitrd +## or use the old cmdline and uInitrd +## here use the old cmdline and uInitrd first +# tar xvf boot.tar boot/uInitrd &&\ +# cp -f boot/uInitrd $(REAL_OUT)/uInitrd +$(PRIVATE_BOOT_TAR): download_prebuilt_boot_image + rm -fr $(PRODUCT_OUT)/boot.tar &&\ + cd $(PREBUILT_IMAGES_DIR) &&\ + bunzip2 --keep boot.tar.bz2 &&\ + mv boot.tar $(REAL_OUT)/ + +COMBINED_BOOTTARBALL_TARGET : $(PRIVATE_BOOT_TAR) $(FS_GET_STATS) kernel_files + $(update-boottarball) + +PRIVATE_SYSTEM_TAR := $(system_tar) +$(PRIVATE_SYSTEM_TAR): download_prebuilt_system_image + rm -fr $(PRODUCT_OUT)/system.tar &&\ + cd $(PREBUILT_IMAGES_DIR) &&\ + bunzip2 --keep system.tar.bz2 &&\ + mv system.tar $(REAL_OUT)/ +COMBINED_SYSTEMTARBALL_TARGET : $(PRIVATE_SYSTEM_TAR) $(FS_GET_STATS) kernel_files + $(update-systemtarball) + +COMBINED_USERDATATARBALL_TARGET : download_prebuilt_userdata_image + cp -uvf $(PREBUILT_IMAGES_DIR)/userdata.tar.bz2 $(REAL_OUT)/ + +combine_kernel_prebuilt: COMBINED_BOOTTARBALL_TARGET COMBINED_SYSTEMTARBALL_TARGET COMBINED_USERDATATARBALL_TARGET + if [ -d $(REALTOP)/build-info ]; then find $(REALTOP)/build-info/ -iname BUILD-INFO.txt -exec cp {} $(REAL_OUT)/ \; ; fi + +else +combine_kernel_prebuilt : + $(error ANDROID_PREBUILT_URL need to be set for using this combine_kernel_prebuilt target.) + +endif diff --git a/tasks/updatetarball.sh b/tasks/updatetarball.sh new file mode 100755 index 0000000..611f2a4 --- /dev/null +++ b/tasks/updatetarball.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +# $1: path to fs_get_stats program +# $2: start dir +# $3: subdir to tar up (from $2) +# $4: target tar name +# $5: target tarball name (usually $(3).bz2) + +if [ $# -ne 5 ]; then + echo "Error: wrong number of arguments in cmd: $0 $* " + exit 1 +fi + +fs_get_stats=`readlink -f $1` +start_dir=`readlink -f $2` +dir_to_tar=$3 +target_tar=`readlink -f $4` +target_tarball=`readlink -f $5` + +cd $2 + +# do dirs first +subdirs=`find ${dir_to_tar} -type d -print` +files=`find ${dir_to_tar} \! -type d -print` +for f in ${subdirs} ${files} ; do + curr_perms=`stat -c 0%a $f` + [ -d "$f" ] && is_dir=1 || is_dir=0 + new_info=`${fs_get_stats} ${curr_perms} ${is_dir} ${f}` + new_uid=`echo ${new_info} | awk '{print $1;}'` + new_gid=`echo ${new_info} | awk '{print $2;}'` + new_perms=`echo ${new_info} | awk '{print $3;}'` +# echo "$f: dir: $is_dir curr: $curr_perms uid: $new_uid gid: $new_gid "\ +# "perms: $new_perms" + # delete the duplicated entry of the same file, and then add it to the package + # but will not delete the directory otherwise it will other files + [ -d "$f" ] || tar --delete ${f} -vf ${target_tar} + tar --no-recursion --numeric-owner --owner $new_uid \ + --group $new_gid --mode $new_perms -p -uf ${target_tar} ${f} +done + +if [ $? -eq 0 ] ; then + case "${target_tarball}" in + *.bz2 ) + bzip2 -c ${target_tar} > ${target_tarball} + ;; + *.gz ) + gzip -c ${target_tar} > ${target_tarball} + ;; + esac + success=$? + [ $success -eq 0 ] || rm -f ${target_tarball} + rm -f ${target_tar} + exit $success +fi + +rm -f ${target_tar} +exit 1 |