|
| 1 | +stages: |
| 2 | + - build |
| 3 | + - private_deploy |
| 4 | + - test |
| 5 | + |
| 6 | +image: ${CI_DOCKER_REGISTRY}/llvm-build:1-6ff17268 |
| 7 | + |
| 8 | +variables: |
| 9 | + |
| 10 | + CONF_TARGET: "xtensa-esp32-elf" |
| 11 | + CLANG_XTENSA_TOOLCHAIN: "${CONF_TARGET}-clang" |
| 12 | + PLATFORM_NAME: "linux-amd64" |
| 13 | + |
| 14 | + ARCHIVE_TOOL: "tar cJf" |
| 15 | + UNARCHIVE_TOOL: "tar xf" |
| 16 | + ARCHIVE_EXT: "tar.xz" |
| 17 | + |
| 18 | +.use_ci_tools: &use_ci_tools | |
| 19 | + curl -sSL ${CIT_LOADER_URL} -o cit_loader.sh && sh cit_loader.sh |
| 20 | + source citools/import_functions |
| 21 | + |
| 22 | +.add_gitlab_key: &add_gitlab_key | |
| 23 | + cit_add_ssh_key "${GITLAB_KEY}" |
| 24 | + |
| 25 | +before_script: |
| 26 | + - *use_ci_tools |
| 27 | + - *add_gitlab_key |
| 28 | + |
| 29 | +# Prepare release name/number |
| 30 | +.get_release_name: &get_release_name | |
| 31 | + # using annotated tags |
| 32 | + REL_NUM=$(git describe --abbrev=7) |
| 33 | + REL_SFX="llvm10_0_1" |
| 34 | + REL_NAME=${CONF_TARGET}-${REL_SFX}-${REL_NUM}-${PLATFORM_NAME} |
| 35 | + ARCHIVE_NAME=${REL_NAME}.${ARCHIVE_EXT} |
| 36 | + echo "CONF_TARGET: $CONF_TARGET" |
| 37 | + echo "PLATFORM_NAME: $PLATFORM_NAME" |
| 38 | + echo "REL_NUM: $REL_NUM" |
| 39 | + echo "REL_NAME: $REL_NAME" |
| 40 | + echo "ARCHIVE_NAME: $ARCHIVE_NAME" |
| 41 | + |
| 42 | +.build_clang: &build_clang | |
| 43 | + mkdir build |
| 44 | + cd build |
| 45 | + cmake ../llvm -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=Xtensa -DCMAKE_BUILD_TYPE=Release -DLLVM_EXTERNAL_CLANG_SOURCE_DIR=../clang |
| 46 | + cmake --build . -- -j8 |
| 47 | + cmake --build . --target check-llvm |
| 48 | + cd .. |
| 49 | + |
| 50 | +# Get an existing crosstool-ng build for esp32 |
| 51 | +.get_gcc_toolchain: &get_gcc_toolchain | |
| 52 | + wget https://dl.espressif.com/dl/xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz |
| 53 | + tar -xf xtensa-esp32-elf-gcc8_2_0-esp-2019r2-linux-amd64.tar.gz |
| 54 | + mv xtensa-esp32-elf ${CLANG_XTENSA_TOOLCHAIN} |
| 55 | + |
| 56 | +.build_clang_wrappers: &build_clang_wrappers | |
| 57 | + git clone ${GITLAB_SSH_SERVER}/${XTENSA_CLANG_TOOLCHAIN_REPO} |
| 58 | + cd xtensa-clang-toolchain |
| 59 | + make build_clang_wrap |
| 60 | + cd .. |
| 61 | + |
| 62 | + # Pack the toolchain |
| 63 | +.package_toolchain: &package_toolchain | |
| 64 | + ${ARCHIVE_TOOL} ${ARCHIVE_NAME} ${CLANG_XTENSA_TOOLCHAIN}/ |
| 65 | + mkdir -p dist |
| 66 | + mv ${ARCHIVE_NAME} dist/ |
| 67 | + echo "${ARCHIVE_NAME}" > dist/file_${PLATFORM_NAME}_${CONF_TARGET} |
| 68 | + |
| 69 | +build_clang_toolchain: |
| 70 | + stage: build |
| 71 | + artifacts: |
| 72 | + paths: |
| 73 | + - dist/ |
| 74 | + when: always |
| 75 | + expire_in: 10 day |
| 76 | + script: |
| 77 | + - *get_release_name |
| 78 | + - *build_clang_wrappers |
| 79 | + - *build_clang |
| 80 | + - *get_gcc_toolchain |
| 81 | + - mv build/bin/clang ${CLANG_XTENSA_TOOLCHAIN}/bin/ |
| 82 | + - mv build/bin/clang++ ${CLANG_XTENSA_TOOLCHAIN}/bin/ |
| 83 | + - mv build/bin/clang-10 ${CLANG_XTENSA_TOOLCHAIN}/bin/ |
| 84 | + - mv build/bin/clang-cl ${CLANG_XTENSA_TOOLCHAIN}/bin/ |
| 85 | + - mv build/bin/clang-cpp ${CLANG_XTENSA_TOOLCHAIN}/bin/ |
| 86 | + - mv build/bin/scan-build ${CLANG_XTENSA_TOOLCHAIN}/bin/ |
| 87 | + - mv build/libexec/* ${CLANG_XTENSA_TOOLCHAIN}/libexec/ |
| 88 | + - mv build/lib/clang ${CLANG_XTENSA_TOOLCHAIN}/lib/ |
| 89 | + - mv xtensa-clang-toolchain/xtensa-esp32-elf-clang* ${CLANG_XTENSA_TOOLCHAIN}/bin/ |
| 90 | + - *package_toolchain |
| 91 | + |
| 92 | +testsuite: |
| 93 | + stage: test |
| 94 | + dependencies: |
| 95 | + - build_clang_toolchain |
| 96 | + script: |
| 97 | + - *get_release_name |
| 98 | + - ${UNARCHIVE_TOOL} dist/${ARCHIVE_NAME} |
| 99 | + |
| 100 | + # getting testsuit |
| 101 | + - git clone -b feature/ci_llvm_multitarget --depth 1 $GITLAB_SSH_SERVER/idf/llvm-xtensa-testsuite.git |
| 102 | + |
| 103 | + # preparing testsuit |
| 104 | + - export PATH=$PATH:${PWD}/${CLANG_XTENSA_TOOLCHAIN}/bin/ |
| 105 | + - cd llvm-xtensa-testsuite |
| 106 | + |
| 107 | + # qemu |
| 108 | + - ./qemu_esp32_install.sh |
| 109 | + |
| 110 | + # run testsuite for esp32 |
| 111 | + - ./run_esp32_tests.sh |
| 112 | + |
| 113 | +upload_to_http: |
| 114 | + stage: private_deploy |
| 115 | + when: manual |
| 116 | + allow_failure: true |
| 117 | + tags: [ "deploy", "shiny" ] |
| 118 | + variables: |
| 119 | + # force the fetch strategy to clean old archives up in dist/ dir |
| 120 | + GIT_STRATEGY: fetch |
| 121 | + before_script: |
| 122 | + - *use_ci_tools |
| 123 | + script: |
| 124 | + - cit_add_ssh_key "${HTTP_UPLOAD_KEY}" |
| 125 | + # List of archives in dist/ |
| 126 | + - FILES=$(find dist -name file_\* -exec cat {} \+) |
| 127 | + - cd dist |
| 128 | + - scp ${FILES} ${HTTP_UPLOAD_DIR}/ct-ng/llvm-builds |
| 129 | + # Show info |
| 130 | + - echo -e "\nArchives were published there:\n\n$(for n in ${FILES}; do echo "${HTTP_PUBLIC_DIR}/ct-ng/llvm-builds/${n}"; done)\n" |
0 commit comments