diff --git a/config/functions b/config/functions index a7f6df4dec..2702b36fb5 100644 --- a/config/functions +++ b/config/functions @@ -301,15 +301,34 @@ dashes="===========================" exit 1 fi - if [ ! -f $PROJECT_DIR/$PROJECT/linux/linux.$TARGET_ARCH.conf ] && - ! ls $PROJECT_DIR/$PROJECT/linux/*/linux.$TARGET_ARCH.conf &>/dev/null; then + if [ \( -z "$DEVICE" -a -d "$PROJECT_DIR/$PROJECT/devices" \) -o \( -n "$DEVICE" -a ! -d "$PROJECT_DIR/$PROJECT/devices/$DEVICE" \) ]; then + check_device="$check_device\n $dashes$dashes$dashes" + check_device="$check_device\n ERROR: You need to specify a valid device for the $PROJECT project" + check_device="$check_device\n $dashes$dashes$dashes" + check_device="$check_device\n\n Valid devices for project: $PROJECT" + + for device in $PROJECT_DIR/$PROJECT/devices/*; do + check_device="$check_device\n - $(basename $device)" + done + echo -e $check_device + exit 1 + fi + + if [ -d $PROJECT_DIR/$PROJECT/devices/$DEVICE/linux ]; then + linux_config_dir="$PROJECT_DIR/$PROJECT/devices/$DEVICE/linux" + else + linux_config_dir="$PROJECT_DIR/$PROJECT/linux" + fi + + if [ ! -f $linux_config_dir/linux.$TARGET_ARCH.conf ] && + ! ls $linux_config_dir/*/linux.$TARGET_ARCH.conf &>/dev/null; then check_arch="$check_arch\n $dashes$dashes$dashes" check_arch="$check_arch\n ERROR: Architecture not found, use a valid Architecture" check_arch="$check_arch\n for your project or create a new config" check_arch="$check_arch\n $dashes$dashes$dashes" check_arch="$check_arch\n\n Valid Architectures for your project: $PROJECT" - for arch in $PROJECT_DIR/$PROJECT/linux/*.conf $PROJECT_DIR/$PROJECT/linux/*/linux.$TARGET_ARCH.conf; do + for arch in $linux_config_dir/*.conf $linux_config_dir/*/linux.$TARGET_ARCH.conf; do check_arch="$check_arch\n - $(basename $arch | cut -f2 -d".")" done echo -e $check_arch diff --git a/config/options b/config/options index 2d86042a94..71706b7a7c 100644 --- a/config/options +++ b/config/options @@ -28,7 +28,7 @@ fi ROOT=`pwd` DISTRO_DIR="$ROOT/distributions" PROJECT_DIR="$ROOT/projects" -LINUX_DEPENDS="$PROJECT_DIR/$PROJECT/linux/linux.$TARGET_ARCH.conf $ROOT/packages/linux/package.mk" +LINUX_DEPENDS="$PROJECT_DIR/$PROJECT/linux/linux.$TARGET_ARCH.conf $PROJECT_DIR/$PROJECT/devices/$DEVICE/linux/linux.$TARGET_ARCH.conf $ROOT/packages/linux/package.mk" [ "$TARGET_ARCH" = "x86_64" ] && LINUX_DEPENDS+=" $ROOT/packages/linux-firmware/intel-ucode/package.mk $ROOT/packages/linux-firmware/x86-firmware/package.mk" # include versioning @@ -49,6 +49,11 @@ LINUX_DEPENDS="$PROJECT_DIR/$PROJECT/linux/linux.$TARGET_ARCH.conf $ROOT/package . $PROJECT_DIR/$PROJECT/options fi +# read board options if available + if [ -f "$PROJECT_DIR/$PROJECT/devices/$DEVICE/options" ]; then + . $PROJECT_DIR/$PROJECT/devices/$DEVICE/options + fi + # Need to point to your actual cc # If you have ccache installed, take care that LOCAL_CC don't point to it LOCAL_CC=`which gcc` diff --git a/config/path b/config/path index 31fe72150f..8fedc34dcd 100644 --- a/config/path +++ b/config/path @@ -19,9 +19,16 @@ set -e HOST_NAME=`$LOCAL_CC -dumpmachine` TARGET_NAME=$TARGET_GCC_ARCH-libreelec-linux-gnu${TARGET_ABI} -BUILD=$BUILD_BASE.$DISTRONAME-$PROJECT.$TARGET_ARCH-$LIBREELEC_VERSION -if [ "$LIBREELEC_VERSION" = "devel" ] ; then - BUILD=$BUILD_BASE.$DISTRONAME-$PROJECT.$TARGET_ARCH-$OS_VERSION-$LIBREELEC_VERSION +if [ -n "$DEVICE" ]; then + BUILD=$BUILD_BASE.$DISTRONAME-$PROJECT.$DEVICE.$TARGET_ARCH-$LIBREELEC_VERSION + if [ "$LIBREELEC_VERSION" = "devel" ] ; then + BUILD=$BUILD_BASE.$DISTRONAME-$PROJECT.$DEVICE.$TARGET_ARCH-$OS_VERSION-$LIBREELEC_VERSION + fi +else + BUILD=$BUILD_BASE.$DISTRONAME-$PROJECT.$TARGET_ARCH-$LIBREELEC_VERSION + if [ "$LIBREELEC_VERSION" = "devel" ] ; then + BUILD=$BUILD_BASE.$DISTRONAME-$PROJECT.$TARGET_ARCH-$OS_VERSION-$LIBREELEC_VERSION + fi fi if [ -n "$BUILD_SUFFIX" ]; then @@ -179,7 +186,11 @@ XORG_PATH_DRIVERS=/usr/lib/xorg/modules/drivers . config/optimize if [ -z "$CCACHE_DIR" ]; then + if [ -n "$DEVICE" ]; then + export CCACHE_DIR=$ROOT/.ccache/$PROJECT.$DEVICE.$TARGET_ARCH-$OS_VERSION + else export CCACHE_DIR=$ROOT/.ccache/$PROJECT.$TARGET_ARCH-$OS_VERSION + fi fi export MAKEFLAGS=-j$CONCURRENCY_MAKE_LEVEL export PKG_CONFIG=$ROOT/$TOOLCHAIN/bin/pkg-config diff --git a/packages/linux/package.mk b/packages/linux/package.mk index 2bb473913c..6c9bd48b7d 100644 --- a/packages/linux/package.mk +++ b/packages/linux/package.mk @@ -75,7 +75,11 @@ if [ "$BUILD_ANDROID_BOOTIMG" = "yes" ]; then fi post_patch() { - if [ -f $PROJECT_DIR/$PROJECT/$PKG_NAME/$PKG_VERSION/$PKG_NAME.$TARGET_ARCH.conf ]; then + if [ -n "$DEVICE" -a -f $PROJECT_DIR/$PROJECT/devices/$DEVICE/$PKG_NAME/$PKG_VERSION/$PKG_NAME.$TARGET_ARCH.conf ]; then + KERNEL_CFG_FILE=$PROJECT_DIR/$PROJECT/devices/$DEVICE/$PKG_NAME/$PKG_VERSION/$PKG_NAME.$TARGET_ARCH.conf + elif [ -n "$DEVICE" -a -f $PROJECT_DIR/$PROJECT/devices/$DEVICE/$PKG_NAME/$PKG_NAME.$TARGET_ARCH.conf ]; then + KERNEL_CFG_FILE=$PROJECT_DIR/$PROJECT/devices/$DEVICE/$PKG_NAME/$PKG_NAME.$TARGET_ARCH.conf + elif [ -f $PROJECT_DIR/$PROJECT/$PKG_NAME/$PKG_VERSION/$PKG_NAME.$TARGET_ARCH.conf ]; then KERNEL_CFG_FILE=$PROJECT_DIR/$PROJECT/$PKG_NAME/$PKG_VERSION/$PKG_NAME.$TARGET_ARCH.conf elif [ -f $PROJECT_DIR/$PROJECT/$PKG_NAME/$PKG_NAME.$TARGET_ARCH.conf ]; then KERNEL_CFG_FILE=$PROJECT_DIR/$PROJECT/$PKG_NAME/$PKG_NAME.$TARGET_ARCH.conf diff --git a/packages/mediacenter/kodi/package.mk b/packages/mediacenter/kodi/package.mk index f43a07dcf5..17f7384951 100644 --- a/packages/mediacenter/kodi/package.mk +++ b/packages/mediacenter/kodi/package.mk @@ -393,23 +393,31 @@ post_makeinstall_target() { cp $PKG_DIR/config/sources.xml $INSTALL/usr/share/kodi/config # install project specific configs - if [ -f $PROJECT_DIR/$PROJECT/kodi/guisettings.xml ]; then + if [ -n "$DEVICE" -a -f $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/guisettings.xml ]; then + cp -R $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/guisettings.xml $INSTALL/usr/share/kodi/config + elif [ -f $PROJECT_DIR/$PROJECT/kodi/guisettings.xml ]; then cp -R $PROJECT_DIR/$PROJECT/kodi/guisettings.xml $INSTALL/usr/share/kodi/config fi - if [ -f $PROJECT_DIR/$PROJECT/kodi/sources.xml ]; then + if [ -n "$DEVICE" -a -f $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/sources.xml ]; then + cp -R $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/sources.xml $INSTALL/usr/share/kodi/config + elif [ -f $PROJECT_DIR/$PROJECT/kodi/sources.xml ]; then cp -R $PROJECT_DIR/$PROJECT/kodi/sources.xml $INSTALL/usr/share/kodi/config fi mkdir -p $INSTALL/usr/share/kodi/system/ - if [ -f $PROJECT_DIR/$PROJECT/kodi/advancedsettings.xml ]; then + if [ -n "$DEVICE" -a -f $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/advancedsettings.xml ]; then + cp $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/advancedsettings.xml $INSTALL/usr/share/kodi/system/ + elif [ -f $PROJECT_DIR/$PROJECT/kodi/advancedsettings.xml ]; then cp $PROJECT_DIR/$PROJECT/kodi/advancedsettings.xml $INSTALL/usr/share/kodi/system/ else cp $PKG_DIR/config/advancedsettings.xml $INSTALL/usr/share/kodi/system/ fi mkdir -p $INSTALL/usr/share/kodi/system/settings - if [ -f $PROJECT_DIR/$PROJECT/kodi/appliance.xml ]; then + if [ -n "$DEVICE" -a -f $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/appliance.xml ]; then + cp $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/appliance.xml $INSTALL/usr/share/kodi/system/settings + elif [ -f $PROJECT_DIR/$PROJECT/kodi/appliance.xml ]; then cp $PROJECT_DIR/$PROJECT/kodi/appliance.xml $INSTALL/usr/share/kodi/system/settings else cp $PKG_DIR/config/appliance.xml $INSTALL/usr/share/kodi/system/settings diff --git a/packages/sysutils/busybox/package.mk b/packages/sysutils/busybox/package.mk index 41f617622a..ed4569902c 100644 --- a/packages/sysutils/busybox/package.mk +++ b/packages/sysutils/busybox/package.mk @@ -244,8 +244,12 @@ makeinstall_init() { touch $INSTALL/etc/fstab ln -sf /proc/self/mounts $INSTALL/etc/mtab - if [ -f $PROJECT_DIR/$PROJECT/initramfs/platform_init ]; then + if [ -n "$DEVICE" -a -f $PROJECT_DIR/$PROJECT/devices/$DEVICE/initramfs/platform_init ]; then + cp $PROJECT_DIR/$PROJECT/devices/$DEVICE/initramfs/platform_init $INSTALL + elif [ -f $PROJECT_DIR/$PROJECT/initramfs/platform_init ]; then cp $PROJECT_DIR/$PROJECT/initramfs/platform_init $INSTALL + fi + if [ -f $INSTALL/platform_init ]; then chmod 755 $INSTALL/platform_init fi diff --git a/scripts/build b/scripts/build index 2dc4f221d6..476f821260 100755 --- a/scripts/build +++ b/scripts/build @@ -54,6 +54,7 @@ STAMP=$STAMPS/$PACKAGE_NAME/build_$TARGET $SCRIPTS/unpack $PACKAGE_NAME STAMP_DEPENDS="$PKG_DIR $PKG_NEED_UNPACK $PROJECT_DIR/$PROJECT/patches/$PKG_NAME" +[ -n "$DEVICE" ] && STAMP_DEPENDS="$STAMP_DEPENDS $PROJECT_DIR/$PROJECT/devices/$DEVICE/patches/$PKG_NAME" if [ -f $STAMP ] ; then . $STAMP diff --git a/scripts/image b/scripts/image index a34e371a0a..3d01eed380 100755 --- a/scripts/image +++ b/scripts/image @@ -67,10 +67,19 @@ if [ -n "$CUSTOM_GIT_HASH" ]; then GIT_HASH="$CUSTOM_GIT_HASH" fi -TARGET_VERSION="$PROJECT.$TARGET_ARCH-$LIBREELEC_VERSION" +if [ -z "$DEVICE" ]; then + TARGET_VERSION="$PROJECT.$TARGET_ARCH-$LIBREELEC_VERSION" +else + TARGET_VERSION="$PROJECT.$DEVICE.$TARGET_ARCH-$LIBREELEC_VERSION" +fi IMAGE_NAME="$DISTRONAME-$TARGET_VERSION" + if [ "$DEVEL_VERSION" = "devel" ] ; then - IMAGE_NAME="$DISTRONAME-$PROJECT.$TARGET_ARCH-$OS_VERSION-$LIBREELEC_VERSION" + if [ -z "$DEVICE" ]; then + IMAGE_NAME="$DISTRONAME-$PROJECT.$TARGET_ARCH-$OS_VERSION-$LIBREELEC_VERSION" + else + IMAGE_NAME="$DISTRONAME-$PROJECT.$DEVICE.$TARGET_ARCH-$OS_VERSION-$LIBREELEC_VERSION" + fi fi if [ "$PROJECT" == "imx6" -a -n "$SYSTEM" ]; then @@ -204,6 +213,17 @@ if [ -d "$PROJECT_DIR/$PROJECT/filesystem" ]; then done fi +# copy board related files to filesystem +if [ -n "$DEVICE" -a -d "$PROJECT_DIR/$PROJECT/devices/$DEVICE/filesystem" ]; then + cp -PR $PROJECT_DIR/$PROJECT/devices/$DEVICE/filesystem/* $INSTALL + # install device specific systemd services + for service in $PROJECT_DIR/$PROJECT/devices/$DEVICE/filesystem/usr/lib/systemd/system/*.service ; do + if [ -f "$service" ] ; then + enable_service $(basename $service) + fi + done +fi + # run depmod MODVER=$(basename $(ls -d $INSTALL/lib/modules/*)) find $INSTALL/lib/modules/$MODVER/ -name *.ko | \ @@ -265,7 +285,9 @@ if [ "$1" = "release" -o "$1" = "mkimage" -o "$1" = "amlpkg" -o "$1" = "noobs" ] cp -R $BOOTLOADER_DIR/files/* $RELEASE_DIR fi - if [ -f $PROJECT_DIR/$PROJECT/bootloader/release ]; then + if [ -n "$DEVICE" -a -f $PROJECT_DIR/$PROJECT/devices/$DEVICE/bootloader/release ]; then + . $PROJECT_DIR/$PROJECT/devices/$DEVICE/bootloader/release + elif [ -f $PROJECT_DIR/$PROJECT/bootloader/release ]; then . $PROJECT_DIR/$PROJECT/bootloader/release elif [ -f "$BOOTLOADER_DIR"/release ]; then . $BOOTLOADER_DIR/release diff --git a/scripts/skip_unpack b/scripts/skip_unpack index c9a58688df..78248f0839 100755 --- a/scripts/skip_unpack +++ b/scripts/skip_unpack @@ -38,6 +38,7 @@ if [ -f $STAMP ] ; then rm -f $STAMP STAMP_DEPENDS="$PKG_DIR $PKG_NEED_UNPACK $PROJECT_DIR/$PROJECT/patches/$PKG_NAME" + [ -n "$DEVICE" ] && STAMP_DEPENDS="$STAMP_DEPENDS $PROJECT_DIR/$PROJECT/devices/$DEVICE/patches/$PKG_NAME" PKG_DEEPMD5=$(find $STAMP_DEPENDS -exec md5sum {} \; 2>/dev/null | sort | md5sum | cut -d" " -f1) for i in PKG_NAME PKG_DEEPMD5; do eval val=\$$i diff --git a/scripts/unpack b/scripts/unpack index a264c3f805..3e3d1855af 100755 --- a/scripts/unpack +++ b/scripts/unpack @@ -39,6 +39,7 @@ mkdir -p $BUILD [ ! -d "$SOURCES/$1" -a ! -d "$PKG_DIR/sources" ] && exit 0 STAMP_DEPENDS="$PKG_DIR $PKG_NEED_UNPACK $PROJECT_DIR/$PROJECT/patches/$PKG_NAME" +[ -n "$DEVICE" ] && STAMP_DEPENDS="$STAMP_DEPENDS $PROJECT_DIR/$PROJECT/devices/$DEVICE/patches/$PKG_NAME" for i in $BUILD/$1-*; do if [ -d $i -a -f "$i/.libreelec-unpack" ] ; then @@ -126,7 +127,9 @@ for i in $PKG_DIR/patches/$PKG_NAME-*.patch \ $PKG_DIR/patches/$PKG_VERSION/*.patch \ $PKG_DIR/patches/$PKG_VERSION/$PATCH_ARCH/*.patch \ $PROJECT_DIR/$PROJECT/patches/$PKG_NAME/*.patch \ - $PROJECT_DIR/$PROJECT/patches/$PKG_NAME/$PKG_VERSION/*.patch; do + $PROJECT_DIR/$PROJECT/patches/$PKG_NAME/$PATCH_ARCH/*.patch \ + $PROJECT_DIR/$PROJECT/patches/$PKG_NAME/$PKG_VERSION/*.patch \ + $PROJECT_DIR/$PROJECT/devices/$DEVICE/patches/$PKG_NAME/*.patch; do if [ $(dirname $i) = "$PKG_DIR/patches" ]; then PATCH_DESC="(common)" @@ -136,8 +139,12 @@ for i in $PKG_DIR/patches/$PKG_NAME-*.patch \ PATCH_DESC="($PKG_VERSION - $PATCH_ARCH)" elif [ $(dirname $i) = "$PROJECT_DIR/$PROJECT/patches/$PKG_NAME" ]; then PATCH_DESC="(project)" + elif [ $(dirname $i) = "$PROJECT_DIR/$PROJECT/patches/$PKG_NAME/$PATCH_ARCH" ]; then + PATCH_DESC="(project - $PATCH_ARCH)" elif [ $(dirname $i) = "$PROJECT_DIR/$PROJECT/patches/$PKG_NAME/$PKG_VERSION" ]; then PATCH_DESC="(project - $PKG_VERSION)" + elif [ $(dirname $i) = "$PROJECT_DIR/$PROJECT/devices/$DEVICE/patches/$PKG_NAME" ]; then + PATCH_DESC="(device)" fi if [ -f "$i" ]; then