summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYongqin Liu <yongqin.liu@linaro.org>2013-06-13 14:33:19 +0800
committerYongqin Liu <yongqin.liu@linaro.org>2013-06-13 14:33:19 +0800
commited16d5a3d669d42a94219fe9201697e43315cbd2 (patch)
treec8fc33c46380fb6f1b214b92b5cdbc5fcefc4c24
parent577cb358d7f448331c2587e0c00d33613d3526d2 (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.mk71
-rwxr-xr-xtasks/updatetarball.sh57
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