@ -8,11 +8,13 @@ usage()
echo "BuildArch can be: arm(default), arm64, armel, armv6, ppc64le, riscv64, s390x, x64, x86"
echo "CodeName - optional, Code name for Linux, can be: xenial(default), zesty, bionic, alpine, alpine3.13 or alpine3.14. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen."
echo " for FreeBSD can be: freebsd12, freebsd13"
echo " for illumos can be: illumos."
echo " for illumos can be: illumos"
echo " for Haiku can be: haiku."
echo "lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine and FreeBSD"
echo "llvmx[.y] - optional, LLVM version for LLVM related packages."
echo "--skipunmount - optional, will skip the unmount of rootfs folder."
echo "--use-mirror - optional, use mirror URL to fetch resources, when available."
echo "--jobs N - optional, restrict to N jobs."
exit 1
}
@ -79,6 +81,17 @@ __IllumosPackages+=" mit-krb5-1.16.2nb4"
__IllumosPackages += " openssl-1.1.1e"
__IllumosPackages += " zlib-1.2.11"
__HaikuPackages = "gmp"
__HaikuPackages += " gmp_devel"
__HaikuPackages += " krb5"
__HaikuPackages += " krb5_devel"
__HaikuPackages += " libiconv"
__HaikuPackages += " libiconv_devel"
__HaikuPackages += " llvm12_libunwind"
__HaikuPackages += " llvm12_libunwind_devel"
__HaikuPackages += " mpfr"
__HaikuPackages += " mpfr_devel"
# ML.NET dependencies
__UbuntuPackages += " libomp5"
__UbuntuPackages += " libomp-dev"
@ -263,6 +276,11 @@ while :; do
__CodeName = illumos
__SkipUnmount = 1
; ;
haiku)
__CodeName = haiku
__BuildArch = x64
__SkipUnmount = 1
; ;
--skipunmount)
__SkipUnmount = 1
; ;
@ -273,6 +291,10 @@ while :; do
--use-mirror)
__UseMirror = 1
; ;
--use-jobs)
shift
MAXJOBS = $1
; ;
*)
__UnprocessedBuildArgs = " $__UnprocessedBuildArgs $1 "
; ;
@ -326,7 +348,7 @@ if [[ "$__CodeName" == "alpine" ]]; then
rm -r " $__ApkToolsDir "
elif [ [ " $__CodeName " = = "freebsd" ] ] ; then
mkdir -p " $__RootfsDir " /usr/local/etc
JOBS = "$( getconf _NPROCESSORS_ONLN) "
JOBS = ${ MAXJOBS : = "$( getconf _NPROCESSORS_ONLN) " }
wget -O - " https://download.freebsd.org/ftp/releases/ ${ __FreeBSDArch } / ${ __FreeBSDMachineArch } / ${ __FreeBSDBase } /base.txz " | tar -C " $__RootfsDir " -Jxf - ./lib ./usr/lib ./usr/libdata ./usr/include ./usr/share/keys ./etc ./bin/freebsd-version
echo " ABI = \"FreeBSD: ${ __FreeBSDABI } : ${ __FreeBSDMachineArch } \"; FINGERPRINTS = \" ${ __RootfsDir } /usr/share/keys\"; REPOS_DIR = [\" ${ __RootfsDir } /etc/pkg\"]; REPO_AUTOUPDATE = NO; RUN_SCRIPTS = NO; " > " ${ __RootfsDir } " /usr/local/etc/pkg.conf
echo " FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly\", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \" ${ __RootfsDir } /usr/share/keys/pkg\", enabled: yes } " > " ${ __RootfsDir } " /etc/pkg/FreeBSD.conf
@ -344,7 +366,7 @@ elif [[ "$__CodeName" == "freebsd" ]]; then
elif [ [ " $__CodeName " = = "illumos" ] ] ; then
mkdir " $__RootfsDir /tmp "
pushd " $__RootfsDir /tmp "
JOBS = "$( getconf _NPROCESSORS_ONLN) "
JOBS = ${ MAXJOBS : = "$( getconf _NPROCESSORS_ONLN) " }
echo "Downloading sysroot."
wget -O - https://github.com/illumos/sysroot/releases/download/20181213-de6af22ae73b-v1/illumos-sysroot-i386-20181213-de6af22ae73b-v1.tar.gz | tar -C " $__RootfsDir " -xzf -
echo "Building binutils. Please wait.."
@ -386,6 +408,70 @@ elif [[ "$__CodeName" == "illumos" ]]; then
wget -P " $__RootfsDir " /usr/include/net https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/io/bpf/net/dlt.h
wget -P " $__RootfsDir " /usr/include/netpacket https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/inet/sockmods/netpacket/packet.h
wget -P " $__RootfsDir " /usr/include/sys https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/sys/sdt.h
elif [ [ " $__CodeName " = = "haiku" ] ] ; then
JOBS = ${ MAXJOBS : = " $( getconf _NPROCESSORS_ONLN) " }
echo "Building Haiku sysroot for x86_64"
mkdir -p " $__RootfsDir /tmp "
cd " $__RootfsDir /tmp "
git clone -b hrev56235 https://review.haiku-os.org/haiku
git clone -b btrev43195 https://review.haiku-os.org/buildtools
cd " $__RootfsDir /tmp/buildtools " && git checkout 7487388f5110021d400b9f3b88e1a7f310dc066d
# Fetch some unmerged patches
cd " $__RootfsDir /tmp/haiku "
## Add development build profile (slimmer than nightly)
git fetch origin refs/changes/64/4164/1 && git -c commit.gpgsign= false cherry-pick FETCH_HEAD
# Build jam
cd " $__RootfsDir /tmp/buildtools/jam "
make
# Configure cross tools
echo "Building cross-compiler"
mkdir -p " $__RootfsDir /generated "
cd " $__RootfsDir /generated "
" $__RootfsDir /tmp/haiku/configure " -j" $JOBS " --sysroot " $__RootfsDir " --cross-tools-source " $__RootfsDir /tmp/buildtools " --build-cross-tools x86_64
# Build Haiku packages
echo "Building Haiku"
echo 'HAIKU_BUILD_PROFILE = "development-raw" ;' > UserProfileConfig
" $__RootfsDir /tmp/buildtools/jam/jam0 " -j" $JOBS " -q '<build>package' '<repository>Haiku'
BaseUrl = "https://depot.haiku-os.org/__api/v2/pkg/get-pkg"
# Download additional packages
echo "Downloading additional required packages"
read -ra array <<< " $__HaikuPackages "
for package in " ${ array [@] } " ; do
echo " Downloading $package ... "
# API documented here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L60
# The schema here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L598
hpkgDownloadUrl = " $( wget -qO- --post-data= '{"name":"' " $package " '","repositorySourceCode":"haikuports_x86_64","versionType":"LATEST","naturalLanguageCode":"en"}' \
--header= 'Content-Type:application/json' " $BaseUrl " | jq -r '.result.versions[].hpkgDownloadURL' ) "
wget -P " $__RootfsDir /generated/download " " $hpkgDownloadUrl "
done
# Setup the sysroot
echo "Setting up sysroot and extracting needed packages"
mkdir -p " $__RootfsDir /boot/system "
for file in " $__RootfsDir /generated/objects/haiku/x86_64/packaging/packages/ " *.hpkg; do
" $__RootfsDir /generated/objects/linux/x86_64/release/tools/package/package " extract -C " $__RootfsDir /boot/system " " $file "
done
for file in " $__RootfsDir /generated/download/ " *.hpkg; do
" $__RootfsDir /generated/objects/linux/x86_64/release/tools/package/package " extract -C " $__RootfsDir /boot/system " " $file "
done
# Cleaning up temporary files
echo "Cleaning up temporary files"
rm -rf " $__RootfsDir /tmp "
for name in " $__RootfsDir /generated/ " *; do
if [ [ " $name " = ~ "cross-tools-" ] ] ; then
: # Keep the cross-compiler
else
rm -rf " $name "
fi
done
elif [ [ -n " $__CodeName " ] ] ; then
qemu-debootstrap $__Keyring --arch " $__UbuntuArch " " $__CodeName " " $__RootfsDir " " $__UbuntuRepo "
cp " $__CrossDir / $__BuildArch /sources.list. $__CodeName " " $__RootfsDir /etc/apt/sources.list "