|
|
@@ -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"
|