fix(cros-kernel2.eclass): Remove a massive amount of dead code.

We do not currently support or care about things like arm, device trees,
smatch, and other things that massively complicate this eclass. Remove
them so making further changes is simple. Features can always be added
back later.
This commit is contained in:
Michael Marineau 2013-11-14 18:08:39 -08:00
parent 76e8f257ab
commit c1039fbcfa
2 changed files with 14 additions and 305 deletions

View File

@ -3,7 +3,7 @@
[[ ${EAPI} != "4" ]] && die "Only EAPI=4 is supported"
inherit binutils-funcs cros-board toolchain-funcs
inherit cros-workon toolchain-funcs
HOMEPAGE="http://www.chromium.org/"
LICENSE="GPL-2"
@ -12,7 +12,7 @@ SLOT="0"
DEPEND="sys-apps/debianutils
"
IUSE="-device_tree -kernel_sources"
IUSE="-kernel_sources"
STRIP_MASK="/usr/lib/debug/boot/vmlinux"
# Build out-of-tree and incremental by default, but allow an ebuild inheriting
@ -91,124 +91,6 @@ install_kernel_sources() {
"${D}/${dest_build_dir}/Makefile" || die
}
get_build_cfg() {
echo "$(cros-workon_get_build_dir)/.config"
}
get_boot_kernel() {
if [[ "${PN}" =~ boot ]] ; then
echo "true"
else
echo "false"
fi
}
get_build_arch() {
if [ "${ARCH}" = "arm" ] ; then
case "${CHROMEOS_KERNEL_SPLITCONFIG}" in
*tegra*)
echo "tegra"
;;
*exynos*)
echo "exynos5"
;;
*)
echo "arm"
;;
esac
else
echo $(tc-arch-kernel)
fi
}
# @FUNCTION: cros_chkconfig_present
# @USAGE: <option to check config for>
# @DESCRIPTION:
# Returns success of the provided option is present in the build config.
cros_chkconfig_present() {
local config=$1
grep -q "^CONFIG_$1=[ym]$" "$(get_build_cfg)"
}
cros-kernel2_pkg_setup() {
# This is needed for running src_test(). The kernel code will need to
# be rebuilt with `make check`. If incremental build were enabled,
# `make check` would have nothing left to build.
use test && export CROS_WORKON_INCREMENTAL_BUILD=0
cros-workon_pkg_setup
}
# @FUNCTION: emit_its_script
# @USAGE: <output file> <boot_dir> <dtb_dir> <device trees>
# @DESCRIPTION:
# Emits the its script used to build the u-boot fitImage kernel binary
# that contains the kernel as well as device trees used when booting
# it.
emit_its_script() {
local iter=1
local its_out=${1}
shift
local boot_dir=${1}
shift
local dtb_dir=${1}
shift
cat > "${its_out}" <<-EOF || die
/dts-v1/;
/ {
description = "Chrome OS kernel image with one or more FDT blobs";
#address-cells = <1>;
images {
kernel@1 {
data = /incbin/("${boot_dir}/zImage");
type = "$(get_kernel_type)";
arch = "arm";
os = "linux";
compression = "none";
load = <$(get_load_addr)>;
entry = <$(get_load_addr)>;
};
EOF
local dtb
for dtb in "$@" ; do
cat >> "${its_out}" <<-EOF || die
fdt@${iter} {
description = "$(basename ${dtb})";
data = /incbin/("${dtb_dir}/${dtb}");
type = "flat_dt";
arch = "arm";
compression = "none";
hash@1 {
algo = "sha1";
};
};
EOF
((++iter))
done
cat <<-EOF >>"${its_script}"
};
configurations {
default = "conf@1";
EOF
local i
for i in $(seq 1 $((iter-1))) ; do
cat >> "${its_out}" <<-EOF || die
conf@${i} {
kernel = "kernel@1";
fdt = "fdt@${i}";
};
EOF
done
echo " };" >> "${its_out}"
echo "};" >> "${its_out}"
}
kmake() {
local kernel_arch=$(tc-arch-kernel)
@ -216,16 +98,6 @@ kmake() {
# Hack for using 64-bit kernel with 32-bit user-space
if [[ "${ABI:-${ARCH}}" != "amd64" && "${kernel_arch}" == "x86_64" ]]; then
cross=x86_64-cros-linux-gnu-
else
# TODO(raymes): Force GNU ld over gold. There are still some
# gold issues to iron out. See: 13209.
tc-export LD CC CXX
set -- \
LD="$(get_binutils_path_ld)/ld" \
CC="${CC} -B$(get_binutils_path_ld)" \
CXX="${CXX} -B$(get_binutils_path_ld)" \
"$@"
fi
cw_emake \
@ -236,201 +108,38 @@ kmake() {
"$@"
}
cros-kernel2_src_prepare() {
cros-workon_src_prepare
}
cros-kernel2_src_unpack() {
cros-workon_src_unpack
cros-kernel2_src_configure() {
local config="$(find_defconfig)"
elog "Using kernel config: ${config}"
cp -f "${config}" "$(get_build_cfg)" || die
cp -f "${config}" "$(cros-workon_get_build_dir)/.config" || die
# copy the cpio initrd to the output build directory so we can tack it
# onto the kernel image itself.
cp "${ROOT}"/usr/share/bootengine/bootengine.cpio "$(cros-workon_get_build_dir)" || die "copy of dracut cpio failed."
cp "${ROOT}"/usr/share/bootengine/bootengine.cpio \
"$(cros-workon_get_build_dir)" || die "copy of dracut cpio failed."
}
cros-kernel2_src_configure() {
# Use default for any options not explitly set in defconfig
yes "" | kmake oldconfig
}
# @FUNCTION: get_dtb_name
# @USAGE: <dtb_dir>
# @DESCRIPTION:
# Get the name(s) of the device tree binary file(s) to include.
get_dtb_name() {
local dtb_dir=${1}
local board_with_variant=$(get_current_board_with_variant)
# Do a simple mapping for device trees whose names don't match
# the board_with_variant format; default to just the
# board_with_variant format.
case "${board_with_variant}" in
(tegra2_dev-board)
echo tegra-harmony.dtb
;;
(tegra2_seaboard)
echo tegra-seaboard.dtb
;;
tegra*)
echo ${board_with_variant}.dtb
;;
*)
local f
for f in ${dtb_dir}/*.dtb ; do
basename ${f}
done
;;
esac
}
# All current tegra boards ship with an u-boot that won't allow
# use of kernel_noload. Because of this, keep using the traditional
# kernel type for those. This means kernel_type kernel and regular
# load and entry point addresses.
get_kernel_type() {
case "$(get_current_board_with_variant)" in
tegra*)
echo kernel
;;
*)
echo kernel_noload
;;
esac
}
get_load_addr() {
case "$(get_current_board_with_variant)" in
tegra*)
echo 0x03000000
;;
*)
echo 0
;;
esac
}
cros-kernel2_src_compile() {
local build_targets=() # use make default target
if use arm; then
build_targets=(
"uImage"
$(cros_chkconfig_present MODULES && echo "modules")
)
fi
local src_dir="$(cros-workon_get_build_dir)/source"
SMATCH_ERROR_FILE="${src_dir}/chromeos/check/smatch_errors.log"
if use test && [[ -e "${SMATCH_ERROR_FILE}" ]]; then
local make_check_cmd="smatch -p=kernel"
local test_options=(
CHECK="${make_check_cmd}"
C=1
)
SMATCH_LOG_FILE="$(cros-workon_get_build_dir)/make.log"
# The path names in the log file are build-dependent. Strip out
# the part of the path before "kernel/files" and retains what
# comes after it: the file, line number, and error message.
kmake -k ${build_targets[@]} "${test_options[@]}" |& \
tee "${SMATCH_LOG_FILE}"
else
kmake -k ${build_targets[@]}
fi
if use device_tree; then
kmake -k dtbs
fi
}
cros-kernel2_src_test() {
[[ -e ${SMATCH_ERROR_FILE} ]] || \
die "smatch whitelist file ${SMATCH_ERROR_FILE} not found!"
[[ -e ${SMATCH_LOG_FILE} ]] || \
die "Log file from src_compile() ${SMATCH_LOG_FILE} not found!"
grep -w error: "${SMATCH_LOG_FILE}" | grep -o "kernel/files/.*" \
| sed s:"kernel/files/"::g > "${SMATCH_LOG_FILE}.errors"
local num_errors=$(wc -l < "${SMATCH_LOG_FILE}.errors")
local num_warnings=$(egrep -wc "warn:|warning:" "${SMATCH_LOG_FILE}")
einfo "smatch found ${num_errors} errors and ${num_warnings} warnings."
# Create a version of the error database that doesn't have line numbers,
# since line numbers will shift as code is added or removed.
local build_dir="$(cros-workon_get_build_dir)"
local no_line_numbers_file="${build_dir}/no_line_numbers.log"
sed -r "s/(:[0-9]+){1,2}//" "${SMATCH_ERROR_FILE}" > \
"${no_line_numbers_file}"
# For every smatch error that came up during the build, check if it is
# in the error database file.
local num_unknown_errors=0
local line=""
while read line; do
local no_line_num=$(echo "${line}" | \
sed -r "s/(:[0-9]+){1,2}//")
if ! fgrep -q "${no_line_num}" "${no_line_numbers_file}"; then
eerror "Non-whitelisted error found: \"${line}\""
: $(( ++num_unknown_errors ))
fi
done < "${SMATCH_LOG_FILE}.errors"
[[ ${num_unknown_errors} -eq 0 ]] || \
die "smatch found ${num_unknown_errors} unknown errors."
kmake
}
cros-kernel2_src_install() {
dodir /boot
kmake INSTALL_PATH="${D}/boot" install
if cros_chkconfig_present MODULES; then
kmake INSTALL_MOD_PATH="${D}" modules_install
fi
kmake INSTALL_MOD_PATH="${D}" modules_install
local version=$(kernelversion)
if use arm; then
local boot_dir="$(cros-workon_get_build_dir)/arch/${ARCH}/boot"
local kernel_bin="${D}/boot/vmlinuz-${version}"
local zimage_bin="${D}/boot/zImage-${version}"
local dtb_dir="${boot_dir}"
# Newer kernels (after linux-next 12/3/12) put dtbs in the dts
# dir. Use that if we we find no dtbs directly in boot_dir.
# Note that we try boot_dir first since the newer kernel will
# actually rm ${boot_dir}/*.dtb so we'll have no stale files.
if ! ls "${dtb_dir}"/*.dtb &> /dev/null; then
dtb_dir="${boot_dir}/dts"
fi
if use device_tree; then
local its_script="$(cros-workon_get_build_dir)/its_script"
emit_its_script "${its_script}" "${boot_dir}" \
"${dtb_dir}" $(get_dtb_name "${dtb_dir}")
mkimage -f "${its_script}" "${kernel_bin}" || die
else
cp -a "${boot_dir}/uImage" "${kernel_bin}" || die
fi
cp -a "${boot_dir}/zImage" "${zimage_bin}" || die
# TODO(vbendeb): remove the below .uimg link creation code
# after the build scripts have been modified to use the base
# image name.
cd $(dirname "${kernel_bin}")
ln -sf $(basename "${kernel_bin}") vmlinux.uimg || die
ln -sf $(basename "${zimage_bin}") zImage || die
fi
if [ ! -e "${D}/boot/vmlinuz" ]; then
ln -sf "vmlinuz-${version}" "${D}/boot/vmlinuz" || die
fi
# Check the size of kernel image and issue warning when image size is near
# the limit. For factory install initramfs, we don't care about kernel
# size limit as the image is downloaded over network.
local kernel_image_size=$(stat -c '%s' -L "${D}"/boot/vmlinuz)
einfo "Kernel image size is ${kernel_image_size} bytes."
# Install uncompressed kernel for debugging purposes.
insinto /usr/lib/debug/boot/${version}/
doins "$(cros-workon_get_build_dir)/vmlinux"
@ -440,4 +149,4 @@ cros-kernel2_src_install() {
fi
}
EXPORT_FUNCTIONS pkg_setup src_prepare src_configure src_compile src_test src_install
EXPORT_FUNCTIONS src_unpack src_configure src_compile src_install

View File

@ -19,8 +19,8 @@ DESCRIPTION="CoreOS kernel"
HOMEPAGE="http://www.kernel.org"
SRC_URI="${KERNEL_URI}"
KEYWORDS="amd64 arm x86"
IUSE="deblob"
KEYWORDS="amd64 x86"
IUSE=""
src_prepare() {
epatch "${FILESDIR}"/no_firmware.patch