diff --git a/scripts/build b/scripts/build index 1be3ae3a23..c11e11bb3b 100755 --- a/scripts/build +++ b/scripts/build @@ -71,496 +71,493 @@ if [ -f $STAMP ] ; then fi fi -if [ ! -f $STAMP ]; then - rm -f $STAMP +if [ -f $STAMP ]; then + # already build, do nothing + exit 0 +fi +rm -f $STAMP - setup_toolchain $TARGET +setup_toolchain $TARGET - # unset functions - unset -f pre_build_target - unset -f pre_configure_target - unset -f configure_target - unset -f post_configure_target - unset -f pre_make_target - unset -f make_target - unset -f post_make_target - unset -f pre_makeinstall_target - unset -f makeinstall_target - unset -f post_makeinstall_target +# unset functions +unset -f pre_build_target +unset -f pre_configure_target +unset -f configure_target +unset -f post_configure_target +unset -f pre_make_target +unset -f make_target +unset -f post_make_target +unset -f pre_makeinstall_target +unset -f makeinstall_target +unset -f post_makeinstall_target - unset -f pre_build_host - unset -f pre_configure_host - unset -f configure_host - unset -f post_configure_host - unset -f pre_make_host - unset -f make_host - unset -f post_make_host - unset -f pre_makeinstall_host - unset -f makeinstall_host - unset -f post_makeinstall_host +unset -f pre_build_host +unset -f pre_configure_host +unset -f configure_host +unset -f post_configure_host +unset -f pre_make_host +unset -f make_host +unset -f post_make_host +unset -f pre_makeinstall_host +unset -f makeinstall_host +unset -f post_makeinstall_host - unset -f pre_build_init - unset -f pre_configure_init - unset -f configure_init - unset -f post_configure_init - unset -f pre_make_init - unset -f make_init - unset -f post_make_init - unset -f pre_makeinstall_init - unset -f makeinstall_init - unset -f post_makeinstall_init +unset -f pre_build_init +unset -f pre_configure_init +unset -f configure_init +unset -f post_configure_init +unset -f pre_make_init +unset -f make_init +unset -f post_make_init +unset -f pre_makeinstall_init +unset -f makeinstall_init +unset -f post_makeinstall_init - unset -f pre_build_bootstrap - unset -f pre_configure_bootstrap - unset -f configure_bootstrap - unset -f post_configure_bootstrap - unset -f pre_make_bootstrap - unset -f make_bootstrap - unset -f post_make_bootstrap - unset -f pre_makeinstall_bootstrap - unset -f makeinstall_bootstrap - unset -f post_makeinstall_bootstrap +unset -f pre_build_bootstrap +unset -f pre_configure_bootstrap +unset -f configure_bootstrap +unset -f post_configure_bootstrap +unset -f pre_make_bootstrap +unset -f make_bootstrap +unset -f post_make_bootstrap +unset -f pre_makeinstall_bootstrap +unset -f makeinstall_bootstrap +unset -f post_makeinstall_bootstrap - # configure TARGET build defaults - TARGET_CONFIGURE_OPTS="--host=$TARGET_NAME \ - --build=$HOST_NAME \ - --prefix=/usr \ - --bindir=/usr/bin \ - --sbindir=/usr/sbin \ - --sysconfdir=/etc \ - --libdir=/usr/lib \ - --libexecdir=/usr/lib \ - --localstatedir=/var \ - --disable-static \ - --enable-shared" - - # cmake build defaults - if [ "$DEBUG" = "yes" ]; then - CMAKE_BUILD_TYPE="Debug" - else - CMAKE_BUILD_TYPE="MinSizeRel" - fi - - CMAKE_GENERATOR_NINJA="-GNinja \ - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON" - - TARGET_CMAKE_OPTS="-DCMAKE_TOOLCHAIN_FILE=$CMAKE_CONF \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE" - - # meson build defaults - if [ "$DEBUG" = "yes" ]; then - MESON_BUILD_TYPE="debug" - else - MESON_BUILD_TYPE="plain" - fi - - TARGET_MESON_OPTS="--prefix=/usr \ +# configure TARGET build defaults +TARGET_CONFIGURE_OPTS="--host=$TARGET_NAME \ + --build=$HOST_NAME \ + --prefix=/usr \ --bindir=/usr/bin \ --sbindir=/usr/sbin \ --sysconfdir=/etc \ --libdir=/usr/lib \ --libexecdir=/usr/lib \ --localstatedir=/var \ - --buildtype=$MESON_BUILD_TYPE \ - --cross-file=$MESON_CONF" + --disable-static \ + --enable-shared" - # configure HOST build defaults - HOST_CONFIGURE_OPTS="--host=$HOST_NAME \ - --build=$HOST_NAME \ - --prefix=$TOOLCHAIN \ - --bindir=$TOOLCHAIN/bin \ - --sbindir=$TOOLCHAIN/sbin \ - --sysconfdir=$TOOLCHAIN/etc \ - --libexecdir=$TOOLCHAIN/lib \ - --localstatedir=$TOOLCHAIN/var \ - --disable-static \ - --enable-shared" +# cmake build defaults +if [ "$DEBUG" = "yes" ]; then + CMAKE_BUILD_TYPE="Debug" +else + CMAKE_BUILD_TYPE="MinSizeRel" +fi - HOST_CMAKE_OPTS="$CMAKE_GENERATOR \ - -DCMAKE_TOOLCHAIN_FILE=$CMAKE_CONF \ - -DCMAKE_INSTALL_PREFIX=$TOOLCHAIN" +CMAKE_GENERATOR_NINJA="-GNinja \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON" - HOST_MESON_OPTS="--prefix=$TOOLCHAIN \ +TARGET_CMAKE_OPTS="-DCMAKE_TOOLCHAIN_FILE=$CMAKE_CONF \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE" + +# meson build defaults +if [ "$DEBUG" = "yes" ]; then + MESON_BUILD_TYPE="debug" +else + MESON_BUILD_TYPE="plain" +fi + +TARGET_MESON_OPTS="--prefix=/usr \ + --bindir=/usr/bin \ + --sbindir=/usr/sbin \ + --sysconfdir=/etc \ + --libdir=/usr/lib \ + --libexecdir=/usr/lib \ + --localstatedir=/var \ + --buildtype=$MESON_BUILD_TYPE \ + --cross-file=$MESON_CONF" + +# configure HOST build defaults +HOST_CONFIGURE_OPTS="--host=$HOST_NAME \ + --build=$HOST_NAME \ + --prefix=$TOOLCHAIN \ --bindir=$TOOLCHAIN/bin \ --sbindir=$TOOLCHAIN/sbin \ --sysconfdir=$TOOLCHAIN/etc \ - --libdir=$TOOLCHAIN/lib \ --libexecdir=$TOOLCHAIN/lib \ --localstatedir=$TOOLCHAIN/var \ - --buildtype=plain \ - --cross-file=$MESON_CONF" + --disable-static \ + --enable-shared" - # configure INIT build defaults - INIT_CONFIGURE_OPTS="$TARGET_CONFIGURE_OPTS" - INIT_CMAKE_OPTS="$TARGET_CMAKE_OPTS" - INIT_MESON_OPTS="$TARGET_MESON_OPTS" +HOST_CMAKE_OPTS="$CMAKE_GENERATOR \ + -DCMAKE_TOOLCHAIN_FILE=$CMAKE_CONF \ + -DCMAKE_INSTALL_PREFIX=$TOOLCHAIN" - # configure BOOTSTRAP build defaults - BOOTSTRAP_CONFIGURE_OPTS="$HOST_CONFIGURE_OPTS" - BOOTSTRAP_CMAKE_OPTS="$HOST_CMAKE_OPTS" - BOOTSTRAP_MESON_OPTS="$HOST_MESON_OPTS" +HOST_MESON_OPTS="--prefix=$TOOLCHAIN \ + --bindir=$TOOLCHAIN/bin \ + --sbindir=$TOOLCHAIN/sbin \ + --sysconfdir=$TOOLCHAIN/etc \ + --libdir=$TOOLCHAIN/lib \ + --libexecdir=$TOOLCHAIN/lib \ + --localstatedir=$TOOLCHAIN/var \ + --buildtype=plain \ + --cross-file=$MESON_CONF" - # include buildfile - . $PKG_DIR/package.mk +# configure INIT build defaults +INIT_CONFIGURE_OPTS="$TARGET_CONFIGURE_OPTS" +INIT_CMAKE_OPTS="$TARGET_CMAKE_OPTS" +INIT_MESON_OPTS="$TARGET_MESON_OPTS" - if [ "$PKG_IS_KERNEL_PKG" = "yes" ]; then - if [ "$TARGET_KERNEL_ARCH" = "arm64" -a "$TARGET_ARCH" = "arm" ]; then - TARGET_PREFIX=$TOOLCHAIN/lib/gcc-linaro-aarch64-linux-gnu/bin/aarch64-linux-gnu- - fi - fi +# configure BOOTSTRAP build defaults +BOOTSTRAP_CONFIGURE_OPTS="$HOST_CONFIGURE_OPTS" +BOOTSTRAP_CMAKE_OPTS="$HOST_CMAKE_OPTS" +BOOTSTRAP_MESON_OPTS="$HOST_MESON_OPTS" - # build dependencies - case "$TARGET" in - "target") - for p in $PKG_DEPENDS_TARGET; do - $SCRIPTS/build $p - done - ;; - "host") - for p in $PKG_DEPENDS_HOST; do - $SCRIPTS/build $p - done - ;; - "init") - for p in $PKG_DEPENDS_INIT; do - $SCRIPTS/build $p - done - ;; - "bootstrap") - for p in $PKG_DEPENDS_BOOTSTRAP; do - $SCRIPTS/build $p - done - ;; - esac +# include buildfile +. $PKG_DIR/package.mk - printf "%${BUILD_INDENT}c $(print_color CLR_BUILD "BUILD") $PACKAGE_NAME $(print_color CLR_TARGET "($TARGET)")\n" ' '>&$SILENT_OUT - export BUILD_INDENT=$((${BUILD_INDENT:-1}+$BUILD_INDENT_SIZE)) - - # virtual packages dont must be build, they only contains dependencies, so dont go further here - if [ ! "$PKG_SECTION" = "virtual" ]; then - - # configure other variables - if [ "$TARGET" = "target" ]; then - INSTALL=$PKG_BUILD/.install_pkg - elif [ "$TARGET" = "init" ]; then - INSTALL=$PKG_BUILD/.install_init - fi - - # clean up - if [ ! -z "$INSTALL" ] ; then - if [ -d "$INSTALL" ] ; then - rm -rf $INSTALL - fi - fi - - # setup configure script - if [ -z "$PKG_CONFIGURE_SCRIPT" ]; then - PKG_CONFIGURE_SCRIPT="$PKG_BUILD/configure" - else - PKG_CONFIGURE_SCRIPT="$PKG_BUILD/$PKG_CONFIGURE_SCRIPT" - fi - if [ -z "$PKG_CMAKE_SCRIPT" ]; then - PKG_CMAKE_SCRIPT="$PKG_BUILD/CMakeLists.txt" - fi - - if [ -z "$PKG_MESON_SCRIPT" ]; then - PKG_MESON_SCRIPT="$PKG_BUILD/meson.build" - fi - - # auto detect toolchain - _auto_toolchain="" - if [ -z "$PKG_TOOLCHAIN" -o "$PKG_TOOLCHAIN" = "auto" ]; then - if [ -f "$PKG_MESON_SCRIPT" ]; then - PKG_TOOLCHAIN="meson" - elif [ -f "$PKG_CMAKE_SCRIPT" -a ! "$PKG_USE_CMAKE" = "no" ]; then - PKG_TOOLCHAIN="cmake" - elif [ -f "$PKG_CONFIGURE_SCRIPT" ]; then - PKG_TOOLCHAIN="configure" - elif [ -f $PKG_BUILD/Makefile ]; then - PKG_TOOLCHAIN="make" - else - echo "Not possible to detect toolchain automatically. Add PKG_TOOLCHAIN= to package.mk" - exit 1 - fi - _auto_toolchain=" (auto-detect)" - fi - if ! listcontains "meson cmake cmake-make configure ninja make autotools manual" "$PKG_TOOLCHAIN"; then - printf "$(print_color bold-red "ERROR:") unknown toolchain $PKG_TOOLCHAIN" - exit 1 - fi - printf "%${BUILD_INDENT}c $(print_color CLR_TOOLCHAIN "TOOLCHAIN") $PKG_TOOLCHAIN${_auto_toolchain}\n" ' '>&$SILENT_OUT - - if [ "$PKG_TOOLCHAIN" = "autotools" ]; then - $SCRIPTS/autoreconf $PACKAGE_NAME - fi - - # include build template and build - if [ "$(type -t pre_build_$TARGET)" = "function" ]; then - pre_build_$TARGET - fi - - # ensure $PKG_BUILD is there. (installer? PKG_URL="") - if [ ! -d $PKG_BUILD ] ; then - mkdir -p $PKG_BUILD - fi - - cd $PKG_BUILD - - if [ -f "$PKG_CONFIGURE_SCRIPT" -o -f "$PKG_CMAKE_SCRIPT" -o -f "$PKG_MESON_SCRIPT" ]; then - case "$TARGET" in - "target") - mkdir -p .$TARGET_NAME - cd .$TARGET_NAME - ;; - "host") - mkdir -p .$HOST_NAME - cd .$HOST_NAME - ;; - "init") - mkdir -p .$TARGET_NAME-$TARGET - cd .$TARGET_NAME-$TARGET - ;; - "bootstrap") - mkdir -p .$HOST_NAME-$TARGET - cd .$HOST_NAME-$TARGET - ;; - esac - fi - - # configure - if [ "$(type -t pre_configure_$TARGET)" = "function" ]; then - pre_configure_$TARGET - fi - if [ "$(type -t configure_$TARGET)" = "function" ]; then - configure_$TARGET - else - case "$PKG_TOOLCHAIN:$TARGET" in - # meson builds - "meson:target") - echo "Executing (target): meson $TARGET_MESON_OPTS $PKG_MESON_OPTS_TARGET $(dirname $PKG_MESON_SCRIPT)" | tr -s " " - meson $TARGET_MESON_OPTS $PKG_MESON_OPTS_TARGET $(dirname $PKG_MESON_SCRIPT) - ;; - "meson:host") - echo "Executing (host): meson $HOST_MESON_OPTS $PKG_MESON_OPTS_HOST $(dirname $PKG_MESON_SCRIPT)" | tr -s " " - meson $HOST_MESON_OPTS $PKG_MESON_OPTS_HOST $(dirname $PKG_MESON_SCRIPT) - ;; - "meson:init") - echo "Executing (init): meson $INIT_MESON_OPTS $PKG_MESON_OPTS_INIT $(dirname $PKG_MESON_SCRIPT)" | tr -s " " - meson $INIT_MESON_OPTS $PKG_MESON_OPTS_INIT $(dirname $PKG_MESON_SCRIPT) - ;; - "meson:bootstrap") - echo "Executing (bootstrap): meson $BOOTSTRAP_MESON_OPTS $PKG_MESON_OPTS_BOOTSTRAP $(dirname $PKG_MESON_SCRIPT)" | tr -s " " - meson $BOOTSTRAP_MESON_OPTS $PKG_MESON_OPTS_BOOTSTRAP $(dirname $PKG_MESON_SCRIPT) - ;; - - # cmake builds with ninja - "cmake:target") - echo "Executing (target): cmake $CMAKE_GENERATOR_NINJA $TARGET_CMAKE_OPTS $PKG_CMAKE_OPTS_TARGET $(dirname $PKG_CMAKE_SCRIPT)" | tr -s " " - cmake $CMAKE_GENERATOR_NINJA $TARGET_CMAKE_OPTS $PKG_CMAKE_OPTS_TARGET $(dirname $PKG_CMAKE_SCRIPT) - ;; - "cmake:host") - echo "Executing (host): cmake $CMAKE_GENERATOR_NINJA $HOST_CMAKE_OPTS $PKG_CMAKE_OPTS_HOST $(dirname $PKG_CMAKE_SCRIPT)" | tr -s " " - cmake $CMAKE_GENERATOR_NINJA $HOST_CMAKE_OPTS $PKG_CMAKE_OPTS_HOST $(dirname $PKG_CMAKE_SCRIPT) - ;; - "cmake:init") - echo "Executing (init): cmake $CMAKE_GENERATOR_NINJA $INIT_CMAKE_OPTS $PKG_CMAKE_OPTS_INIT $(dirname $PKG_CMAKE_SCRIPT)" | tr -s " " - cmake $CMAKE_GENERATOR_NINJA $INIT_CMAKE_OPTS $PKG_CMAKE_OPTS_INIT $(dirname $PKG_CMAKE_SCRIPT) - ;; - "cmake:bootstrap") - echo "Executing (bootstrap): cmake $CMAKE_GENERATOR_NINJA $BOOTSTRAP_CMAKE_OPTS $PKG_CMAKE_OPTS_BOOTSTRAP $(dirname $PKG_CMAKE_SCRIPT)" | tr -s " " - cmake $CMAKE_GENERATOR_NINJA $BOOTSTRAP_CMAKE_OPTS $PKG_CMAKE_OPTS_BOOTSTRAP $(dirname $PKG_CMAKE_SCRIPT) - ;; - - # cmake builds with make - "cmake-make:target") - echo "Executing (target): cmake $TARGET_CMAKE_OPTS $PKG_CMAKE_OPTS_TARGET $(dirname $PKG_CMAKE_SCRIPT)" | tr -s " " - cmake $TARGET_CMAKE_OPTS $PKG_CMAKE_OPTS_TARGET $(dirname $PKG_CMAKE_SCRIPT) - ;; - "cmake-make:host") - echo "Executing (host): cmake $HOST_CMAKE_OPTS $PKG_CMAKE_OPTS_HOST $(dirname $PKG_CMAKE_SCRIPT)" | tr -s " " - cmake $HOST_CMAKE_OPTS $PKG_CMAKE_OPTS_HOST $(dirname $PKG_CMAKE_SCRIPT) - ;; - "cmake-make:init") - echo "Executing (init): cmake $INIT_CMAKE_OPTS $PKG_CMAKE_OPTS_INIT $(dirname $PKG_CMAKE_SCRIPT)" | tr -s " " - cmake $INIT_CMAKE_OPTS $PKG_CMAKE_OPTS_INIT $(dirname $PKG_CMAKE_SCRIPT) - ;; - "cmake-make:bootstrap") - echo "Executing (bootstrap): cmake $BOOTSTRAP_CMAKE_OPTS $PKG_CMAKE_OPTS_BOOTSTRAP $(dirname $PKG_CMAKE_SCRIPT)" | tr -s " " - cmake $BOOTSTRAP_CMAKE_OPTS $PKG_CMAKE_OPTS_BOOTSTRAP $(dirname $PKG_CMAKE_SCRIPT) - ;; - - # configure builds - "configure:target"|"autotools:target") - echo "Executing (target): $PKG_CONFIGURE_SCRIPT $TARGET_CONFIGURE_OPTS $PKG_CONFIGURE_OPTS_TARGET" | tr -s " " - $PKG_CONFIGURE_SCRIPT $TARGET_CONFIGURE_OPTS $PKG_CONFIGURE_OPTS_TARGET - ;; - "configure:host"|"autotools:host") - echo "Executing (host): $PKG_CONFIGURE_SCRIPT $HOST_CONFIGURE_OPTS $PKG_CONFIGURE_OPTS_HOST" | tr -s " " - $PKG_CONFIGURE_SCRIPT $HOST_CONFIGURE_OPTS $PKG_CONFIGURE_OPTS_HOST - ;; - "configure:init"|"autotools:init") - echo "Executing (init): $PKG_CONFIGURE_SCRIPT $INIT_CONFIGURE_OPTS $PKG_CONFIGURE_OPTS_INIT" | tr -s " " - $PKG_CONFIGURE_SCRIPT $INIT_CONFIGURE_OPTS $PKG_CONFIGURE_OPTS_INIT - ;; - "configure:bootstrap"|"autotools:bootstrap") - echo "Executing (bootstrap): $PKG_CONFIGURE_SCRIPT $BOOTSTRAP_CONFIGURE_OPTS $PKG_CONFIGURE_OPTS_BOOTSTRAP" | tr -s " " - $PKG_CONFIGURE_SCRIPT $BOOTSTRAP_CONFIGURE_OPTS $PKG_CONFIGURE_OPTS_BOOTSTRAP - ;; - esac - fi - if [ "$(type -t post_configure_$TARGET)" = "function" ]; then - post_configure_$TARGET - fi - - # make - if [ "$(type -t pre_make_$TARGET)" = "function" ]; then - pre_make_$TARGET - fi - if [ "$(type -t make_$TARGET)" = "function" ]; then - make_$TARGET - else - case "$PKG_TOOLCHAIN:$TARGET" in - # ninja based builds - "meson:target"|"cmake:target"|"ninja:target") - echo "Executing (target): ninja $PKG_MAKE_OPTS_TARGET" | tr -s " " - ninja $PKG_MAKE_OPTS_TARGET - ;; - "meson:host"|"cmake:host"|"ninja:host") - echo "Executing (host): ninja $PKG_MAKE_OPTS_HOST" | tr -s " " - ninja $PKG_MAKE_OPTS_HOST - ;; - "meson:init"|"cmake:init"|"ninja:init") - echo "Executing (init): ninja $PKG_MAKE_OPTS_INIT" | tr -s " " - ninja $PKG_MAKE_OPTS_INIT - ;; - "meson:bootstrap"|"cmake:bootstrap"|"ninja:bootstrap") - echo "Executing (bootstrap): ninja $PKG_MAKE_OPTS_BOOTSTRAP" | tr -s " " - ninja $PKG_MAKE_OPTS_BOOTSTRAP - ;; - - # make based builds - "configure:target"|"cmake-make:target"|"autotools:target"|"make:target") - echo "Executing (target): make $PKG_MAKE_OPTS_TARGET" | tr -s " " - make $PKG_MAKE_OPTS_TARGET - ;; - "configure:host"|"cmake-make:host"|"autotools:host"|"make:host") - echo "Executing (host): make $PKG_MAKE_OPTS_HOST" | tr -s " " - make $PKG_MAKE_OPTS_HOST - ;; - "configure:init"|"cmake-make:init"|"autotools:init"|"make:init") - echo "Executing (init): make $PKG_MAKE_OPTS_INIT" | tr -s " " - make $PKG_MAKE_OPTS_INIT - ;; - "configure:bootstrap"|"cmake-make:bootstrap"|"autotools:bootstrap"|"make:bootstrap") - echo "Executing (bootstrap): make $PKG_MAKE_OPTS_BOOTSTRAP" | tr -s " " - make $PKG_MAKE_OPTS_BOOTSTRAP - ;; - esac - fi - if [ "$(type -t post_make_$TARGET)" = "function" ]; then - post_make_$TARGET - fi - - # make install - if [ "$(type -t pre_makeinstall_$TARGET)" = "function" ]; then - pre_makeinstall_$TARGET - fi - if [ "$(type -t makeinstall_$TARGET)" = "function" ]; then - makeinstall_$TARGET - else - case "$PKG_TOOLCHAIN:$TARGET" in - # ninja based builds - "meson:target"|"cmake:target") - DESTDIR=$SYSROOT_PREFIX ninja install $PKG_MAKEINSTALL_OPTS_TARGET - DESTDIR=$INSTALL ninja install $PKG_MAKEINSTALL_OPTS_TARGET - ;; - "meson:host"|"cmake:host") - ninja install $PKG_MAKEINSTALL_OPTS_HOST - ;; - "meson:init"|"cmake:init") - DESTDIR=$INSTALL ninja install $PKG_MAKEINSTALL_OPTS_INIT - ;; - "meson:bootstrap"|"cmake:bootstrap") - ninja install $PKG_MAKEINSTALL_OPTS_BOOTSTRAP - ;; - - # make based builds - "configure:target"|"cmake-make:target"|"autotools:target"|"make:target") - $MAKEINSTALL $PKG_MAKEINSTALL_OPTS_TARGET - make install DESTDIR=$INSTALL $PKG_MAKEINSTALL_OPTS_TARGET - ;; - "configure:host"|"cmake-make:host"|"autotools:host"|"make:host") - make install $PKG_MAKEINSTALL_OPTS_HOST - ;; - "configure:init"|"cmake-make:init"|"autotools:init"|"make:init") - make install DESTDIR=$INSTALL $PKG_MAKEINSTALL_OPTS_INIT - ;; - "configure:bootstrap"|"cmake-make:bootstrap"|"autotools:bootstrap"|"make:bootstrap") - make install $PKG_MAKEINSTALL_OPTS_BOOTSTRAP - ;; - esac - fi - if [ "$(type -t post_makeinstall_$TARGET)" = "function" ]; then - post_makeinstall_$TARGET - fi - - if [ "$TARGET" = "target" -o "$TARGET" = "init" ]; then - if [ -d $INSTALL ] ; then - rm -rf $INSTALL/{usr/,}include - rm -rf $INSTALL/{usr/,}lib/cmake - rm -rf $INSTALL/{usr/,}lib/pkgconfig - rm -rf $INSTALL/{usr/,}man - rm -rf $INSTALL/{usr/,}share/aclocal - rm -rf $INSTALL/{usr/,}share/bash-completion - rm -rf $INSTALL/{usr/,}share/doc - rm -rf $INSTALL/{usr/,}share/gtk-doc - rm -rf $INSTALL/{usr/,}share/info - rm -rf $INSTALL/{usr/,}share/locale - rm -rf $INSTALL/{usr/,}share/man - rm -rf $INSTALL/{usr/,}share/pkgconfig - rm -rf $INSTALL/{usr/,}share/zsh - rm -rf $INSTALL/{usr/,}var - find $INSTALL \( -name "*.orig" \ - -o -name "*.rej" \ - -o -name "*.a" \ - -o -name "*.la" \ - -o -name "*.o" \ - -o -name "*.in" \ - -o -name ".git*" \) \ - -exec rm -f {} \; 2>/dev/null || : - find $INSTALL -type d -exec rmdir -p {} \; 2>/dev/null || : - - if [ ! "$DEBUG" = yes ]; then - $STRIP `find $INSTALL \ - -type f -name "*.so*" \ - ! -name "ld-*.so" \ - ! -name "libc-*.so" \ - ! -name "libpthread-*.so" \ - ! -name "libthread_db-*so" \ - 2>/dev/null` 2>/dev/null || : - if [ "$TARGET" = "init" ]; then - $STRIP `find $INSTALL -type f -name "*.so*" 2>/dev/null` 2>/dev/null || : - fi - $STRIP `find $INSTALL/bin $INSTALL/usr/bin $INSTALL/sbin $INSTALL/usr/sbin \ - -type f -executable 2>/dev/null` 2>/dev/null || : - fi - fi - fi - - cd $ROOT - fi # ! "$PKG_SECTION" = "virtual" - - for i in `find $SYSROOT_PREFIX/usr/lib/ -name "*.la" 2>/dev/null`; do \ - $SED "s:\(['= ]\)/usr:\\1$SYSROOT_PREFIX/usr:g" $i; \ - done - - PKG_DEEPMD5=$(find $STAMP_DEPENDS -exec md5sum {} \; 2>/dev/null | sort | md5sum | cut -d" " -f1) - for i in PKG_NAME PKG_DEEPMD5; do - echo "STAMP_$i=\"${!i}\"" >> $STAMP - done - - if [ "$1" = "u-boot" ]; then - echo "STAMP_UBOOT_SYSTEM=\"${UBOOT_SYSTEM}\"" >> $STAMP - fi +if [ "$PKG_IS_KERNEL_PKG" = "yes" ]; then + if [ "$TARGET_KERNEL_ARCH" = "arm64" -a "$TARGET_ARCH" = "arm" ]; then + TARGET_PREFIX=$TOOLCHAIN/lib/gcc-linaro-aarch64-linux-gnu/bin/aarch64-linux-gnu- + fi +fi + +# build dependencies +case "$TARGET" in + "target") _pkg_depends="$PKG_DEPENDS_TARGET";; + "host") _pkg_depends="$PKG_DEPENDS_HOST";; + "init") _pkg_depends="$PKG_DEPENDS_INIT";; + "bootstrap") _pkg_depends="$PKG_DEPENDS_BOOTSTRAP";; +esac +for p in $_pkg_depends; do + $SCRIPTS/build $p +done + +printf "%${BUILD_INDENT}c $(print_color CLR_BUILD "BUILD") $PACKAGE_NAME $(print_color CLR_TARGET "($TARGET)")\n" ' '>&$SILENT_OUT +export BUILD_INDENT=$((${BUILD_INDENT:-1}+$BUILD_INDENT_SIZE)) + +# virtual packages dont must be build, they only contains dependencies, so dont go further here +if [ "$PKG_SECTION" = "virtual" ]; then + PKG_DEEPMD5=$(find $STAMP_DEPENDS -exec md5sum {} \; 2>/dev/null | sort | md5sum | cut -d" " -f1) + for i in PKG_NAME PKG_DEEPMD5; do + echo "STAMP_$i=\"${!i}\"" >> $STAMP + done + + exit 0 +fi + +# configure other variables +if [ "$TARGET" = "target" ]; then + INSTALL=$PKG_BUILD/.install_pkg +elif [ "$TARGET" = "init" ]; then + INSTALL=$PKG_BUILD/.install_init +fi + +# clean up +if [ ! -z "$INSTALL" ] ; then + if [ -d "$INSTALL" ] ; then + rm -rf $INSTALL + fi +fi + +# setup configure script +if [ -z "$PKG_CONFIGURE_SCRIPT" ]; then + PKG_CONFIGURE_SCRIPT="$PKG_BUILD/configure" +else + PKG_CONFIGURE_SCRIPT="$PKG_BUILD/$PKG_CONFIGURE_SCRIPT" +fi + +if [ -z "$PKG_CMAKE_SCRIPT" ]; then + PKG_CMAKE_SCRIPT="$PKG_BUILD/CMakeLists.txt" +fi + +if [ -z "$PKG_MESON_SCRIPT" ]; then + PKG_MESON_SCRIPT="$PKG_BUILD/meson.build" +fi + +# auto detect toolchain +_auto_toolchain="" +if [ -z "$PKG_TOOLCHAIN" -o "$PKG_TOOLCHAIN" = "auto" ]; then + if [ -f "$PKG_MESON_SCRIPT" ]; then + PKG_TOOLCHAIN="meson" + elif [ -f "$PKG_CMAKE_SCRIPT" -a ! "$PKG_USE_CMAKE" = "no" ]; then + PKG_TOOLCHAIN="cmake" + elif [ -f "$PKG_CONFIGURE_SCRIPT" ]; then + PKG_TOOLCHAIN="configure" + elif [ -f $PKG_BUILD/Makefile ]; then + PKG_TOOLCHAIN="make" + else + echo "Not possible to detect toolchain automatically. Add PKG_TOOLCHAIN= to package.mk" + exit 1 + fi + _auto_toolchain=" (auto-detect)" +fi +if ! listcontains "meson cmake cmake-make configure ninja make autotools manual" "$PKG_TOOLCHAIN"; then + printf "$(print_color bold-red "ERROR:") unknown toolchain $PKG_TOOLCHAIN" + exit 1 +fi +printf "%${BUILD_INDENT}c $(print_color CLR_TOOLCHAIN "TOOLCHAIN") $PKG_TOOLCHAIN${_auto_toolchain}\n" ' '>&$SILENT_OUT + +# make autoreconf +if [ "$PKG_TOOLCHAIN" = "autotools" ]; then + $SCRIPTS/autoreconf $PACKAGE_NAME +fi + +# include build template and build +if [ "$(type -t pre_build_$TARGET)" = "function" ]; then + pre_build_$TARGET +fi + +# ensure $PKG_BUILD is there. (installer? PKG_URL="") +if [ ! -d $PKG_BUILD ] ; then + mkdir -p $PKG_BUILD +fi + +cd $PKG_BUILD + +if [ -f "$PKG_CONFIGURE_SCRIPT" -o -f "$PKG_CMAKE_SCRIPT" -o -f "$PKG_MESON_SCRIPT" ]; then + case "$TARGET" in + "target") + mkdir -p .$TARGET_NAME + cd .$TARGET_NAME + ;; + "host") + mkdir -p .$HOST_NAME + cd .$HOST_NAME + ;; + "init") + mkdir -p .$TARGET_NAME-$TARGET + cd .$TARGET_NAME-$TARGET + ;; + "bootstrap") + mkdir -p .$HOST_NAME-$TARGET + cd .$HOST_NAME-$TARGET + ;; + esac +fi + +# configure +if [ "$(type -t pre_configure_$TARGET)" = "function" ]; then + pre_configure_$TARGET +fi +if [ "$(type -t configure_$TARGET)" = "function" ]; then + configure_$TARGET +else + case "$PKG_TOOLCHAIN:$TARGET" in + # meson builds + "meson:target") + echo "Executing (target): meson $TARGET_MESON_OPTS $PKG_MESON_OPTS_TARGET $(dirname $PKG_MESON_SCRIPT)" | tr -s " " + meson $TARGET_MESON_OPTS $PKG_MESON_OPTS_TARGET $(dirname $PKG_MESON_SCRIPT) + ;; + "meson:host") + echo "Executing (host): meson $HOST_MESON_OPTS $PKG_MESON_OPTS_HOST $(dirname $PKG_MESON_SCRIPT)" | tr -s " " + meson $HOST_MESON_OPTS $PKG_MESON_OPTS_HOST $(dirname $PKG_MESON_SCRIPT) + ;; + "meson:init") + echo "Executing (init): meson $INIT_MESON_OPTS $PKG_MESON_OPTS_INIT $(dirname $PKG_MESON_SCRIPT)" | tr -s " " + meson $INIT_MESON_OPTS $PKG_MESON_OPTS_INIT $(dirname $PKG_MESON_SCRIPT) + ;; + "meson:bootstrap") + echo "Executing (bootstrap): meson $BOOTSTRAP_MESON_OPTS $PKG_MESON_OPTS_BOOTSTRAP $(dirname $PKG_MESON_SCRIPT)" | tr -s " " + meson $BOOTSTRAP_MESON_OPTS $PKG_MESON_OPTS_BOOTSTRAP $(dirname $PKG_MESON_SCRIPT) + ;; + + # cmake builds with ninja + "cmake:target") + echo "Executing (target): cmake $CMAKE_GENERATOR_NINJA $TARGET_CMAKE_OPTS $PKG_CMAKE_OPTS_TARGET $(dirname $PKG_CMAKE_SCRIPT)" | tr -s " " + cmake $CMAKE_GENERATOR_NINJA $TARGET_CMAKE_OPTS $PKG_CMAKE_OPTS_TARGET $(dirname $PKG_CMAKE_SCRIPT) + ;; + "cmake:host") + echo "Executing (host): cmake $CMAKE_GENERATOR_NINJA $HOST_CMAKE_OPTS $PKG_CMAKE_OPTS_HOST $(dirname $PKG_CMAKE_SCRIPT)" | tr -s " " + cmake $CMAKE_GENERATOR_NINJA $HOST_CMAKE_OPTS $PKG_CMAKE_OPTS_HOST $(dirname $PKG_CMAKE_SCRIPT) + ;; + "cmake:init") + echo "Executing (init): cmake $CMAKE_GENERATOR_NINJA $INIT_CMAKE_OPTS $PKG_CMAKE_OPTS_INIT $(dirname $PKG_CMAKE_SCRIPT)" | tr -s " " + cmake $CMAKE_GENERATOR_NINJA $INIT_CMAKE_OPTS $PKG_CMAKE_OPTS_INIT $(dirname $PKG_CMAKE_SCRIPT) + ;; + "cmake:bootstrap") + echo "Executing (bootstrap): cmake $CMAKE_GENERATOR_NINJA $BOOTSTRAP_CMAKE_OPTS $PKG_CMAKE_OPTS_BOOTSTRAP $(dirname $PKG_CMAKE_SCRIPT)" | tr -s " " + cmake $CMAKE_GENERATOR_NINJA $BOOTSTRAP_CMAKE_OPTS $PKG_CMAKE_OPTS_BOOTSTRAP $(dirname $PKG_CMAKE_SCRIPT) + ;; + + # cmake builds with make + "cmake-make:target") + echo "Executing (target): cmake $TARGET_CMAKE_OPTS $PKG_CMAKE_OPTS_TARGET $(dirname $PKG_CMAKE_SCRIPT)" | tr -s " " + cmake $TARGET_CMAKE_OPTS $PKG_CMAKE_OPTS_TARGET $(dirname $PKG_CMAKE_SCRIPT) + ;; + "cmake-make:host") + echo "Executing (host): cmake $HOST_CMAKE_OPTS $PKG_CMAKE_OPTS_HOST $(dirname $PKG_CMAKE_SCRIPT)" | tr -s " " + cmake $HOST_CMAKE_OPTS $PKG_CMAKE_OPTS_HOST $(dirname $PKG_CMAKE_SCRIPT) + ;; + "cmake-make:init") + echo "Executing (init): cmake $INIT_CMAKE_OPTS $PKG_CMAKE_OPTS_INIT $(dirname $PKG_CMAKE_SCRIPT)" | tr -s " " + cmake $INIT_CMAKE_OPTS $PKG_CMAKE_OPTS_INIT $(dirname $PKG_CMAKE_SCRIPT) + ;; + "cmake-make:bootstrap") + echo "Executing (bootstrap): cmake $BOOTSTRAP_CMAKE_OPTS $PKG_CMAKE_OPTS_BOOTSTRAP $(dirname $PKG_CMAKE_SCRIPT)" | tr -s " " + cmake $BOOTSTRAP_CMAKE_OPTS $PKG_CMAKE_OPTS_BOOTSTRAP $(dirname $PKG_CMAKE_SCRIPT) + ;; + + # configure builds + "configure:target"|"autotools:target") + echo "Executing (target): $PKG_CONFIGURE_SCRIPT $TARGET_CONFIGURE_OPTS $PKG_CONFIGURE_OPTS_TARGET" | tr -s " " + $PKG_CONFIGURE_SCRIPT $TARGET_CONFIGURE_OPTS $PKG_CONFIGURE_OPTS_TARGET + ;; + "configure:host"|"autotools:host") + echo "Executing (host): $PKG_CONFIGURE_SCRIPT $HOST_CONFIGURE_OPTS $PKG_CONFIGURE_OPTS_HOST" | tr -s " " + $PKG_CONFIGURE_SCRIPT $HOST_CONFIGURE_OPTS $PKG_CONFIGURE_OPTS_HOST + ;; + "configure:init"|"autotools:init") + echo "Executing (init): $PKG_CONFIGURE_SCRIPT $INIT_CONFIGURE_OPTS $PKG_CONFIGURE_OPTS_INIT" | tr -s " " + $PKG_CONFIGURE_SCRIPT $INIT_CONFIGURE_OPTS $PKG_CONFIGURE_OPTS_INIT + ;; + "configure:bootstrap"|"autotools:bootstrap") + echo "Executing (bootstrap): $PKG_CONFIGURE_SCRIPT $BOOTSTRAP_CONFIGURE_OPTS $PKG_CONFIGURE_OPTS_BOOTSTRAP" | tr -s " " + $PKG_CONFIGURE_SCRIPT $BOOTSTRAP_CONFIGURE_OPTS $PKG_CONFIGURE_OPTS_BOOTSTRAP + ;; + esac +fi +if [ "$(type -t post_configure_$TARGET)" = "function" ]; then + post_configure_$TARGET +fi + +# make +if [ "$(type -t pre_make_$TARGET)" = "function" ]; then + pre_make_$TARGET +fi +if [ "$(type -t make_$TARGET)" = "function" ]; then + make_$TARGET +else + case "$PKG_TOOLCHAIN:$TARGET" in + # ninja based builds + "meson:target"|"cmake:target"|"ninja:target") + echo "Executing (target): ninja $PKG_MAKE_OPTS_TARGET" | tr -s " " + ninja $PKG_MAKE_OPTS_TARGET + ;; + "meson:host"|"cmake:host"|"ninja:host") + echo "Executing (host): ninja $PKG_MAKE_OPTS_HOST" | tr -s " " + ninja $PKG_MAKE_OPTS_HOST + ;; + "meson:init"|"cmake:init"|"ninja:init") + echo "Executing (init): ninja $PKG_MAKE_OPTS_INIT" | tr -s " " + ninja $PKG_MAKE_OPTS_INIT + ;; + "meson:bootstrap"|"cmake:bootstrap"|"ninja:bootstrap") + echo "Executing (bootstrap): ninja $PKG_MAKE_OPTS_BOOTSTRAP" | tr -s " " + ninja $PKG_MAKE_OPTS_BOOTSTRAP + ;; + + # make based builds + "configure:target"|"cmake-make:target"|"autotools:target"|"make:target") + echo "Executing (target): make $PKG_MAKE_OPTS_TARGET" | tr -s " " + make $PKG_MAKE_OPTS_TARGET + ;; + "configure:host"|"cmake-make:host"|"autotools:host"|"make:host") + echo "Executing (host): make $PKG_MAKE_OPTS_HOST" | tr -s " " + make $PKG_MAKE_OPTS_HOST + ;; + "configure:init"|"cmake-make:init"|"autotools:init"|"make:init") + echo "Executing (init): make $PKG_MAKE_OPTS_INIT" | tr -s " " + make $PKG_MAKE_OPTS_INIT + ;; + "configure:bootstrap"|"cmake-make:bootstrap"|"autotools:bootstrap"|"make:bootstrap") + echo "Executing (bootstrap): make $PKG_MAKE_OPTS_BOOTSTRAP" | tr -s " " + make $PKG_MAKE_OPTS_BOOTSTRAP + ;; + esac +fi +if [ "$(type -t post_make_$TARGET)" = "function" ]; then + post_make_$TARGET +fi + +# make install +if [ "$(type -t pre_makeinstall_$TARGET)" = "function" ]; then + pre_makeinstall_$TARGET +fi +if [ "$(type -t makeinstall_$TARGET)" = "function" ]; then + makeinstall_$TARGET +else + case "$PKG_TOOLCHAIN:$TARGET" in + # ninja based builds + "meson:target"|"cmake:target") + DESTDIR=$SYSROOT_PREFIX ninja install $PKG_MAKEINSTALL_OPTS_TARGET + DESTDIR=$INSTALL ninja install $PKG_MAKEINSTALL_OPTS_TARGET + ;; + "meson:host"|"cmake:host") + ninja install $PKG_MAKEINSTALL_OPTS_HOST + ;; + "meson:init"|"cmake:init") + DESTDIR=$INSTALL ninja install $PKG_MAKEINSTALL_OPTS_INIT + ;; + "meson:bootstrap"|"cmake:bootstrap") + ninja install $PKG_MAKEINSTALL_OPTS_BOOTSTRAP + ;; + + # make based builds + "configure:target"|"cmake-make:target"|"autotools:target"|"make:target") + $MAKEINSTALL $PKG_MAKEINSTALL_OPTS_TARGET + make install DESTDIR=$INSTALL $PKG_MAKEINSTALL_OPTS_TARGET + ;; + "configure:host"|"cmake-make:host"|"autotools:host"|"make:host") + make install $PKG_MAKEINSTALL_OPTS_HOST + ;; + "configure:init"|"cmake-make:init"|"autotools:init"|"make:init") + make install DESTDIR=$INSTALL $PKG_MAKEINSTALL_OPTS_INIT + ;; + "configure:bootstrap"|"cmake-make:bootstrap"|"autotools:bootstrap"|"make:bootstrap") + make install $PKG_MAKEINSTALL_OPTS_BOOTSTRAP + ;; + esac +fi +if [ "$(type -t post_makeinstall_$TARGET)" = "function" ]; then + post_makeinstall_$TARGET +fi + +if [ "$TARGET" = "target" -o "$TARGET" = "init" ]; then + if [ -d $INSTALL ] ; then + rm -rf $INSTALL/{usr/,}include + rm -rf $INSTALL/{usr/,}lib/cmake + rm -rf $INSTALL/{usr/,}lib/pkgconfig + rm -rf $INSTALL/{usr/,}man + rm -rf $INSTALL/{usr/,}share/aclocal + rm -rf $INSTALL/{usr/,}share/bash-completion + rm -rf $INSTALL/{usr/,}share/doc + rm -rf $INSTALL/{usr/,}share/gtk-doc + rm -rf $INSTALL/{usr/,}share/info + rm -rf $INSTALL/{usr/,}share/locale + rm -rf $INSTALL/{usr/,}share/man + rm -rf $INSTALL/{usr/,}share/pkgconfig + rm -rf $INSTALL/{usr/,}share/zsh + rm -rf $INSTALL/{usr/,}var + find $INSTALL \( -name "*.orig" \ + -o -name "*.rej" \ + -o -name "*.a" \ + -o -name "*.la" \ + -o -name "*.o" \ + -o -name "*.in" \ + -o -name ".git*" \) \ + -exec rm -f {} \; 2>/dev/null || : + find $INSTALL -type d -exec rmdir -p {} \; 2>/dev/null || : + + if [ ! "$DEBUG" = yes ]; then + $STRIP `find $INSTALL \ + -type f -name "*.so*" \ + ! -name "ld-*.so" \ + ! -name "libc-*.so" \ + ! -name "libpthread-*.so" \ + ! -name "libthread_db-*so" \ + 2>/dev/null` 2>/dev/null || : + if [ "$TARGET" = "init" ]; then + $STRIP `find $INSTALL -type f -name "*.so*" 2>/dev/null` 2>/dev/null || : + fi + $STRIP `find $INSTALL/bin $INSTALL/usr/bin $INSTALL/sbin $INSTALL/usr/sbin \ + -type f -executable 2>/dev/null` 2>/dev/null || : + fi + fi +fi + +cd $ROOT + +for i in `find $SYSROOT_PREFIX/usr/lib/ -name "*.la" 2>/dev/null`; do \ + $SED "s:\(['= ]\)/usr:\\1$SYSROOT_PREFIX/usr:g" $i; \ +done + +PKG_DEEPMD5=$(find $STAMP_DEPENDS -exec md5sum {} \; 2>/dev/null | sort | md5sum | cut -d" " -f1) +for i in PKG_NAME PKG_DEEPMD5; do + echo "STAMP_$i=\"${!i}\"" >> $STAMP +done + +if [ "$1" = "u-boot" ]; then + echo "STAMP_UBOOT_SYSTEM=\"${UBOOT_SYSTEM}\"" >> $STAMP fi