|
| 1 | +stages: |
| 2 | + - build |
| 3 | + - private_deploy |
| 4 | + - test |
| 5 | + - public_deploy |
| 6 | + |
| 7 | +image: ${CI_DOCKER_REGISTRY}/llvm-build:3 |
| 8 | + |
| 9 | +variables: |
| 10 | + |
| 11 | + CONF_TARGET: "xtensa-esp32-elf" |
| 12 | + XTENSA_CLANG_TOOLCHAIN: "${CONF_TARGET}-clang" |
| 13 | + PLATFORM_NAME_LINUX: "linux-amd64" |
| 14 | + PLATFORM_NAME_WIN: "win64" |
| 15 | + PLATFORM_NAME_MACOS: "macos" |
| 16 | + |
| 17 | + XTENSA_CLANG_TOOLCHAIN_BRANCH: "esp-20220415-r14.0.0" |
| 18 | + GCC_REL_NAME: "gcc8_4_0-esp-2021r2-patch3" |
| 19 | + |
| 20 | + ARCHIVE_TOOL_LINUX: "tar -cJf" |
| 21 | + UNARCHIVE_TOOL_LINUX: "tar -xf" |
| 22 | + ARCHIVE_EXT_LINUX: "tar.xz" |
| 23 | + |
| 24 | + ARCHIVE_TOOL_WIN: "zip -9 -r" |
| 25 | + UNARCHIVE_TOOL_WIN: "unzip" |
| 26 | + ARCHIVE_EXT_WIN: "zip" |
| 27 | + |
| 28 | + ARCHIVE_TOOL_MACOS: "tar -cJf" |
| 29 | + UNARCHIVE_TOOL_MACOS: "tar -xf" |
| 30 | + ARCHIVE_EXT_MACOS: "tar.xz" |
| 31 | + |
| 32 | + DIST_DIR: "dist" |
| 33 | + |
| 34 | +.use_ci_tools: &use_ci_tools | |
| 35 | + curl -sSL ${CIT_LOADER_URL} -o cit_loader.sh && sh cit_loader.sh |
| 36 | + source citools/import_functions |
| 37 | + |
| 38 | +.add_gitlab_key: &add_gitlab_key | |
| 39 | + cit_add_ssh_key "${GITLAB_KEY}" |
| 40 | + |
| 41 | +before_script: |
| 42 | + - *use_ci_tools |
| 43 | + - *add_gitlab_key |
| 44 | + |
| 45 | +# Prepare release name/number |
| 46 | +.get_release_name: &get_release_name | |
| 47 | + # using annotated tags |
| 48 | + REL_NUM=$(git describe --abbrev=7) |
| 49 | + REL_SFX="llvm14_0_0" |
| 50 | + REL_NAME=${CONF_TARGET}-${REL_SFX}-${REL_NUM}-${PLATFORM_NAME} |
| 51 | + ARCHIVE_NAME=${REL_NAME}.${ARCHIVE_EXT} |
| 52 | + echo "CONF_TARGET: $CONF_TARGET" |
| 53 | + echo "PLATFORM_NAME: $PLATFORM_NAME" |
| 54 | + echo "REL_NUM: $REL_NUM" |
| 55 | + echo "REL_NAME: $REL_NAME" |
| 56 | + echo "ARCHIVE_NAME: $ARCHIVE_NAME" |
| 57 | + |
| 58 | +# Get an existing crosstool-ng build for esp32 |
| 59 | +.get_gcc_toolchain: &get_gcc_toolchain | |
| 60 | + wget --no-verbose https://dl.espressif.com/github_assets/espressif/crosstool-NG/releases/download/esp-2021r2-patch3/${XTENSA_GCC_TOOLCHAIN} |
| 61 | + ${UNARCHIVE_TOOL} ${XTENSA_GCC_TOOLCHAIN} |
| 62 | + mv xtensa-esp32-elf ${XTENSA_CLANG_TOOLCHAIN} |
| 63 | + |
| 64 | +.get_clang_toolchain_build_scripts: &get_clang_toolchain_build_scripts | |
| 65 | + git clone -b ${XTENSA_CLANG_TOOLCHAIN_BRANCH} ${GITLAB_SSH_SERVER}/${XTENSA_CLANG_TOOLCHAIN_REPO} |
| 66 | + cp -r xtensa-clang-toolchain/* . |
| 67 | + |
| 68 | +# LLVM Build System used the remote address to show detailed version info, we'll change it to the public repository |
| 69 | +.fix_origin_remote_for_public: &fix_origin_remote_for_public | |
| 70 | + git remote set-url origin "${GH_REPO_HTTPS}" |
| 71 | + |
| 72 | + # Pack the toolchain |
| 73 | +.package_toolchain: &package_toolchain | |
| 74 | + ${ARCHIVE_TOOL} ${ARCHIVE_NAME} ${XTENSA_CLANG_TOOLCHAIN}/ |
| 75 | + mkdir -p ${DIST_DIR} |
| 76 | + mv ${ARCHIVE_NAME} ${DIST_DIR}/ |
| 77 | + echo "${ARCHIVE_NAME}" > ${DIST_DIR}/file_${PLATFORM_NAME}_${CONF_TARGET} |
| 78 | + |
| 79 | +.build_template: |
| 80 | + stage: build |
| 81 | + tags: [ "amd64", "build" ] |
| 82 | + artifacts: |
| 83 | + paths: |
| 84 | + - ${DIST_DIR}/ |
| 85 | + when: always |
| 86 | + expire_in: 10 day |
| 87 | + script: |
| 88 | + - *get_release_name |
| 89 | + - *get_gcc_toolchain |
| 90 | + - *fix_origin_remote_for_public |
| 91 | + - *get_clang_toolchain_build_scripts |
| 92 | + - ${BUILD_TOOLCHAIN_CMD} "${XTENSA_CLANG_TOOLCHAIN}" |
| 93 | + - *package_toolchain |
| 94 | + |
| 95 | +linux_amd64_build: |
| 96 | + extends: .build_template |
| 97 | + variables: |
| 98 | + PLATFORM_NAME: "${PLATFORM_NAME_LINUX}" |
| 99 | + ARCHIVE_TOOL: "${ARCHIVE_TOOL_LINUX}" |
| 100 | + UNARCHIVE_TOOL: "${UNARCHIVE_TOOL_LINUX}" |
| 101 | + ARCHIVE_EXT: "${ARCHIVE_EXT_LINUX}" |
| 102 | + # a filename was moved here from the global 'variables:' because of GCC_REL_NAME value couldn't be expanded and substituted there |
| 103 | + XTENSA_GCC_TOOLCHAIN: "xtensa-esp32-elf-${GCC_REL_NAME}-linux-amd64.tar.gz" |
| 104 | + BUILD_TOOLCHAIN_CMD: "./build-toolchain-linux.sh" |
| 105 | + |
| 106 | +win64_build: |
| 107 | + extends: .build_template |
| 108 | + variables: |
| 109 | + PLATFORM_NAME: "${PLATFORM_NAME_WIN}" |
| 110 | + ARCHIVE_TOOL: "${ARCHIVE_TOOL_WIN}" |
| 111 | + UNARCHIVE_TOOL: "${UNARCHIVE_TOOL_WIN}" |
| 112 | + ARCHIVE_EXT: "${ARCHIVE_EXT_WIN}" |
| 113 | + XTENSA_GCC_TOOLCHAIN: "xtensa-esp32-elf-${GCC_REL_NAME}-win64.zip" |
| 114 | + BUILD_TOOLCHAIN_CMD: "./build-toolchain-win.sh" |
| 115 | + |
| 116 | +macos_amd64_build: |
| 117 | + extends: .build_template |
| 118 | + variables: |
| 119 | + PLATFORM_NAME: "${PLATFORM_NAME_MACOS}" |
| 120 | + ARCHIVE_TOOL: "${ARCHIVE_TOOL_MACOS}" |
| 121 | + UNARCHIVE_TOOL: "${UNARCHIVE_TOOL_MACOS}" |
| 122 | + ARCHIVE_EXT: "${ARCHIVE_EXT_MACOS}" |
| 123 | + XTENSA_GCC_TOOLCHAIN: "xtensa-esp32-elf-${GCC_REL_NAME}-macos.tar.gz" |
| 124 | + BUILD_TOOLCHAIN_CMD: "./build-toolchain-macos.sh" |
| 125 | + |
| 126 | +linux_amd64_testsuite: |
| 127 | + stage: test |
| 128 | + tags: [ "amd64", "build" ] |
| 129 | + dependencies: |
| 130 | + - linux_amd64_build |
| 131 | + variables: |
| 132 | + PLATFORM_NAME: "${PLATFORM_NAME_LINUX}" |
| 133 | + ARCHIVE_TOOL: "${ARCHIVE_TOOL_LINUX}" |
| 134 | + UNARCHIVE_TOOL: "${UNARCHIVE_TOOL_LINUX}" |
| 135 | + ARCHIVE_EXT: "${ARCHIVE_EXT_LINUX}" |
| 136 | + script: |
| 137 | + - *get_release_name |
| 138 | + - ${UNARCHIVE_TOOL} ${DIST_DIR}/${ARCHIVE_NAME} |
| 139 | + |
| 140 | + # getting testsuit |
| 141 | + - git clone -b feature/ci_llvm_multitarget --depth 1 $GITLAB_SSH_SERVER/idf/llvm-xtensa-testsuite.git |
| 142 | + |
| 143 | + # preparing testsuit |
| 144 | + - export PATH=$PATH:${PWD}/${XTENSA_CLANG_TOOLCHAIN}/bin/ |
| 145 | + - cd llvm-xtensa-testsuite |
| 146 | + |
| 147 | + # qemu |
| 148 | + - ./qemu_esp32_install.sh |
| 149 | + |
| 150 | + # run testsuite for esp32 |
| 151 | + - ./run_esp32_tests.sh |
| 152 | + |
| 153 | +upload_to_http: |
| 154 | + stage: private_deploy |
| 155 | + when: manual |
| 156 | + allow_failure: true |
| 157 | + tags: [ "deploy", "shiny" ] |
| 158 | + variables: |
| 159 | + # force the fetch strategy to clean old archives up in dist/ dir |
| 160 | + GIT_STRATEGY: fetch |
| 161 | + before_script: |
| 162 | + - *use_ci_tools |
| 163 | + script: |
| 164 | + - cit_add_ssh_key "${HTTP_UPLOAD_KEY}" |
| 165 | + # List of archives |
| 166 | + - FILES=$(find ${DIST_DIR} -name file_\* -exec cat {} \+) |
| 167 | + - cd ${DIST_DIR} |
| 168 | + - scp ${FILES} ${HTTP_UPLOAD_DIR}/ct-ng/llvm-builds |
| 169 | + # Show info |
| 170 | + - echo -e "\nArchives were published there:\n\n$(for n in ${FILES}; do echo "${HTTP_PUBLIC_DIR}/ct-ng/llvm-builds/${n}"; done)\n" |
| 171 | + |
| 172 | +upload_to_github: |
| 173 | + stage: public_deploy |
| 174 | + when: manual |
| 175 | + allow_failure: true |
| 176 | + only: |
| 177 | + - tags |
| 178 | + tags: [ "amd64", "internet" ] |
| 179 | + image: espressif/github-hub:2 |
| 180 | + variables: |
| 181 | + GIT_STRATEGY: fetch |
| 182 | + GITHUB_TOKEN: "${GH_TOKEN}" |
| 183 | + GITHUB_REPO: "${GH_REPO_HTTPS}" |
| 184 | + TAG: "${CI_COMMIT_TAG}" |
| 185 | + before_script: [] |
| 186 | + script: |
| 187 | + - ls -l dist*/ |
| 188 | + - git remote add github ${GH_REPO_HTTPS} |
| 189 | + - hub release show ${TAG} || { echo "Please create a release on GitHub with ${TAG} tag at first"; exit 1; } |
| 190 | + # List of archives |
| 191 | + - FILES=$(find ${DIST_DIR} -name file_\* -exec cat {} \+) |
| 192 | + - cd ${DIST_DIR} |
| 193 | + - ls -l $FILES |
| 194 | + # Upload archives |
| 195 | + - for n in ${FILES}; do hub release edit -m "" -a "${n}" "${TAG}"; done |
0 commit comments