11stages :
22 - build
3+ - pack
34 - private_deploy
45 - test
56 - public_deploy
@@ -19,14 +20,16 @@ variables:
1920 BINUTILS_REF : " esp-2022r1-binutils"
2021 XTENSA_OVERLAYS_REPO : " xtensa-overlays"
2122 XTENSA_OVERLAYS_REF : " master"
22- # TODO: update vars below to tags names after related branches are merged in those repos
23+ LLVM_GCC_TESTSUITE_REF : " release_universal_clang_toolchain"
24+ # TODO: update var below to tags names after related branches are merged in those repos
25+ # XTENSA_CLANG_TOOLCHAIN_REF: "release_universal_clang_toolchain"
2326 XTENSA_CLANG_TOOLCHAIN_REF : " build_macos_arm64"
24- LLVM_GCC_TESTSUITE_REF : " feature/toolchain_build_script"
2527
2628 PLATFORM_NAME_LINUX_ARM64 : " linux-arm64"
2729 PLATFORM_NAME_LINUX : " linux-amd64"
2830 PLATFORM_NAME_WIN : " win64"
2931 PLATFORM_NAME_MACOS : " macos"
32+ PLATFORM_NAME_MACOS_ARM64 : " macos-arm64"
3033
3134 ARCHIVE_TOOL_LINUX : " tar -cJf"
3235 UNARCHIVE_TOOL_LINUX : " tar -xf"
@@ -40,6 +43,11 @@ variables:
4043 UNARCHIVE_TOOL_MACOS : " tar -xf"
4144 ARCHIVE_EXT_MACOS : " tar.xz"
4245
46+ ARCHIVE_TOOL_NEWLIB : ${ARCHIVE_TOOL_LINUX}
47+ UNARCHIVE_TOOL_NEWLIB : ${UNARCHIVE_TOOL_LINUX}
48+ ARCHIVE_EXT_NEWLIB : ${ARCHIVE_EXT_LINUX}
49+
50+ DIST_NEW_DIR : " _dist_new"
4351 DIST_DIR : " dist"
4452 BUILD_DIR : " _build"
4553 DOWNLOADS_DIR : " _downloads"
@@ -110,7 +118,19 @@ before_script:
110118 ${ARCHIVE_TOOL} ${LIBS_ARCHIVE_NAME} esp-clang/lib/libclang* esp-clang/lib/clang/${CLANG_VER}/include
111119 mkdir -p ${DISTRO_DIR}
112120 mv ${LIBS_ARCHIVE_NAME} ${DISTRO_DIR}/
113- echo "${LIBS_ARCHIVE_NAME}" > ${DISTRO_DIR}/file_lib${PLATFORM_NAME}
121+ echo "${LIBS_ARCHIVE_NAME}" > ${DISTRO_DIR}/file_libs-${PLATFORM_NAME}
122+
123+ .get_binutils : &get_binutils |
124+ git clone -b ${BINUTILS_REF} --single-branch ${GITLAB_SSH_SERVER}/idf/${BINUTILS_REPO}.git
125+ BINUTILS_PATH=$PWD/${BINUTILS_REPO}
126+
127+ .get_xtensa_overlays : &get_xtensa_overlays |
128+ git clone -b ${XTENSA_OVERLAYS_REF} --single-branch ${GITLAB_SSH_SERVER}/idf/${XTENSA_OVERLAYS_REPO}.git
129+ XTENSA_OVERLAYS_PATH=$PWD/${XTENSA_OVERLAYS_REPO}
130+
131+ .get_newlib : &get_newlib |
132+ git clone -b ${NEWLIB_REF} --single-branch ${GITLAB_SSH_SERVER}/idf/${NEWLIB_REPO}.git
133+ NEWLIB_PATH=$PWD/${NEWLIB_REPO}
114134
115135.build_template :
116136 stage : build
@@ -119,77 +139,49 @@ before_script:
119139 artifacts :
120140 paths :
121141 - ${DIST_DIR}/
122- - newlib/
123- - ${BUILD_DIR}/clang_tests.log
124- - ${BUILD_DIR}/clang_build.log
125- - ${BUILD_DIR}/newlib_build.log
142+ - ${BUILD_DIR}/tests.log
143+ - ${BUILD_DIR}/build.log
126144 when : always
127- expire_in : 3 day
145+ expire_in : 1 day
128146 variables :
129- BUILD_TOOLCHAIN_CMD_ARGS : " "
147+ BUILD_TOOLCHAIN_CMD_EXTRA_ARGS : " "
130148 # use separate dist dir for universal toolchain
131149 # TODO: remove this var after switching to universal toolchain builds
132- DIST_DIR : " dist_new "
150+ DIST_DIR : ${DIST_NEW_DIR}
133151 script :
134152 - *get_release_name
135153 - mkdir ${DOWNLOADS_DIR}
136154 - pushd ${DOWNLOADS_DIR}
137- - export ESP_GCC_TOOLCHAIN_DIST_BASE=$PWD
155+ - ESP_GCC_TOOLCHAIN_DIST_BASE=$PWD
138156 - *get_gcc_toolchain
139- - git clone -b ${BINUTILS_REF} --single-branch ${GITLAB_SSH_SERVER}/idf/${BINUTILS_REPO}.git
140- - export BINUTILS_PATH=$PWD/${BINUTILS_REPO}
141- - git clone -b ${XTENSA_OVERLAYS_REF} --single-branch ${GITLAB_SSH_SERVER}/idf/${XTENSA_OVERLAYS_REPO}.git
142- - export XTENSA_OVERLAYS_PATH=$PWD/${XTENSA_OVERLAYS_REPO}
157+ - *get_binutils
158+ - *get_xtensa_overlays
143159 - popd
144160 - *get_clang_toolchain_build_scripts
145161 - *fix_origin_remote_for_public
146- - export ESP_GCC_TOOLCHAIN_REL_VER=${GCC_REL_NAME}
147- - export LLVM_PROJECT_PATH=$PWD
148- - export BUILD_PATH=$PWD/${BUILD_DIR}
162+ - LLVM_PROJECT_PATH=$PWD
163+ - BUILD_PATH=$PWD/${BUILD_DIR}
149164 - mkdir -p ${BUILD_PATH}
150165 - export USE_PARALLEL_LINK_JOBS=2
151166 # build Clang toolchain w/o newlib
152167 - ${BUILD_TOOLCHAIN_CMD} --llvm-path=${LLVM_PROJECT_PATH}
153168 --gcc-toolchains-path=${ESP_GCC_TOOLCHAIN_DIST_BASE} --binutils-path=${BINUTILS_PATH}
154- --xtensa-overlays-path=${XTENSA_OVERLAYS_PATH} --host=${CONF_HOST} ${BUILD_TOOLCHAIN_CMD_ARGS} ${BUILD_PATH} 2>&1 > ${BUILD_PATH}/clang_build.log
155- # use just built Clang to build newlib
156- - export PATH=${BUILD_PATH}/esp-clang/bin:$PATH
157- - export BUILD_HOST=$(gcc -dumpmachine)
158- - export NEWLIB_OVERLAY_DISTRO_PATH=$PWD/newlib;
159- # build newlib overlay using ESP native (Linux) clang toolchain only
160- # it will be re-used for cross-buit toolchains (win and mac).
161- # FIXME: it would be good to move newlib overlay build to separate job and have job sequence like
162- # clang_linux_wo_newlib -> newlib_overlay -> clang_linux_full(copy newlib) -> clang_linux_unittests
163- # but we need full native (Linux) toolchain to run unittests and unittests need clang build dir.
164- # clang build dir may occupy about 2GB, so it looks too heavy to pass it as artifact
165- - if [ "${CONF_HOST}" == "${BUILD_HOST}" ]; then
166- export BUILD_NEWLIB_PATH=${BUILD_PATH}/newlib;
167- mkdir -p ${NEWLIB_OVERLAY_DISTRO_PATH};
168- git clone -b ${NEWLIB_REF} --single-branch ${GITLAB_SSH_SERVER}/idf/${NEWLIB_REPO}.git;
169- export NEWLIB_PATH=$PWD/${NEWLIB_REPO};
170- ./build-toolchain.sh --newlib-path=${NEWLIB_PATH} --xtensa-overlays-path=${XTENSA_OVERLAYS_PATH} ${BUILD_NEWLIB_PATH} 2>&1 > ${BUILD_PATH}/newlib_build.log;
171- pushd ${BUILD_NEWLIB_PATH};
172- ${ARCHIVE_TOOL_LINUX} ${NEWLIB_OVERLAY_DISTRO_PATH}/esp-clang-newlib-overlay.${ARCHIVE_EXT_LINUX} esp-clang/;
173- popd;
174- fi
175- - ${UNARCHIVE_TOOL_LINUX} ${NEWLIB_OVERLAY_DISTRO_PATH}/esp-clang-newlib-overlay.${ARCHIVE_EXT_LINUX} -C ${BUILD_PATH}
176- # strip binutils afer newlib is built
177- - STRIP_BINUTILS=YES ./build-toolchain.sh --host=${CONF_HOST} ${BUILD_PATH}
178- # Run unit tests for native build only.
169+ --xtensa-overlays-path=${XTENSA_OVERLAYS_PATH} --host=${CONF_HOST} ${BUILD_TOOLCHAIN_CMD_EXTRA_ARGS} ${BUILD_PATH} 2>&1 > ${BUILD_PATH}/build.log
170+ - BUILD_HOST=$(gcc -dumpmachine)
171+ # Do not run unit tests for cross-builds.
179172 # Run as non-root user because permission tests fail when run by root.
180173 - if [ "${CONF_HOST}" == "${BUILD_HOST}" ]; then
181174 export LLVM_BUILD_PATH=${LLVM_PROJECT_PATH}/llvm/build-Release-${CONF_HOST};
182- echo "Run unit tests for native build ib ${LLVM_BUILD_PATH}";
175+ echo "Run unit tests for native build in ${LLVM_BUILD_PATH}";
183176 useradd -m test_runner;
184177 chown -R test_runner ${LLVM_BUILD_PATH};
185- touch ${BUILD_PATH}/clang_tests .log;
186- chmod o+w ${BUILD_PATH}/clang_tests .log;
187- runuser -l test_runner -c 'cmake --build '${LLVM_BUILD_PATH}' --target check-all 2>&1 > '${BUILD_PATH}'/clang_tests .log';
178+ touch ${BUILD_PATH}/tests .log;
179+ chmod o+w ${BUILD_PATH}/tests .log;
180+ runuser -l test_runner -c 'cmake --build '${LLVM_BUILD_PATH}' --target check-all 2>&1 > '${BUILD_PATH}'/tests .log';
188181 fi
189182 - export DISTRO_DIR=$PWD/$DIST_DIR
190183 - pushd ${BUILD_PATH}
191184 - *package_toolchain
192- - *package_libs
193185 - popd
194186
195187build_x86_64-linux-gnu :
@@ -202,75 +194,195 @@ build_x86_64-linux-gnu:
202194 ARCHIVE_EXT : " ${ARCHIVE_EXT_LINUX}"
203195 BUILD_TOOLCHAIN_CMD : " ./build-toolchain.sh"
204196
205- . build_x86_64-w64-mingw32 :
197+ build_x86_64-w64-mingw32 :
206198 extends : .build_template
207199 needs :
200+ # needs native toolchain and newlib from this job
208201 - job : build_x86_64-linux-gnu
209202 before_script :
210203 - *use_ci_tools
211204 - *add_gitlab_key
212205 # get ARCHIVE_NAME for Linux release. Modify vars to make get_release_name working properly
213- - export PLATFORM_NAME_ORIG=${PLATFORM_NAME}
214- - export ARCHIVE_EXT_ORIG=${ARCHIVE_EXT}
215- - export PLATFORM_NAME=${PLATFORM_NAME_LINUX}
216- - export ARCHIVE_EXT=${ARCHIVE_EXT_LINUX}
217- - *get_release_name
218- # restore modified vars
219- - export PLATFORM_NAME=${PLATFORM_NAME_ORIG}
220- - export ARCHIVE_EXT=${ARCHIVE_EXT_ORIG}
221- # unpack Linux release to re-use it as native Clang for Windows build
206+ - CLANG_LINUX_ARCHIVE=$(cat ${DIST_DIR}/file_${PLATFORM_NAME_LINUX})
207+ # unpack x86_64-linux-gnu toolchain to re-use it as native Clang for Windows build
222208 - mkdir -p esp-clang-${PLATFORM_NAME_LINUX}
223- - ${UNARCHIVE_TOOL_LINUX} ${DIST_DIR}/${ARCHIVE_NAME } -C esp-clang-${PLATFORM_NAME_LINUX}
209+ - ${UNARCHIVE_TOOL_LINUX} ${DIST_DIR}/${CLANG_LINUX_ARCHIVE } -C esp-clang-${PLATFORM_NAME_LINUX}
224210 # we do not want to keep artifacts from 'x86_64-linux-gnu' job
225211 - rm -rf ${DIST_DIR}
226212 - rm -rf ${BUILD_DIR}
227213 # add build command args speciifc for Windows build
228- - export BUILD_TOOLCHAIN_CMD_ARGS ="--native-esp-clang-path=$PWD/esp-clang-${PLATFORM_NAME_LINUX}"
214+ - export BUILD_TOOLCHAIN_CMD_EXTRA_ARGS ="--native-esp-clang-path=$PWD/esp-clang-${PLATFORM_NAME_LINUX}"
229215 variables :
230216 CONF_HOST : " x86_64-w64-mingw32"
231217 PLATFORM_NAME : " ${PLATFORM_NAME_WIN}"
232- ARCHIVE_TOOL : " ${ARCHIVE_TOOL_WIN}"
218+ # Use Linux compressor to minimize artifact size.
219+ # Toolchain is not fully stripped yet, so may exceed max artifact size.
220+ ARCHIVE_TOOL : " ${ARCHIVE_TOOL_LINUX}"
233221 UNARCHIVE_TOOL : " ${UNARCHIVE_TOOL_WIN}"
234222 ARCHIVE_EXT : " ${ARCHIVE_EXT_WIN}"
235223 BUILD_TOOLCHAIN_CMD : " ./build-toolchain-win.sh"
236224
237225.build_apple-darwin_template :
238226 extends : .build_template
239- needs :
240- - job : build_x86_64-linux-gnu
241227 variables :
242- PLATFORM_NAME : " ${PLATFORM_NAME_MACOS}"
243228 ARCHIVE_TOOL : " ${ARCHIVE_TOOL_MACOS}"
244229 UNARCHIVE_TOOL : " ${UNARCHIVE_TOOL_MACOS}"
245230 ARCHIVE_EXT : " ${ARCHIVE_EXT_MACOS}"
246- GCC_ARCHIVE_EXT : " ${GCC_ARCHIVE_EXT_MACOS}"
247231
248232build_x86_64-apple-darwin :
249233 extends : .build_apple-darwin_template
250234 variables :
251235 CONF_HOST : " x86_64-apple-darwin21.1"
236+ PLATFORM_NAME : " ${PLATFORM_NAME_MACOS}"
252237 BUILD_TOOLCHAIN_CMD : " ./build-toolchain-macos.sh --host-arch=x86_64"
253238
254239build_aarch64-apple-darwin :
255240 extends : .build_apple-darwin_template
256241 variables :
257242 CONF_HOST : " aarch64-apple-darwin21.1"
243+ PLATFORM_NAME : " ${PLATFORM_NAME_MACOS_ARM64}"
258244 BUILD_TOOLCHAIN_CMD : " ./build-toolchain-macos.sh --host-arch=aarch64"
259245
260- .test_x86_64-linux-gnu :
261- stage : test
246+ build_newlib :
247+ stage : build
248+ tags : [ "amd64", "build" ]
249+ needs :
250+ # needs native toolchainfrom this job
251+ - job : build_x86_64-linux-gnu
252+ artifacts :
253+ paths :
254+ - ${DIST_DIR}/
255+ - ${BUILD_DIR}/build.log
256+ when : always
257+ expire_in : 1 day
258+ variables :
259+ PLATFORM_NAME : " ${PLATFORM_NAME_LINUX}"
260+ ARCHIVE_TOOL : " ${ARCHIVE_TOOL_LINUX}"
261+ UNARCHIVE_TOOL : " ${UNARCHIVE_TOOL_LINUX}"
262+ ARCHIVE_EXT : " ${ARCHIVE_EXT_LINUX}"
263+ # use separate dist dir for universal toolchain
264+ # TODO: remove this var after switching to universal toolchain builds
265+ DIST_DIR : ${DIST_NEW_DIR}
266+ script :
267+ # get ARCHIVE_NAME for Linux release.
268+ - CLANG_ARCHIVE=$PWD/${DIST_DIR}/$(cat ${DIST_DIR}/file_${PLATFORM_NAME_LINUX})
269+ - mkdir -p ${DOWNLOADS_DIR}
270+ - pushd ${DOWNLOADS_DIR}
271+ - *get_xtensa_overlays
272+ - *get_newlib
273+ # unpack clang
274+ - ${UNARCHIVE_TOOL} ${CLANG_ARCHIVE}
275+ - export PATH=$PWD/esp-clang/bin:$PATH
276+ - popd
277+ - rm -rf $PWD/${DIST_DIR}
278+ - *get_clang_toolchain_build_scripts
279+ # build newlib overlay using ESP native (Linux) clang toolchain only
280+ # it will be re-used for cross-buit toolchains (win and mac).
281+ - NEWLIB_OVERLAY_DISTRO_PATH=$PWD/${DIST_DIR}
282+ - mkdir -p ${NEWLIB_OVERLAY_DISTRO_PATH}
283+ - BUILD_PATH=$PWD/${BUILD_DIR}
284+ - mkdir -p ${BUILD_PATH}
285+ - ./build-toolchain.sh --newlib-path=${NEWLIB_PATH} --xtensa-overlays-path=${XTENSA_OVERLAYS_PATH} ${BUILD_PATH} 2>&1 > ${BUILD_PATH}/build.log
286+ - pushd ${BUILD_PATH}
287+ - ${ARCHIVE_TOOL_NEWLIB} ${NEWLIB_OVERLAY_DISTRO_PATH}/esp-clang-newlib-overlay.${ARCHIVE_EXT_NEWLIB} esp-clang/
288+ - popd
289+
290+ .pack_template :
291+ stage : pack
262292 tags : [ "amd64", "build" ]
263293 allow_failure : true
294+ artifacts :
295+ paths :
296+ - ${DIST_DIR}/
297+ when : always
298+ expire_in : 3 day
299+ variables :
300+ # use separate dist dir for universal toolchain
301+ # TODO: remove this var after switching to universal toolchain builds
302+ DIST_DIR : ${DIST_NEW_DIR}
303+ script :
304+ - *get_release_name
305+ - export BUILD_PATH=$PWD/${BUILD_DIR}
306+ - mkdir -p ${BUILD_PATH}
307+ # unpack clang
308+ - ${UNARCHIVE_TOOL} ${DIST_DIR}/${ARCHIVE_NAME} -C ${BUILD_PATH}
309+ # unpack newlib
310+ - ${UNARCHIVE_TOOL_NEWLIB} ${DIST_DIR}/esp-clang-newlib-overlay.${ARCHIVE_EXT_NEWLIB} -C ${BUILD_PATH}
311+ - rm -rf ${DIST_DIR}
312+ - *get_clang_toolchain_build_scripts
313+ # strip binutils afer newlib is built
314+ - STRIP_BINUTILS=YES ./build-toolchain.sh --host=${CONF_HOST} ${BUILD_PATH}
315+ - DISTRO_DIR=$PWD/${DIST_DIR}
316+ - pushd ${BUILD_PATH}
317+ - *package_toolchain
318+ - *package_libs
319+ - popd
320+
321+ pack_x86_64-linux-gnu :
322+ extends : .pack_template
264323 needs :
265324 - job : build_x86_64-linux-gnu
325+ - job : build_newlib
326+ variables :
327+ CONF_HOST : " x86_64-linux-gnu"
328+ PLATFORM_NAME : " ${PLATFORM_NAME_LINUX}"
329+ ARCHIVE_TOOL : " ${ARCHIVE_TOOL_LINUX}"
330+ UNARCHIVE_TOOL : " ${UNARCHIVE_TOOL_LINUX}"
331+ ARCHIVE_EXT : " ${ARCHIVE_EXT_LINUX}"
332+
333+ pack_x86_64-w64-mingw32 :
334+ extends : .pack_template
335+ needs :
336+ - job : build_x86_64-w64-mingw32
337+ - job : build_newlib
338+ variables :
339+ CONF_HOST : " x86_64-w64-mingw32"
340+ PLATFORM_NAME : " ${PLATFORM_NAME_WIN}"
341+ # use Linux compressor to save space.
342+ # upon release archive will be re-packed into zip format for uploading to GH
343+ ARCHIVE_TOOL : " ${ARCHIVE_TOOL_LINUX}"
344+ UNARCHIVE_TOOL : " ${UNARCHIVE_TOOL_LINUX}"
345+ ARCHIVE_EXT : " ${ARCHIVE_EXT_WIN}"
346+
347+ .pack_apple-darwin_template :
348+ extends : .pack_template
349+ variables :
350+ ARCHIVE_TOOL : " ${ARCHIVE_TOOL_MACOS}"
351+ UNARCHIVE_TOOL : " ${UNARCHIVE_TOOL_MACOS}"
352+ ARCHIVE_EXT : " ${ARCHIVE_EXT_MACOS}"
353+
354+ pack_x86_64-apple-darwin :
355+ extends : .pack_apple-darwin_template
356+ needs :
357+ - job : build_x86_64-apple-darwin
358+ - job : build_newlib
359+ variables :
360+ CONF_HOST : " x86_64-apple-darwin21.1"
361+ PLATFORM_NAME : " ${PLATFORM_NAME_MACOS}"
362+
363+ pack_aarch64-apple-darwin :
364+ extends : .pack_apple-darwin_template
365+ needs :
366+ - job : build_aarch64-apple-darwin
367+ - job : build_newlib
368+ variables :
369+ CONF_HOST : " aarch64-apple-darwin21.1"
370+ PLATFORM_NAME : " ${PLATFORM_NAME_MACOS_ARM64}"
371+
372+ test_x86_64-linux-gnu :
373+ stage : test
374+ tags : [ "amd64", "build" ]
375+ allow_failure : true
376+ needs :
377+ - job : pack_x86_64-linux-gnu
266378 variables :
267379 PLATFORM_NAME : " ${PLATFORM_NAME_LINUX}"
268380 ARCHIVE_TOOL : " ${ARCHIVE_TOOL_LINUX}"
269381 UNARCHIVE_TOOL : " ${UNARCHIVE_TOOL_LINUX}"
270382 ARCHIVE_EXT : " ${ARCHIVE_EXT_LINUX}"
271383 # use separate dist dir for universal toolchain
272384 # TODO: remove this var after switching to universal toolchain builds
273- DIST_DIR : " dist_new "
385+ DIST_DIR : ${DIST_NEW_DIR}
274386 script :
275387 - *get_release_name
276388 - ${UNARCHIVE_TOOL} ${DIST_DIR}/${ARCHIVE_NAME}
0 commit comments