@@ -9,8 +9,8 @@ mkdir -p "$LOCAL_REPO_PATH"
99LAST_UPDATE_FILE=" $LOCAL_REPO_PATH /last-update"
1010
1111WORKFLOW_LOG_DIR=" /artifacts/workflow-logs/${GITHUB_RUN_ID} "
12- NINJA_LOG_FILE=" ${WORKFLOW_LOG_DIR} /ninja-${BUILD_ARCH} ,${BUILD_DIST} ,${BUILD_TYPE} .log"
13- BUILD_LOG_FILE=" ${WORKFLOW_LOG_DIR} /build-${BUILD_ARCH} ,${BUILD_DIST} ,${BUILD_TYPE} .log"
12+ NINJA_LOG_FILE=" ${WORKFLOW_LOG_DIR} /ninja-${BUILD_ARCH} ,${CROSS_ARCH} , ${ BUILD_DIST} ,${BUILD_TYPE} .log"
13+ BUILD_LOG_FILE=" ${WORKFLOW_LOG_DIR} /build-${BUILD_ARCH} ,${CROSS_ARCH} , ${ BUILD_DIST} ,${BUILD_TYPE} .log"
1414mkdir -p " $WORKFLOW_LOG_DIR "
1515
1616log () {
@@ -77,7 +77,7 @@ cd build
7777# Stick to clang-18, clang-19 has a regression for nilsimsa performance
7878if [[ " $BUILD_DIST " == " alpine" ]]; then
7979 GCC_VERSION=
80- CLANG_VERSION=-19
80+ CLANG_VERSION=-20
8181elif [[ " $BUILD_DIST " == " ubuntu-2204" ]]; then
8282 GCC_VERSION=-12
8383 CLANG_VERSION=-15
@@ -114,6 +114,9 @@ case "-$BUILD_TYPE-" in
114114 * -ubuntu-* |* -debian-* )
115115 export CC=gcc$GCC_VERSION CXX=g++$GCC_VERSION
116116 ;;
117+ * )
118+ export CC=gcc CXX=g++
119+ ;;
117120 esac
118121 export COMPILER=gcc
119122 ;;
@@ -182,7 +185,16 @@ esac
182185
183186case " -$BUILD_TYPE -" in
184187 * -static-* )
185- export LDFLAGS=" ${LDFLAGS} -fuse-ld=mold"
188+ case " $CROSS_ARCH " in
189+ ppc64le)
190+ # https://github.com/rui314/mold/issues/1490
191+ CMAKE_ARGS=" ${CMAKE_ARGS} -DDISABLE_MOLD=1"
192+ export LDFLAGS=" ${LDFLAGS} -fuse-ld=lld"
193+ ;;
194+ * )
195+ export LDFLAGS=" ${LDFLAGS} -fuse-ld=mold"
196+ ;;
197+ esac
186198 ;;
187199esac
188200
@@ -287,39 +299,49 @@ if [[ "-$BUILD_TYPE-" == *-shared-* ]]; then
287299fi
288300
289301if [[ " -$BUILD_TYPE -" == * -static-* ]]; then
290- if [[ " -$BUILD_TYPE -" == * -relsize-* ]]; then
291- _LIBSTDCXXDIR=" /opt/static-libs/libstdc++-Os/lib"
292- if [[ " $ARCH " == " aarch64" ]]; then
293- # Similar to the issue with *not* linking against `gcc_eh` in the CMakeLists.txt,
294- # if we link against the `gcc_eh` from the `-Os` build, we run into exactly the
295- # same issue. So we temporarily copy the size-optimized `libgcc.a` to a directory
296- # we then use for linking.
297- _GCCLIBDIR=" /tmp/gcclib"
298- mkdir -p " $_GCCLIBDIR "
299- cp -a " $_LIBSTDCXXDIR " /gcc/* /* /libgcc.a " $_GCCLIBDIR "
300- else
301- _GCCLIBDIR=$( ls -d1 $_LIBSTDCXXDIR /gcc/* /* )
302- fi
303- LDFLAGS=" ${LDFLAGS} -L$_GCCLIBDIR -L$_LIBSTDCXXDIR "
302+ # A size-optimized libgcc/libstdc++/musl will only save about 10k for the universal
303+ # and fuse-extract binaries, so we'll just stick to using the -O2 toolchain.
304+ _SYSROOT=" /opt/cross/O2"
305+ _MARCH=" ${CROSS_ARCH} "
306+ if [[ -z " $CROSS_ARCH " ]]; then
307+ _MARCH=" ${ARCH} "
304308 fi
305- export LDFLAGS= " ${LDFLAGS} -L/opt/static-libs/ $COMPILER /lib "
306- if [[ " $ARCH " == " aarch64 " ]] ; then
307- # For some reason, this dependency of libunwind is not resolved on aarch64
308- export LDFLAGS =" ${LDFLAGS} -lz "
309+ if [[ " $_MARCH " == " arm " ]] ; then
310+ _TARGET= " ${_MARCH} -linux-musleabihf "
311+ else
312+ _TARGET =" ${_MARCH} -alpine-linux-musl "
309313 fi
310- CMAKE_ARGS=" ${CMAKE_ARGS} -DSTATIC_BUILD_DO_NOT_USE=1 -DWITH_UNIVERSAL_BINARY=1 -DWITH_FUSE_EXTRACT_BINARY=1"
314+ export CC=" ${_TARGET} -${CC} "
315+ export CXX=" ${_TARGET} -${CXX} "
316+ export STRIP_TOOL=" ${_TARGET} -strip"
317+ export PATH=" $_SYSROOT /usr/bin:$PATH "
318+
319+ _staticprefix=" /opt/static-libs/$COMPILER /$_TARGET "
311320 if [[ " $BUILD_TYPE " == * -minimal-* ]]; then
312- _jemallocprefix=" /opt/static-libs/$COMPILER -jemalloc-minimal"
321+ _jemallocprefix=" /opt/static-libs/$COMPILER -jemalloc-minimal/ $_TARGET "
313322 else
314323 CMAKE_ARGS=" ${CMAKE_ARGS} -DWITH_PXATTR=1"
315- _jemallocprefix=" /opt/static-libs/$COMPILER -jemalloc-full"
324+ _jemallocprefix=" /opt/static-libs/$COMPILER -jemalloc-full/ $_TARGET "
316325 fi
317326 if [[ " $BUILD_TYPE " == * -libressl-* ]]; then
318- _sslprefix=" /opt/static-libs/$COMPILER -libressl"
327+ _sslprefix=" /opt/static-libs/$COMPILER -libressl/ $_TARGET "
319328 else
320- _sslprefix=" /opt/static-libs/$COMPILER -openssl"
329+ _sslprefix=" /opt/static-libs/$COMPILER -openssl/$_TARGET "
330+ fi
331+
332+ export LDFLAGS=" ${LDFLAGS} -static-libgcc -L$_staticprefix /lib -L$_sslprefix /lib"
333+ export CFLAGS=" ${CFLAGS} -isystem $_staticprefix /include"
334+ export CXXFLAGS=" ${CXXFLAGS} -isystem $_staticprefix /include"
335+
336+ if [[ " $_MARCH " == " i386" ]]; then
337+ export LDFLAGS=" ${LDFLAGS} -lucontext"
338+ fi
339+
340+ CMAKE_ARGS=" ${CMAKE_ARGS} -DCMAKE_SYSROOT=$_SYSROOT -DCMAKE_FIND_ROOT_PATH=$_staticprefix ;$_sslprefix ;$_jemallocprefix -DCMAKE_PREFIX_PATH=$_staticprefix ;$_sslprefix ;$_jemallocprefix -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY -DSTATIC_BUILD_DO_NOT_USE=1 -DWITH_UNIVERSAL_BINARY=1 -DWITH_FUSE_EXTRACT_BINARY=1"
341+
342+ if [[ -n " $CROSS_ARCH " ]]; then
343+ CMAKE_ARGS=" ${CMAKE_ARGS} -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=$_MARCH -DCMAKE_CROSSCOMPILING_EMULATOR=/usr/bin/qemu-$_MARCH -DFOLLY_HAVE_UNALIGNED_ACCESS=OFF -DFOLLY_HAVE_WEAK_SYMBOLS=ON -DFOLLY_HAVE_LINUX_VDSO=OFF -DFOLLY_HAVE_WCHAR_SUPPORT=OFF -DHAVE_VSNPRINTF_ERRORS=OFF"
321344 fi
322- CMAKE_ARGS=" ${CMAKE_ARGS} -DSTATIC_BUILD_EXTRA_PREFIX=/opt/static-libs/$COMPILER ;$_sslprefix ;$_jemallocprefix "
323345fi
324346
325347INSTALLDIR=" $HOME /install"
0 commit comments