|  | 
|  | 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-20211110-r13.0.0" | 
|  | 18 | +  GCC_REL_NAME: "gcc8_4_0-esp-2021r2" | 
|  | 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="llvm13_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/${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}-patch1-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