build.sh 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #!/bin/bash
  2. # SPDX-License-Identifier: MIT
  3. set -ex
  4. # Clean up stale rebases that GitLab might not have removed when reusing a checkout dir
  5. rm -rf .git/rebase-apply
  6. . .gitlab-ci/container/container_pre_build.sh
  7. # libssl-dev was uninstalled because it was considered an ephemeral package
  8. apt-get update
  9. apt-get install -y libssl-dev
  10. # for msm header validation
  11. apt-get install -y python3-lxml
  12. if [[ "$KERNEL_ARCH" = "arm64" ]]; then
  13. GCC_ARCH="aarch64-linux-gnu"
  14. DEBIAN_ARCH="arm64"
  15. DEVICE_TREES="arch/arm64/boot/dts/rockchip/rk3399-gru-kevin.dtb"
  16. DEVICE_TREES+=" arch/arm64/boot/dts/amlogic/meson-gxl-s805x-libretech-ac.dtb"
  17. DEVICE_TREES+=" arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dtb"
  18. DEVICE_TREES+=" arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dtb"
  19. DEVICE_TREES+=" arch/arm64/boot/dts/qcom/apq8016-sbc-usb-host.dtb"
  20. DEVICE_TREES+=" arch/arm64/boot/dts/qcom/apq8096-db820c.dtb"
  21. DEVICE_TREES+=" arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dtb"
  22. DEVICE_TREES+=" arch/arm64/boot/dts/mediatek/mt8173-elm-hana.dtb"
  23. DEVICE_TREES+=" arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi-juniper-sku16.dtb"
  24. DEVICE_TREES+=" arch/arm64/boot/dts/mediatek/mt8192-asurada-spherion-r0.dtb"
  25. DEVICE_TREES+=" arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-limozeen-nots-r5.dtb"
  26. DEVICE_TREES+=" arch/arm64/boot/dts/qcom/sc7180-trogdor-kingoftown.dtb"
  27. elif [[ "$KERNEL_ARCH" = "arm" ]]; then
  28. GCC_ARCH="arm-linux-gnueabihf"
  29. DEBIAN_ARCH="armhf"
  30. DEVICE_TREES="arch/arm/boot/dts/rockchip/rk3288-veyron-jaq.dtb"
  31. DEVICE_TREES+=" arch/arm/boot/dts/allwinner/sun8i-h3-libretech-all-h3-cc.dtb"
  32. DEVICE_TREES+=" arch/arm/boot/dts/nxp/imx/imx6q-cubox-i.dtb"
  33. apt-get install -y libssl-dev:armhf
  34. else
  35. GCC_ARCH="x86_64-linux-gnu"
  36. DEBIAN_ARCH="amd64"
  37. DEVICE_TREES=""
  38. fi
  39. export ARCH=${KERNEL_ARCH}
  40. export CROSS_COMPILE="${GCC_ARCH}-"
  41. # The kernel doesn't like the gold linker (or the old lld in our debians).
  42. # Sneak in some override symlinks during kernel build until we can update
  43. # debian.
  44. mkdir -p ld-links
  45. for i in /usr/bin/*-ld /usr/bin/ld; do
  46. i=$(basename $i)
  47. ln -sf /usr/bin/$i.bfd ld-links/$i
  48. done
  49. NEWPATH=$(pwd)/ld-links
  50. export PATH=$NEWPATH:$PATH
  51. git config --global user.email "fdo@example.com"
  52. git config --global user.name "freedesktop.org CI"
  53. git config --global pull.rebase true
  54. # cleanup git state on the worker
  55. rm -rf .git/rebase-merge
  56. # Try to merge fixes from target repo
  57. if [ "$(git ls-remote --exit-code --heads ${UPSTREAM_REPO} ${TARGET_BRANCH}-external-fixes)" ]; then
  58. git pull ${UPSTREAM_REPO} ${TARGET_BRANCH}-external-fixes
  59. fi
  60. # Try to merge fixes from local repo if this isn't a merge request
  61. # otherwise try merging the fixes from the merge target
  62. if [ -z "$CI_MERGE_REQUEST_PROJECT_PATH" ]; then
  63. if [ "$(git ls-remote --exit-code --heads origin ${TARGET_BRANCH}-external-fixes)" ]; then
  64. git pull origin ${TARGET_BRANCH}-external-fixes
  65. fi
  66. else
  67. if [ "$(git ls-remote --exit-code --heads ${CI_MERGE_REQUEST_PROJECT_URL} ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}-external-fixes)" ]; then
  68. git pull ${CI_MERGE_REQUEST_PROJECT_URL} ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}-external-fixes
  69. fi
  70. fi
  71. if [[ -n "${MERGE_FRAGMENT}" ]]; then
  72. ./scripts/kconfig/merge_config.sh ${DEFCONFIG} drivers/gpu/drm/ci/${MERGE_FRAGMENT}
  73. else
  74. make `basename ${DEFCONFIG}`
  75. fi
  76. for opt in $ENABLE_KCONFIGS; do
  77. ./scripts/config --enable CONFIG_$opt
  78. done
  79. for opt in $DISABLE_KCONFIGS; do
  80. ./scripts/config --disable CONFIG_$opt
  81. done
  82. make ${KERNEL_IMAGE_NAME}
  83. mkdir -p /lava-files/
  84. for image in ${KERNEL_IMAGE_NAME}; do
  85. cp arch/${KERNEL_ARCH}/boot/${image} /lava-files/.
  86. done
  87. if [[ -n ${DEVICE_TREES} ]]; then
  88. make dtbs
  89. cp ${DEVICE_TREES} /lava-files/.
  90. fi
  91. make modules
  92. mkdir -p install/modules/
  93. INSTALL_MOD_PATH=install/modules/ make modules_install
  94. if [[ ${DEBIAN_ARCH} = "arm64" ]]; then
  95. make Image.lzma
  96. mkimage \
  97. -f auto \
  98. -A arm \
  99. -O linux \
  100. -d arch/arm64/boot/Image.lzma \
  101. -C lzma\
  102. -b arch/arm64/boot/dts/qcom/sdm845-cheza-r3.dtb \
  103. /lava-files/cheza-kernel
  104. KERNEL_IMAGE_NAME+=" cheza-kernel"
  105. # Make a gzipped copy of the Image for db410c.
  106. gzip -k /lava-files/Image
  107. KERNEL_IMAGE_NAME+=" Image.gz"
  108. fi
  109. # Pass needed files to the test stage
  110. mkdir -p install
  111. cp -rfv .gitlab-ci/* install/.
  112. cp -rfv ci/* install/.
  113. cp -rfv install/common install/ci-common
  114. cp -rfv drivers/gpu/drm/ci/* install/.
  115. . .gitlab-ci/container/container_post_build.sh
  116. if [[ "$UPLOAD_TO_MINIO" = "1" ]]; then
  117. xz -7 -c -T${FDO_CI_CONCURRENT:-4} vmlinux > /lava-files/vmlinux.xz
  118. FILES_TO_UPLOAD="$KERNEL_IMAGE_NAME vmlinux.xz"
  119. if [[ -n $DEVICE_TREES ]]; then
  120. FILES_TO_UPLOAD="$FILES_TO_UPLOAD $(basename -a $DEVICE_TREES)"
  121. fi
  122. ls -l "${S3_JWT_FILE}"
  123. for f in $FILES_TO_UPLOAD; do
  124. ci-fairy s3cp --token-file "${S3_JWT_FILE}" /lava-files/$f \
  125. https://${PIPELINE_ARTIFACTS_BASE}/${DEBIAN_ARCH}/$f
  126. done
  127. S3_ARTIFACT_NAME="kernel-files.tar.zst"
  128. tar --zstd -cf $S3_ARTIFACT_NAME install
  129. ci-fairy s3cp --token-file "${S3_JWT_FILE}" ${S3_ARTIFACT_NAME} https://${PIPELINE_ARTIFACTS_BASE}/${DEBIAN_ARCH}/${S3_ARTIFACT_NAME}
  130. echo "Download vmlinux.xz from https://${PIPELINE_ARTIFACTS_BASE}/${DEBIAN_ARCH}/vmlinux.xz"
  131. fi
  132. mkdir -p artifacts/install/lib
  133. mv install/* artifacts/install/.
  134. ln -s common artifacts/install/ci-common
  135. cp .config artifacts/${CI_JOB_NAME}_config
  136. for image in ${KERNEL_IMAGE_NAME}; do
  137. cp /lava-files/$image artifacts/install/.
  138. done
  139. tar -C artifacts -cf artifacts/install.tar install
  140. rm -rf artifacts/install