diff --git a/.gitignore b/.gitignore index 457b1ed7..c2d28f12 100644 --- a/.gitignore +++ b/.gitignore @@ -8,8 +8,7 @@ initrd/sys/moon.sym initrd/bin/** apps/bin/** tests/**/bin/** -base/usr/include/** -base/usr/lib/** +base/usr/** **/*.a ports/**/workdir/** ports/ports.list diff --git a/ports/add-port.sh b/ports/add-port.sh index 73b08103..222931ac 100755 --- a/ports/add-port.sh +++ b/ports/add-port.sh @@ -4,6 +4,8 @@ set -e cd $(dirname $0)/.. +unset LUNA_BASE + source tools/env.sh cd ports @@ -50,6 +52,24 @@ mkdir -p $workdir source $pkgscript +if ! [ -z ${pkgdeps+x} ] +then + echo "Installing dependencies of $pkgname..." + for pkg in ${pkgdeps[@]} + do + set +e + grep $pkg ports.list >/dev/null + if [ "$?" = "0" ] + then + echo "Dependency $pkg is already installed." + else + echo "Installing dependency $pkg..." + ./add-port.sh $pkg + fi + set -e + done +fi + echo "Building $pkgname version $pkgver..." cd $workdir @@ -67,14 +87,18 @@ then *) echo "Don't know how to download package mode '$pkgmode'"; exit 1;; esac + set +e command -v port_unpack >/dev/null + set -e if [ "$?" = "0" ] then echo "Unpacking $pkgname version $pkgver..." port_unpack | filter-lines $pkgname "unpack" fi + set +e command -v port_patch >/dev/null + set -e if [ "$?" = "0" ] then echo "Patching $pkgname version $pkgver..." @@ -87,7 +111,9 @@ cd $workdir mkdir -p $builddir cd $builddir +set +e command -v port_configure >/dev/null +set -e if [ "$?" = "0" ] then echo "Configuring $pkgname version $pkgver..." diff --git a/ports/gmp/gmp.patch b/ports/gmp/gmp.patch new file mode 100644 index 00000000..ab6934dd --- /dev/null +++ b/ports/gmp/gmp.patch @@ -0,0 +1,11 @@ +diff --color -rN -u gmp-vanilla/invalid.c gmp-6.2.1/invalid.c +--- a/gmp-6.2.1/invalid.c 2020-11-14 19:45:09.000000000 +0100 ++++ b/gmp-6.2.1/invalid.c 2022-10-26 21:09:20.102237128 +0200 +@@ -77,6 +77,6 @@ + void + __gmp_invalid_operation (void) + { +- raise (SIGFPE); ++// raise (SIGFPE); + abort (); + } diff --git a/ports/gmp/package.sh b/ports/gmp/package.sh new file mode 100644 index 00000000..d8fde85b --- /dev/null +++ b/ports/gmp/package.sh @@ -0,0 +1,44 @@ +pkgname="gmp" +pkgver="6.2.1" +pkgurl="https://ftp.gnu.org/gnu/gmp/gmp-$pkgver.tar.xz" + +pkgmode="web" + +islib=1 + +setupdir="$workdir" +builddir="$workdir/build" +installdir="$workdir/build" +srcdir="$workdir/gmp-$pkgver" + +port_unpack() +{ + tar xvf gmp-$pkgver.tar.xz +} + +port_patch() +{ + patch -u -i $portdir/gmp.patch -p 1 -d $workdir +} + +port_configure() +{ + CC_FOR_BUILD=gcc $srcdir/configure --enable-shared=no --with-gnu-ld --host=x86_64-luna --prefix=/usr +} + +port_build() +{ + make -j$(nproc) +} + +port_install() +{ + make DESTDIR=$LUNA_BASE install + rm -f $LUNA_BASE/usr/lib/*.la +} + +port_uninstall() +{ + make DESTDIR=$LUNA_BASE uninstall + rm -f $LUNA_BASE/usr/lib/libgmp.a +} \ No newline at end of file diff --git a/ports/mpc/package.sh b/ports/mpc/package.sh new file mode 100644 index 00000000..d28aaa7d --- /dev/null +++ b/ports/mpc/package.sh @@ -0,0 +1,41 @@ +pkgname="mpc" +pkgver="1.2.1" +pkgurl="https://ftp.gnu.org/gnu/mpc/mpc-$pkgver.tar.gz" + +pkgmode="web" + +pkgdeps=('gmp' 'mpfr') + +islib=1 + +setupdir="$workdir" +builddir="$workdir/build" +installdir="$workdir/build" +srcdir="$workdir/mpc-$pkgver" + +port_unpack() +{ + tar xvf mpc-$pkgver.tar.gz +} + +port_configure() +{ + $srcdir/configure --host=x86_64-luna --with-gnu-ld --enable-shared=no --prefix=/usr +} + +port_build() +{ + make -j$(nproc) +} + +port_install() +{ + make DESTDIR=$LUNA_BASE install + rm -f $LUNA_BASE/usr/lib/*.la +} + +port_uninstall() +{ + make DESTDIR=$LUNA_BASE uninstall + rm -f $LUNA_BASE/usr/lib/libmpc.a +} \ No newline at end of file diff --git a/ports/mpfr/package.sh b/ports/mpfr/package.sh new file mode 100644 index 00000000..b9df3d56 --- /dev/null +++ b/ports/mpfr/package.sh @@ -0,0 +1,41 @@ +pkgname="mpfr" +pkgver="4.1.0" +pkgurl="https://ftp.gnu.org/gnu/mpfr/mpfr-$pkgver.tar.gz" + +pkgmode="web" + +pkgdeps=('gmp') + +islib=1 + +setupdir="$workdir" +builddir="$workdir/build" +installdir="$workdir/build" +srcdir="$workdir/mpfr-$pkgver" + +port_unpack() +{ + tar xvf mpfr-$pkgver.tar.gz +} + +port_configure() +{ + $srcdir/configure --with-gnu-ld --host=x86_64-luna --enable-shared=no --prefix=/usr +} + +port_build() +{ + make -j$(nproc) +} + +port_install() +{ + make DESTDIR=$LUNA_BASE install + rm -f $LUNA_BASE/usr/lib/*.la +} + +port_uninstall() +{ + make DESTDIR=$LUNA_BASE uninstall + rm -f $LUNA_BASE/usr/lib/libmpfr.a +} \ No newline at end of file diff --git a/tools/env.sh b/tools/env.sh index ef286d38..4a9e8061 100755 --- a/tools/env.sh +++ b/tools/env.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -export LUNA_ROOT=$(realpath $(dirname $0)/..) -export LUNA_BASE=$LUNA_ROOT/base +export LUNA_ROOT=${LUNA_ROOT:-$(realpath $(dirname $0)/..)} +export LUNA_BASE=${LUNA_BASE:-$LUNA_ROOT/base} export PATH=$LUNA_ROOT/toolchain/x86-64-luna/bin:$LUNA_ROOT/toolchain/dist:$PATH export CC=x86_64-luna-gcc diff --git a/tools/install-built-ports.sh b/tools/install-built-ports.sh index 919994eb..8e21fbc4 100755 --- a/tools/install-built-ports.sh +++ b/tools/install-built-ports.sh @@ -22,6 +22,7 @@ unset_vars() unset port_build unset port_install unset port_uninstall + unset islib } if ! [ -f ./ports.list ] @@ -38,10 +39,13 @@ install_port() export portdir=$PWD/$1 export workdir=$portdir/workdir source $portdir/package.sh - echo "installing port: $pkgname version $pkgver" - mkdir -p $installdir - cd $installdir - port_install | filter-lines $pkgname "install" + if ! [ "$islib" = "1" ] + then + echo "installing port: $pkgname version $pkgver" + mkdir -p $installdir + cd $installdir + port_install | filter-lines $pkgname "install" + fi } while read package; do