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 cdde4786fd..eb279cd02c 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/scripts/image b/scripts/image index a34e371a0a..d2f29962ff 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 | \ diff --git a/scripts/unpack b/scripts/unpack index a264c3f805..6d970f499e 100755 --- a/scripts/unpack +++ b/scripts/unpack @@ -126,7 +126,8 @@ 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/$PKG_VERSION/*.patch; \ + $PROJECT_DIR/$PROJECT/devices/$DEVICE/patches/$PKG_NAME/*.patch do if [ $(dirname $i) = "$PKG_DIR/patches" ]; then PATCH_DESC="(common)"