@@ -8,11 +8,13 @@ usage()
8
8
echo " BuildArch can be: arm(default), arm64, armel, armv6, ppc64le, riscv64, s390x, x64, x86"
9
9
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."
10
10
echo " for FreeBSD can be: freebsd12, freebsd13"
11
- echo " for illumos can be: illumos."
11
+ echo " for illumos can be: illumos"
12
+ echo " for Haiku can be: haiku."
12
13
echo " lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine and FreeBSD"
13
14
echo " llvmx[.y] - optional, LLVM version for LLVM related packages."
14
15
echo " --skipunmount - optional, will skip the unmount of rootfs folder."
15
16
echo " --use-mirror - optional, use mirror URL to fetch resources, when available."
17
+ echo " --jobs N - optional, restrict to N jobs."
16
18
exit 1
17
19
}
18
20
@@ -79,6 +81,17 @@ __IllumosPackages+=" mit-krb5-1.16.2nb4"
79
81
__IllumosPackages+=" openssl-1.1.1e"
80
82
__IllumosPackages+=" zlib-1.2.11"
81
83
84
+ __HaikuPackages=" gmp"
85
+ __HaikuPackages+=" gmp_devel"
86
+ __HaikuPackages+=" krb5"
87
+ __HaikuPackages+=" krb5_devel"
88
+ __HaikuPackages+=" libiconv"
89
+ __HaikuPackages+=" libiconv_devel"
90
+ __HaikuPackages+=" llvm12_libunwind"
91
+ __HaikuPackages+=" llvm12_libunwind_devel"
92
+ __HaikuPackages+=" mpfr"
93
+ __HaikuPackages+=" mpfr_devel"
94
+
82
95
# ML.NET dependencies
83
96
__UbuntuPackages+=" libomp5"
84
97
__UbuntuPackages+=" libomp-dev"
@@ -263,6 +276,11 @@ while :; do
263
276
__CodeName=illumos
264
277
__SkipUnmount=1
265
278
;;
279
+ haiku)
280
+ __CodeName=haiku
281
+ __BuildArch=x64
282
+ __SkipUnmount=1
283
+ ;;
266
284
--skipunmount)
267
285
__SkipUnmount=1
268
286
;;
@@ -273,6 +291,10 @@ while :; do
273
291
--use-mirror)
274
292
__UseMirror=1
275
293
;;
294
+ --use-jobs)
295
+ shift
296
+ MAXJOBS=$1
297
+ ;;
276
298
* )
277
299
__UnprocessedBuildArgs=" $__UnprocessedBuildArgs $1 "
278
300
;;
@@ -326,7 +348,7 @@ if [[ "$__CodeName" == "alpine" ]]; then
326
348
rm -r " $__ApkToolsDir "
327
349
elif [[ " $__CodeName " == " freebsd" ]]; then
328
350
mkdir -p " $__RootfsDir " /usr/local/etc
329
- JOBS=" $( getconf _NPROCESSORS_ONLN) "
351
+ JOBS=${MAXJOBS := " $( getconf _NPROCESSORS_ONLN) " }
330
352
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
331
353
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
332
354
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
344
366
elif [[ " $__CodeName " == " illumos" ]]; then
345
367
mkdir " $__RootfsDir /tmp"
346
368
pushd " $__RootfsDir /tmp"
347
- JOBS=" $( getconf _NPROCESSORS_ONLN) "
369
+ JOBS=${MAXJOBS := " $( getconf _NPROCESSORS_ONLN) " }
348
370
echo " Downloading sysroot."
349
371
wget -O - https://github.com/illumos/sysroot/releases/download/20181213-de6af22ae73b-v1/illumos-sysroot-i386-20181213-de6af22ae73b-v1.tar.gz | tar -C " $__RootfsDir " -xzf -
350
372
echo " Building binutils. Please wait.."
@@ -386,6 +408,70 @@ elif [[ "$__CodeName" == "illumos" ]]; then
386
408
wget -P " $__RootfsDir " /usr/include/net https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/io/bpf/net/dlt.h
387
409
wget -P " $__RootfsDir " /usr/include/netpacket https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/inet/sockmods/netpacket/packet.h
388
410
wget -P " $__RootfsDir " /usr/include/sys https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/sys/sdt.h
411
+ elif [[ " $__CodeName " == " haiku" ]]; then
412
+ JOBS=${MAXJOBS:= " $( getconf _NPROCESSORS_ONLN) " }
413
+
414
+ echo " Building Haiku sysroot for x86_64"
415
+ mkdir -p " $__RootfsDir /tmp"
416
+ cd " $__RootfsDir /tmp"
417
+ git clone -b hrev56235 https://review.haiku-os.org/haiku
418
+ git clone -b btrev43195 https://review.haiku-os.org/buildtools
419
+ cd " $__RootfsDir /tmp/buildtools" && git checkout 7487388f5110021d400b9f3b88e1a7f310dc066d
420
+
421
+ # Fetch some unmerged patches
422
+ cd " $__RootfsDir /tmp/haiku"
423
+ # # Add development build profile (slimmer than nightly)
424
+ git fetch origin refs/changes/64/4164/1 && git -c commit.gpgsign=false cherry-pick FETCH_HEAD
425
+
426
+ # Build jam
427
+ cd " $__RootfsDir /tmp/buildtools/jam"
428
+ make
429
+
430
+ # Configure cross tools
431
+ echo " Building cross-compiler"
432
+ mkdir -p " $__RootfsDir /generated"
433
+ cd " $__RootfsDir /generated"
434
+ " $__RootfsDir /tmp/haiku/configure" -j" $JOBS " --sysroot " $__RootfsDir " --cross-tools-source " $__RootfsDir /tmp/buildtools" --build-cross-tools x86_64
435
+
436
+ # Build Haiku packages
437
+ echo " Building Haiku"
438
+ echo ' HAIKU_BUILD_PROFILE = "development-raw" ;' > UserProfileConfig
439
+ " $__RootfsDir /tmp/buildtools/jam/jam0" -j" $JOBS " -q ' <build>package' ' <repository>Haiku'
440
+
441
+ BaseUrl=" https://depot.haiku-os.org/__api/v2/pkg/get-pkg"
442
+
443
+ # Download additional packages
444
+ echo " Downloading additional required packages"
445
+ read -ra array <<< " $__HaikuPackages"
446
+ for package in " ${array[@]} " ; do
447
+ echo " Downloading $package ..."
448
+ # API documented here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L60
449
+ # The schema here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L598
450
+ hpkgDownloadUrl=" $( wget -qO- --post-data=' {"name":"' " $package " ' ","repositorySourceCode":"haikuports_x86_64","versionType":"LATEST","naturalLanguageCode":"en"}' \
451
+ --header=' Content-Type:application/json' " $BaseUrl " | jq -r ' .result.versions[].hpkgDownloadURL' ) "
452
+ wget -P " $__RootfsDir /generated/download" " $hpkgDownloadUrl "
453
+ done
454
+
455
+ # Setup the sysroot
456
+ echo " Setting up sysroot and extracting needed packages"
457
+ mkdir -p " $__RootfsDir /boot/system"
458
+ for file in " $__RootfsDir /generated/objects/haiku/x86_64/packaging/packages/" * .hpkg; do
459
+ " $__RootfsDir /generated/objects/linux/x86_64/release/tools/package/package" extract -C " $__RootfsDir /boot/system" " $file "
460
+ done
461
+ for file in " $__RootfsDir /generated/download/" * .hpkg; do
462
+ " $__RootfsDir /generated/objects/linux/x86_64/release/tools/package/package" extract -C " $__RootfsDir /boot/system" " $file "
463
+ done
464
+
465
+ # Cleaning up temporary files
466
+ echo " Cleaning up temporary files"
467
+ rm -rf " $__RootfsDir /tmp"
468
+ for name in " $__RootfsDir /generated/" * ; do
469
+ if [[ " $name " =~ " cross-tools-" ]]; then
470
+ : # Keep the cross-compiler
471
+ else
472
+ rm -rf " $name "
473
+ fi
474
+ done
389
475
elif [[ -n " $__CodeName " ]]; then
390
476
qemu-debootstrap $__Keyring --arch " $__UbuntuArch " " $__CodeName " " $__RootfsDir " " $__UbuntuRepo "
391
477
cp " $__CrossDir /$__BuildArch /sources.list.$__CodeName " " $__RootfsDir /etc/apt/sources.list"
0 commit comments