123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- # The following additional environment variables are considered when build.config.msm.common is
- # included:
- #
- # DT_OVERLAY_SUPPORT
- # If set, then create a dtbo.img
- # BUILD_VENDOR_DLKM
- # If set, then enables creation of vendor_dlkm.img using all modules
- # not part of the first-stage ramdisk
- # EXTRA_CONFIGS
- # All files in this list are sourced
- CONFIG_DIR=arch/${ARCH}/configs
- CONFIG_TARGET=msm.${MSM_ARCH}
- ################################################################################
- ##
- function compile_external_dtc() {
- (
- # Bazel builds dtc with its own rule, so skip if building with Bazel
- if [ -n "$BUILDING_WITH_BAZEL" ]; then
- return
- fi
- OUT_DIR=${COMMON_OUT_DIR}/external/dtc
- [ "${SKIP_MRPROPER}" != "1" ] && rm -rf ${OUT_DIR}
- cd ${ROOT_DIR}/external/dtc
- DTC_MAKE_ARGS=("CC=${HOSTCC}" "AR=${AR}")
- DTC_MAKE_ARGS+=("LDFLAGS=${HOSTLDFLAGS} -fuse-ld=${LD##*.} --rtlib=compiler-rt")
- DTC_MAKE_ARGS+=("EXTRA_CFLAGS=${HOSTCFLAGS}")
- # PKG_CONFIG would pull from host environment to determine if libyaml and libpython are
- # available. We want a hermetic build that doesn't rely on host tools, so make dtc build think
- # none of these libraries are installed.
- DTC_MAKE_ARGS+=("PKG_CONFIG=false")
- make all install "${DTC_MAKE_ARGS[@]}" NO_PYTHON=1 PREFIX=${COMMON_OUT_DIR}/host
- )
- }
- append_cmd PRE_DEFCONFIG_CMDS 'compile_external_dtc'
- ################################################################################
- ## DTB general support
- DTB_DIR=vendor/qcom
- DTC_OVERLAY_TEST_EXT=ufdt_apply_overlay
- # Force /__symbols__ generation for all DTB[O]s
- DTC_FLAGS="-@"
- MAKE_GOALS+=" dtbs"
- function install_dtbs() {
- local INSTALL_DTBS_PATH="${COMMON_OUT_DIR}/dtb_staging"
- local dtb_types="${MSM_ARCH}-"
- if [ "${DT_OVERLAY_SUPPORT}" -eq "1" ]; then
- dtb_types="${dtb_types}overlays-"
- fi
- # Staging directory required because arch/$ARCH/arm64/boot/dts/**/*.dtb structure copied and
- # we want a flat directory with all the DTBs.
- rm -rf "${INSTALL_DTBS_PATH}"
- (cd ${KERNEL_DIR} && make "${TOOL_ARGS[@]}" O=${OUT_DIR} "${MAKE_ARGS[@]}" INSTALL_DTBS_PATH="${INSTALL_DTBS_PATH}" DTB_TYPES="${dtb_types}" dtbs_install)
- cp $(find ${INSTALL_DTBS_PATH} -type f \( -name "*.dtb" -o -name "*.dtbo" \)) ${DIST_DIR}
- }
- append_cmd DIST_CMDS 'install_dtbs'
- ADDITIONAL_HOST_TOOLS+=" install" # for scripts/Makefile.dtbinst
- FILES+="
- .config
- Module.symvers
- "
- ################################################################################
- ## Variant Selection
- if [ -z "${VARIANT}" ] || [ "${VARIANT}" == "default" ]; then
- VARIANT="${VARIANTS[0]}"
- fi
- if ( for v in "${VARIANTS[@]}"; do if [ "${v}" = "${VARIANT}" ]; then exit 1; fi; done; exit 0 ) ; then
- echo "Unsupported variant '${VARIANT}'"
- exit 1
- fi
- ################################################################################
- ## defconfigs
- # Helper function to let build.config files merge config fragments
- # Usage: append_cmd PRE_DEFCONFIG_CMDS 'merge_defconfig_fragment ${DEFCONFIG} ${fragment_config}'
- DEFCONFIG_FRAGMENTS=""
- function merge_defconfig_fragments() {
- if ( [ -z "${DEFCONFIG_FRAGMENTS}" ] ||
- [ "${DEFCONFIG_FRAGMENTS}" = "${DEFCONFIG}" ] ); then
- echo "No defconfig fragments for ${DEFCONFIG}"
- return
- fi
- local output=$(mktemp)
- mkdir -p $(dirname ${OUT_DIR}/arch/${ARCH}/configs/${DEFCONFIG})
- KCONFIG_CONFIG=${OUT_DIR}/arch/${ARCH}/configs/${DEFCONFIG} \
- ${KERNEL_DIR}/scripts/kconfig/merge_config.sh \
- -m -r -y ${DEFCONFIG_FRAGMENTS} | tee $output
- set +x
- if grep -q -E -e "Previous value: [^=]+=[ym]" $output; then
- echo "========================================================"
- echo "ERROR! Detected overridden config!"
- grep -C 1 -E -e "Previous value: [^=]+=[ym]" $output >&2
- rm $output
- exit 1
- fi
- local temp_config=$(mktemp)
- (cd ${KERNEL_DIR} && KCONFIG_CONFIG=${temp_config} make "${TOOL_ARGS[@]}" O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG}) 2>&1 | tee $output
- if grep -q -e "warning:" $output; then
- echo "========================================================"
- echo "ERROR! Treating config warnings as errors"
- grep -e "warning" $output >&2
- rm $output $temp_config
- exit 1
- fi
- rm $output $temp_config
- set -x
- }
- append_cmd PRE_DEFCONFIG_CMDS "merge_defconfig_fragments"
- function check_merged_defconfig() {
- if ( [ -z "${DEFCONFIG_FRAGMENTS}" ] ||
- [ "${DEFCONFIG_FRAGMENTS}" = "${DEFCONFIG}" ] ); then
- return
- fi
- local output=$(mktemp)
- ${KERNEL_DIR}/scripts/diffconfig "${OUT_DIR}/arch/${ARCH}/configs/${DEFCONFIG}" ${OUT_DIR}/.config > $output
- set +x
- # Allow CONFIG_CMDLINE changes
- if grep -q -v -E -e "^\+" -e "^CMDLINE " $output; then
- echo "========================================================"
- echo "ERROR! Defconfig fragment did not apply as expected"
- grep -v -E -e "^\+" -e "^CMDLINE " $output
- rm $output
- exit 1
- fi
- rm $output
- set -x
- }
- append_cmd POST_DEFCONFIG_CMDS "check_merged_defconfig"
- # Wrapper function around merge_defconfig_fragment to reduce repeated logic
- # Usage: apply_defconfig_fragment ${KERNEL_DIR}/cuttlefish.fragment cuttlefish-gki_defconfig
- function apply_defconfig_fragment() {
- FRAGMENT_CONFIG=$1
- if [ -z "${DEFCONFIG_FRAGMENTS}" ]; then
- DEFCONFIG_FRAGMENTS="${KERNEL_DIR}/arch/${ARCH}/configs/${DEFCONFIG}"
- fi
- DEFCONFIG_FRAGMENTS="${DEFCONFIG_FRAGMENTS} $1"
- DEFCONFIG="${2:-${DEFCONFIG}}"
- }
- ################################################################################
- ## DLKMs
- if [ -e "${KERNEL_DIR}/modules.list.${CONFIG_TARGET}" ]; then
- MODULES_LIST=${KERNEL_DIR}/modules.list.${CONFIG_TARGET}
- fi
- if [ -e "${KERNEL_DIR}/modules.blocklist.${CONFIG_TARGET}" ]; then
- MODULES_BLOCKLIST="${KERNEL_DIR}/modules.blocklist.${CONFIG_TARGET}"
- VENDOR_DLKM_MODULES_BLOCKLIST="${KERNEL_DIR}/modules.blocklist.${CONFIG_TARGET}"
- fi
- if [ "${BUILD_VENDOR_DLKM}" == "1" ]; then
- COMBINED_MODULE_LIST=$(mktemp)
- fi
- if [[ "${PREPARE_SYSTEM_DLKM}" == "1" && ! -z "${SYSTEM_DLKM_MODULES_LIST}" ]]; then
- {
- awk -F'/' '{print $NF}' ${SYSTEM_DLKM_MODULES_LIST}
- [ -f "${MODULES_LIST}" ] && cat "${MODULES_LIST}"
- } | sed -e '/^$/d' > ${COMBINED_MODULE_LIST}
- fi
- function prepare_vendor_dlkm() {
- if [ -z "${VENDOR_DLKM_MODULES_LIST}" ]; then
- local module_list_flag=
- if [ -s "${COMBINED_MODULE_LIST}" ]; then
- module_list_flag="-f ${COMBINED_MODULE_LIST}"
- elif [ -e "${MODULES_LIST}" ]; then
- module_list_flag="-f ${MODULES_LIST}"
- else
- module_list_flag="-e ''"
- fi
- (cd "${MODULES_STAGING_DIR}/lib/modules/" && find -type f -name "*.ko" -printf "%f\n") | \
- grep -w -v ${module_list_flag} - > ${MODULES_STAGING_DIR}/vendor_dlkm.modules.load
- VENDOR_DLKM_MODULES_LIST="${MODULES_STAGING_DIR}/vendor_dlkm.modules.load"
- if [[ ! -s ${VENDOR_DLKM_MODULES_LIST} ]]; then
- echo "========================================================"
- echo "WARNING: ${VENDOR_DLKM_MODULES_LIST} is empty file!"
- fi
- fi
- SUPER_IMAGE_CONTENTS+=("${DIST_DIR}/vendor_dlkm.img")
- rm ${COMBINED_MODULE_LIST}
- }
- if [ "${BUILD_VENDOR_DLKM}" == "1" ]; then
- append_cmd DIST_CMDS 'prepare_vendor_dlkm'
- if [ -e "${KERNEL_DIR}/modules.vendor_blocklist.${CONFIG_TARGET}" ]; then
- VENDOR_DLKM_MODULES_BLOCKLIST="${KERNEL_DIR}/modules.vendor_blocklist.${CONFIG_TARGET}"
- fi
- fi
- function prepare_system_dlkm() {
- if [ "${PREPARE_SYSTEM_DLKM}" == "1" ]; then
- if [ -e "${KERNEL_DIR}/modules.systemdlkm_blocklist.${CONFIG_TARGET}" ]; then
- SYSTEM_DLKM_MODULES_BLOCKLIST="${KERNEL_DIR}/modules.systemdlkm_blocklist.${CONFIG_TARGET}"
- cp $SYSTEM_DLKM_MODULES_BLOCKLIST ${DIST_DIR}/system_dlkm.modules.blocklist
- if [ "${APPEND_SYSTEM_DLKM_BLOCKLIST_TO_VENDOR_RAMDISK}" == "1" ]; then
- (cd ${DIST_DIR} && find -name system_dlkm.modules.blocklist | cpio -H newc -o) > ${DIST_DIR}/system_dlkm_blocklist.cpio
- if [ -n "${TARGET_HAS_SEPARATE_RD}" ]; then
- ${RAMDISK_COMPRESS} "${DIST_DIR}/system_dlkm_blocklist.cpio" >"${DIST_DIR}/system_dlkm_blocklist.${RAMDISK_EXT}"
- cat "${DIST_DIR}/system_dlkm_blocklist.${RAMDISK_EXT}" >>"${VENDOR_RAMDISK_BINARY}"
- else
- VENDOR_RAMDISK_BINARY+=" ${DIST_DIR}/system_dlkm_blocklist.cpio"
- fi
- fi
- fi
- SUPER_IMAGE_CONTENTS+=("${DIST_DIR}/system_dlkm.img")
- fi
- }
- append_cmd DIST_CMDS 'prepare_system_dlkm'
- KERNEL_BINARY=Image
- ################################################################################
- ## DT Overlay
- LIBUFDT_PREBUILTS_BIN=tools/libufdt/utils/src
- function make_dtbo_img() {
- mkdir -p ${DIST_DIR}/
- mkdtboimg create ${DIST_DIR}/dtbo.img --page_size=${PAGE_SIZE} ${DIST_DIR}/*.dtbo
- }
- if [ ! -z $DT_OVERLAY_SUPPORT ] && [ ! $DT_OVERLAY_SUPPORT -eq "0" ]; then
- append_cmd DIST_CMDS 'make_dtbo_img'
- fi
- ################################################################################
- ## Cating all the DTBs and create a dtb.img
- function make_dtb_img() {
- mkdir -p ${DIST_DIR}/
- mkdtboimg create ${DIST_DIR}/${MSM_ARCH}-dtb.img --page_size=${PAGE_SIZE} ${DIST_DIR}/*.dtb
- }
- if [ ! -z $DTB_IMG_CREATE ] && [ ! $DTB_IMG_CREATE -eq "0" ]; then
- append_cmd DIST_CMDS 'make_dtb_img'
- fi
- ################################################################################
- ## Cating all the DTBs and create a dtb.img for a virtual machine
- function make_vm_dtb_img() {
- mkdir -p ${DIST_DIR}/
- for i in "${!MKDTIMGDTBS[@]}"; do
- mkdtboimg create ${DIST_DIR}/${i}-dtb.img --page_size=${PAGE_SIZE} ${DIST_DIR}/${MKDTIMGDTBS[$i]}*.dtb
- done
- }
- if [ -n "$VM_DTB_IMG_CREATE" ] && [ ! "$VM_DTB_IMG_CREATE" -eq "0" ]; then
- append_cmd DIST_CMDS 'make_vm_dtb_img'
- fi
- ################################################################################
- ## Miscellaneous
- if [ -n "${EXTRA_CONFIGS}" ]; then
- for extra_config in "${EXTRA_CONFIGS[@]}"
- do
- . ${extra_config}
- done
- fi
- ################################################################################
- ## Copy prebuilt files to ${COMMON_OUT_DIR}/host/bin to be used by CI tools
- DIST_BINS="""
- build/android/merge_dtbs.py
- build/build-tools/path/linux-x86/ufdt_apply_overlay
- """
- function copy_dist_bins() (
- set +x
- set -e
- mkdir -p ${COMMON_OUT_DIR}/host/bin
- echo "Copying binaries to host/bin"
- for FILE in ${DIST_BINS}; do
- if [ -f ${ROOT_DIR}/${FILE} ]; then
- echo " $FILE"
- cp -p ${ROOT_DIR}/${FILE} ${COMMON_OUT_DIR}/host/bin/
- else
- echo " $FILE is not a file, skipping"
- fi
- done
- )
- append_cmd DIST_CMDS 'copy_dist_bins'
|