55usage ()
66{
77 echo " Usage: $0 [BuildArch] [CodeName] [lldbx.y] [llvmx[.y]] [--skipunmount] --rootfsdir <directory>]"
8- echo " BuildArch can be: arm(default), arm64, armel, armv6, ppc64le, riscv64, s390x, x64, x86"
8+ echo " BuildArch can be: arm(default), arm64, armel, armv6, loongarch64, ppc64le, riscv64, s390x, x64, x86"
99 echo " CodeName - optional, Code name for Linux, can be: xenial(default), zesty, bionic, alpine"
1010 echo " for alpine can be specified with version: alpineX.YY or alpineedge"
1111 echo " for FreeBSD can be: freebsd13, freebsd14"
@@ -15,6 +15,7 @@ usage()
1515 echo " llvmx[.y] - optional, LLVM version for LLVM related packages."
1616 echo " --skipunmount - optional, will skip the unmount of rootfs folder."
1717 echo " --skipsigcheck - optional, will skip package signature checks (allowing untrusted packages)."
18+ echo " --skipemulation - optional, will skip qemu and debootstrap requirement when building environment for debian based systems."
1819 echo " --use-mirror - optional, use mirror URL to fetch resources, when available."
1920 echo " --jobs N - optional, restrict to N jobs."
2021 exit 1
@@ -32,6 +33,7 @@ __QEMUArch=arm
3233__UbuntuArch=armhf
3334__UbuntuRepo=
3435__UbuntuSuites=" updates security backports"
36+ __DebianSuites=
3537__LLDB_Package=" liblldb-3.9-dev"
3638__SkipUnmount=0
3739
@@ -127,10 +129,12 @@ __AlpineKeys='
127129616adfeb:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq0BFD1D4lIxQcsqEpQzU\npNCYM3aP1V/fxxVdT4DWvSI53JHTwHQamKdMWtEXetWVbP5zSROniYKFXd/xrD9X\n0jiGHey3lEtylXRIPxe5s+wXoCmNLcJVnvTcDtwx/ne2NLHxp76lyc25At+6RgE6\nADjLVuoD7M4IFDkAsd8UQ8zM0Dww9SylIk/wgV3ZkifecvgUQRagrNUdUjR56EBZ\nraQrev4hhzOgwelT0kXCu3snbUuNY/lU53CoTzfBJ5UfEJ5pMw1ij6X0r5S9IVsy\nKLWH1hiO0NzU2c8ViUYCly4Fe9xMTFc6u2dy/dxf6FwERfGzETQxqZvSfrRX+GLj\n/QZAXiPg5178hT/m0Y3z5IGenIC/80Z9NCi+byF1WuJlzKjDcF/TU72zk0+PNM/H\nKuppf3JT4DyjiVzNC5YoWJT2QRMS9KLP5iKCSThwVceEEg5HfhQBRT9M6KIcFLSs\nmFjx9kNEEmc1E8hl5IR3+3Ry8G5/bTIIruz14jgeY9u5jhL8Vyyvo41jgt9sLHR1\n/J1TxKfkgksYev7PoX6/ZzJ1ksWKZY5NFoDXTNYUgzFUTOoEaOg3BAQKadb3Qbbq\nXIrxmPBdgrn9QI7NCgfnAY3Tb4EEjs3ON/BNyEhUENcXOH6I1NbcuBQ7g9P73kE4\nVORdoc8MdJ5eoKBpO8Ww8HECAwEAAQ==
128130616ae350:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyduVzi1mWm+lYo2Tqt/0\nXkCIWrDNP1QBMVPrE0/ZlU2bCGSoo2Z9FHQKz/mTyMRlhNqTfhJ5qU3U9XlyGOPJ\npiM+b91g26pnpXJ2Q2kOypSgOMOPA4cQ42PkHBEqhuzssfj9t7x47ppS94bboh46\nxLSDRff/NAbtwTpvhStV3URYkxFG++cKGGa5MPXBrxIp+iZf9GnuxVdST5PGiVGP\nODL/b69sPJQNbJHVquqUTOh5Ry8uuD2WZuXfKf7/C0jC/ie9m2+0CttNu9tMciGM\nEyKG1/Xhk5iIWO43m4SrrT2WkFlcZ1z2JSf9Pjm4C2+HovYpihwwdM/OdP8Xmsnr\nDzVB4YvQiW+IHBjStHVuyiZWc+JsgEPJzisNY0Wyc/kNyNtqVKpX6dRhMLanLmy+\nf53cCSI05KPQAcGj6tdL+D60uKDkt+FsDa0BTAobZ31OsFVid0vCXtsbplNhW1IF\nHwsGXBTVcfXg44RLyL8Lk/2dQxDHNHzAUslJXzPxaHBLmt++2COa2EI1iWlvtznk\nOk9WP8SOAIj+xdqoiHcC4j72BOVVgiITIJNHrbppZCq6qPR+fgXmXa+sDcGh30m6\n9Wpbr28kLMSHiENCWTdsFij+NQTd5S47H7XTROHnalYDuF1RpS+DpQidT5tUimaT\nJZDr++FjKrnnijbyNF8b98UCAwEAAQ==
129131616db30d:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnpUpyWDWjlUk3smlWeA0\nlIMW+oJ38t92CRLHH3IqRhyECBRW0d0aRGtq7TY8PmxjjvBZrxTNDpJT6KUk4LRm\na6A6IuAI7QnNK8SJqM0DLzlpygd7GJf8ZL9SoHSH+gFsYF67Cpooz/YDqWrlN7Vw\ntO00s0B+eXy+PCXYU7VSfuWFGK8TGEv6HfGMALLjhqMManyvfp8hz3ubN1rK3c8C\nUS/ilRh1qckdbtPvoDPhSbTDmfU1g/EfRSIEXBrIMLg9ka/XB9PvWRrekrppnQzP\nhP9YE3x/wbFc5QqQWiRCYyQl/rgIMOXvIxhkfe8H5n1Et4VAorkpEAXdsfN8KSVv\nLSMazVlLp9GYq5SUpqYX3KnxdWBgN7BJoZ4sltsTpHQ/34SXWfu3UmyUveWj7wp0\nx9hwsPirVI00EEea9AbP7NM2rAyu6ukcm4m6ATd2DZJIViq2es6m60AE6SMCmrQF\nwmk4H/kdQgeAELVfGOm2VyJ3z69fQuywz7xu27S6zTKi05Qlnohxol4wVb6OB7qG\nLPRtK9ObgzRo/OPumyXqlzAi/Yvyd1ZQk8labZps3e16bQp8+pVPiumWioMFJDWV\nGZjCmyMSU8V6MB6njbgLHoyg2LCukCAeSjbPGGGYhnKLm1AKSoJh3IpZuqcKCk5C\n8CM1S15HxV78s9dFntEqIokCAwEAAQ==
132+ 66ba20fe:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtfB12w4ZgqsXWZDfUAV/\n6Y4aHUKIu3q4SXrNZ7CXF9nXoAVYrS7NAxJdAodsY3vPCN0g5O8DFXR+390LdOuQ\n+HsGKCc1k5tX5ZXld37EZNTNSbR0k+NKhd9h6X3u6wqPOx7SIKxwAQR8qeeFq4pP\nrt9GAGlxtuYgzIIcKJPwE0dZlcBCg+GnptCUZXp/38BP1eYC+xTXSL6Muq1etYfg\nodXdb7Yl+2h1IHuOwo5rjgY5kpY7GcAs8AjGk3lDD/av60OTYccknH0NCVSmPoXK\nvrxDBOn0LQRNBLcAfnTKgHrzy0Q5h4TNkkyTgxkoQw5ObDk9nnabTxql732yy9BY\ns+hM9+dSFO1HKeVXreYSA2n1ndF18YAvAumzgyqzB7I4pMHXq1kC/8bONMJxwSkS\nYm6CoXKyavp7RqGMyeVpRC7tV+blkrrUml0BwNkxE+XnwDRB3xDV6hqgWe0XrifD\nYTfvd9ScZQP83ip0r4IKlq4GMv/R5shcCRJSkSZ6QSGshH40JYSoiwJf5FHbj9ND\n7do0UAqebWo4yNx63j/wb2ULorW3AClv0BCFSdPsIrCStiGdpgJDBR2P2NZOCob3\nG9uMj+wJD6JJg2nWqNJxkANXX37Qf8plgzssrhrgOvB0fjjS7GYhfkfmZTJ0wPOw\nA8+KzFseBh4UFGgue78KwgkCAwEAAQ==
130133'
131134__Keyring=
132135__KeyringFile=" /usr/share/keyrings/ubuntu-archive-keyring.gpg"
133136__SkipSigCheck=0
137+ __SkipEmulation=0
134138__UseMirror=0
135139
136140__UnprocessedBuildArgs=
@@ -179,6 +183,19 @@ while :; do
179183 __Keyring=" --keyring $__KeyringFile "
180184 fi
181185 ;;
186+ loongarch64)
187+ __BuildArch=loongarch64
188+ __AlpineArch=loongarch64
189+ __QEMUArch=loongarch64
190+ __UbuntuArch=loong64
191+ __UbuntuSuites=
192+ __DebianSuites=unreleased
193+ __LLDB_Package=" liblldb-19-dev"
194+
195+ if [[ " $__CodeName " == " sid" ]]; then
196+ __UbuntuRepo=" http://ftp.ports.debian.org/debian-ports/"
197+ fi
198+ ;;
182199 riscv64)
183200 __BuildArch=riscv64
184201 __AlpineArch=riscv64
@@ -339,10 +356,28 @@ while :; do
339356 ;;
340357 sid) # Debian sid
341358 __CodeName=sid
342- __KeyringFile= " /usr/share/keyrings/debian-archive-keyring.gpg "
359+ __UbuntuSuites=
343360
344- if [[ -z " $__UbuntuRepo " ]]; then
345- __UbuntuRepo=" http://ftp.debian.org/debian/"
361+ # Debian-Ports architectures need different values
362+ case " $__UbuntuArch " in
363+ amd64|arm64|armel|armhf|i386|mips64el|ppc64el|riscv64|s390x)
364+ __KeyringFile=" /usr/share/keyrings/debian-archive-keyring.gpg"
365+
366+ if [[ -z " $__UbuntuRepo " ]]; then
367+ __UbuntuRepo=" http://ftp.debian.org/debian/"
368+ fi
369+ ;;
370+ * )
371+ __KeyringFile=" /usr/share/keyrings/debian-ports-archive-keyring.gpg"
372+
373+ if [[ -z " $__UbuntuRepo " ]]; then
374+ __UbuntuRepo=" http://ftp.ports.debian.org/debian-ports/"
375+ fi
376+ ;;
377+ esac
378+
379+ if [[ -e " $__KeyringFile " ]]; then
380+ __Keyring=" --keyring $__KeyringFile "
346381 fi
347382 ;;
348383 tizen)
@@ -387,6 +422,9 @@ while :; do
387422 --skipsigcheck)
388423 __SkipSigCheck=1
389424 ;;
425+ --skipemulation)
426+ __SkipEmulation=1
427+ ;;
390428 --rootfsdir|-rootfsdir)
391429 shift
392430 __RootfsDir=" $1 "
@@ -419,9 +457,9 @@ case "$__AlpineVersion" in
419457 elif [[ " $__AlpineArch " == " x86" ]]; then
420458 __AlpineVersion=3.17 # minimum version that supports lldb-dev
421459 __AlpinePackages+=" llvm15-libs"
422- elif [[ " $__AlpineArch " == " riscv64" ]]; then
423- __AlpineLlvmLibsLookup=1
424- __AlpineVersion=edge # minimum version with APKINDEX.tar.gz (packages archive)
460+ elif [[ " $__AlpineArch " == " riscv64" || " $__AlpineArch " == " loongarch64 " ]]; then
461+ __AlpineVersion=3.21 # minimum version that supports lldb-dev
462+ __AlpinePackages+= " llvm19-libs "
425463 elif [[ -n " $__AlpineMajorVersion " ]]; then
426464 # use whichever alpine version is provided and select the latest toolchain libs
427465 __AlpineLlvmLibsLookup=1
@@ -505,11 +543,6 @@ if [[ "$__CodeName" == "alpine" ]]; then
505543 echo " $__ApkToolsSHA512SUM $__ApkToolsDir /apk.static" | sha512sum -c
506544 chmod +x " $__ApkToolsDir /apk.static"
507545
508- if [[ -f " /usr/bin/qemu-$__QEMUArch -static" ]]; then
509- mkdir -p " $__RootfsDir " /usr/bin
510- cp -v " /usr/bin/qemu-$__QEMUArch -static" " $__RootfsDir /usr/bin"
511- fi
512-
513546 if [[ " $__AlpineVersion " == " edge" ]]; then
514547 version=edge
515548 else
@@ -529,6 +562,10 @@ if [[ "$__CodeName" == "alpine" ]]; then
529562 __ApkSignatureArg=" --keys-dir $__ApkKeysDir "
530563 fi
531564
565+ if [[ " $__SkipEmulation " == " 1" ]]; then
566+ __NoEmulationArg=" --no-scripts"
567+ fi
568+
532569 # initialize DB
533570 # shellcheck disable=SC2086
534571 " $__ApkToolsDir /apk.static" \
@@ -550,7 +587,7 @@ if [[ "$__CodeName" == "alpine" ]]; then
550587 " $__ApkToolsDir /apk.static" \
551588 -X " http://dl-cdn.alpinelinux.org/alpine/$version /main" \
552589 -X " http://dl-cdn.alpinelinux.org/alpine/$version /community" \
553- -U $__ApkSignatureArg --root " $__RootfsDir " --arch " $__AlpineArch " \
590+ -U $__ApkSignatureArg --root " $__RootfsDir " --arch " $__AlpineArch " $__NoEmulationArg \
554591 add $__AlpinePackages
555592
556593 rm -r " $__ApkToolsDir "
@@ -745,25 +782,68 @@ elif [[ "$__CodeName" == "haiku" ]]; then
745782 popd
746783 rm -rf " $__RootfsDir /tmp"
747784elif [[ -n " $__CodeName " ]]; then
785+ if [[ " $__SkipEmulation " == " 1" ]]; then
786+ if [[ -z " $AR " ]]; then
787+ if command -v ar & > /dev/null; then
788+ AR=" $( command -v ar) "
789+ elif command -v llvm-ar & > /dev/null; then
790+ AR=" $( command -v llvm-ar) "
791+ else
792+ echo " Unable to find ar or llvm-ar on PATH, add them to PATH or set AR environment variable pointing to the available AR tool"
793+ exit 1
794+ fi
795+ fi
796+
797+ # shellcheck disable=SC2086
798+ suites=" $__CodeName $__DebianSuites $( echo $__UbuntuSuites | xargs -n 1 | xargs -I {} echo -n " $__CodeName -{} " ) "
799+
800+ PYTHON=${PYTHON_EXECUTABLE:- python3}
801+
802+ # shellcheck disable=SC2086,SC2046
803+ echo running " $PYTHON " " $__CrossDir /install-debs.py" --arch " $__UbuntuArch " --mirror " $__UbuntuRepo " --rootfsdir " $__RootfsDir " --artool " $AR " \
804+ $( echo $suites | xargs -n 1 | xargs -I {} echo -n " --suite {} " ) \
805+ $__UbuntuPackages
806+
807+ # shellcheck disable=SC2086,SC2046
808+ " $PYTHON " " $__CrossDir /install-debs.py" --arch " $__UbuntuArch " --mirror " $__UbuntuRepo " --rootfsdir " $__RootfsDir " --artool " $AR " \
809+ $( echo $suites | xargs -n 1 | xargs -I {} echo -n " --suite {} " ) \
810+ $__UbuntuPackages
811+
812+ exit 0
813+ fi
748814
815+ __UpdateOptions=
749816 if [[ " $__SkipSigCheck " == " 0" ]]; then
750817 __Keyring=" $__Keyring --force-check-gpg"
818+ else
819+ __Keyring=
820+ __UpdateOptions=" --allow-unauthenticated --allow-insecure-repositories"
751821 fi
752822
753823 # shellcheck disable=SC2086
754824 echo running debootstrap " --variant=minbase" $__Keyring --arch " $__UbuntuArch " " $__CodeName " " $__RootfsDir " " $__UbuntuRepo "
755- debootstrap " --variant=minbase" $__Keyring --arch " $__UbuntuArch " " $__CodeName " " $__RootfsDir " " $__UbuntuRepo "
756825
826+ # shellcheck disable=SC2086
827+ if ! debootstrap " --variant=minbase" $__Keyring --arch " $__UbuntuArch " " $__CodeName " " $__RootfsDir " " $__UbuntuRepo " ; then
828+ echo " debootstrap failed! dumping debootstrap.log"
829+ cat " $__RootfsDir /debootstrap/debootstrap.log"
830+ exit 1
831+ fi
832+
833+ rm -rf " $__RootfsDir " /etc/apt/* .{sources,list} " $__RootfsDir " /etc/apt/sources.list.d
757834 mkdir -p " $__RootfsDir /etc/apt/sources.list.d/"
835+
836+ # shellcheck disable=SC2086
758837 cat > " $__RootfsDir /etc/apt/sources.list.d/$__CodeName .sources" << EOF
759838Types: deb
760839URIs: $__UbuntuRepo
761- Suites: $__CodeName $( echo $__UbuntuSuites | xargs -n 1 | xargs -I {} echo -n " $__CodeName -{} " )
840+ Suites: $__CodeName $__DebianSuites $ ( echo $__UbuntuSuites | xargs -n 1 | xargs -I {} echo -n " $__CodeName -{} " )
762841Components: main universe
763842Signed-By: $__KeyringFile
764843EOF
765844
766- chroot " $__RootfsDir " apt-get update
845+ # shellcheck disable=SC2086
846+ chroot " $__RootfsDir " apt-get update $__UpdateOptions
767847 chroot " $__RootfsDir " apt-get -f -y install
768848 # shellcheck disable=SC2086
769849 chroot " $__RootfsDir " apt-get -y install $__UbuntuPackages
0 commit comments