Lakka-LibreELEC/config/options
2023-01-18 11:15:04 +01:00

170 lines
5.3 KiB
Plaintext

# Do not build as root. Ever.
if [[ "${EUID}" -eq 0 ]]; then
echo "Building as the root user is NOT supported. Use a regular user account for the build." 1>&2
exit 1
fi
# Spaces in paths are verboten
if [[ ${PWD} =~ [[:space:]] ]]; then
echo "Current PWD: \"${PWD}\"" 1>&2
echo 1>&2
echo "Building in a folder that includes spaces is NOT supported. Use a folder without spaces." 1>&2
exit 1
fi
# set default language for buildsystem
export LC_ALL=C
# set default independent variables
ROOT="${PWD}"
DISTRO_DIR="${ROOT}/distributions"
PROJECT_DIR="${ROOT}/projects"
# determines DISTRO, if not forced by user
DISTRO="${DISTRO:-Lakka}"
# determines PROJECT, if not forced by user
export PROJECT="${PROJECT:-Generic}"
# default to Generic device if building Generic project without device set
if [ "${PROJECT}" = "Generic" -a -z "${DEVICE}" ]; then
export DEVICE="Generic"
fi
# determines TARGET_ARCH, if not forced by user
export ARCH="${ARCH:-x86_64}"
TARGET_ARCH="${ARCH}"
# include arm-mem package on arm
if [ "${TARGET_ARCH}" = "arm" ]; then
ARM_MEM_SUPPORT="yes"
else
ARM_MEM_SUPPORT="no"
fi
# include helper functions
. config/functions
# read DISTRO version information
. "${DISTRO_DIR}/${DISTRO}/version" || die "\nERROR: No distro version present\n"
# read DISTRO options
if [ -f "${DISTRO_DIR}/${DISTRO}/options" ]; then
. "${DISTRO_DIR}/${DISTRO}/options"
fi
# read PROJECT options
if [ -f "${PROJECT_DIR}/${PROJECT}/options" ]; then
. "${PROJECT_DIR}/${PROJECT}/options"
fi
# read DEVICE options
if [ -f "${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/options" ]; then
. "${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/options"
fi
# read architecture defaults
if [ -f "config/arch.${TARGET_ARCH}" ]; then
. "config/arch.${TARGET_ARCH}"
fi
# projects can set KERNEL_NAME (kernel.img)
KERNEL_NAME="${KERNEL_NAME:-KERNEL}"
LINUX_DEPENDS="${PROJECT_DIR}/${PROJECT}/linux ${PROJECT_DIR}/${PROJECT}/patches/linux ${PROJECT_DIR}/${PROJECT}/packages/linux ${ROOT}/packages/linux"
[ -n "${DEVICE}" ] && LINUX_DEPENDS+=" ${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/linux ${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/patches/linux ${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/packages/linux"
# Need to point to your actual cc
# If you have ccache installed, take care that LOCAL_CC does not point to it
[ -z "${LOCAL_CC}" ] && export LOCAL_CC="$(command -v gcc)"
if [ -z "${LOCAL_CC}" ]; then
die "***** Please install gcc - run scripts/checkdeps *****" "127"
fi
# Need to point to your actual g++
# If you have ccache installed, take care that LOCAL_CXX does not point to it
[ -z "${LOCAL_CXX}" ] && export LOCAL_CXX="$(command -v g++)"
# verbose compilation mode (yes/no)
VERBOSE="${VERBOSE:-yes}"
# Concurrency make level (-j option)
# Try values between 1 and number of processor cores present.
# default: use all cores
[ -z "${CONCURRENCY_MAKE_LEVEL}" ] && export CONCURRENCY_MAKE_LEVEL=$(nproc)
[ -z "${CONCURRENCY_LOAD}" ] && export CONCURRENCY_LOAD=$(python3 -c "import os; print(f'{os.cpu_count() * 1.5:.2f}')")
# cache size for ccache
# Set the maximum size of the files stored in the cache. You can specify a
# value in gigabytes, megabytes or kilobytes by appending a G, M or K to the
# value. The default is gigabytes. The actual value stored is rounded down to
# the nearest multiple of 16 kilobytes. Keep in mind this per project .ccache
# directory.
CCACHE_CACHE_SIZE="10G"
# compression level for ccache
# This option determines the level at which ccache will compress object files
# using the real-time compression algorithm Zstandard. It only has effect if
# compression is enabled (which it is by default). Zstandard is extremely fast
# for decompression and very fast for compression for lower compression
# levels. The default is 0. The value 0 means that ccache will choose a
# suitable zstd level, currently 1.
CCACHE_COMPRESSLEVEL="0"
# set addon paths
if [ -z "$ADDON_PATH" ]; then
if [ -n "$ADDON_PROJECT" ]; then
ADDON_PATH="$ADDON_VERSION/$ADDON_PROJECT/$TARGET_ARCH"
else
ADDON_PATH="$ADDON_VERSION/$TARGET_ARCH"
fi
fi
if [ -z "$ADDON_URL" ]; then
ADDON_URL="$ADDON_SERVER_URL/$ADDON_PATH"
fi
# read local persistent options from $ROOT if available
if [ -f "${ROOT}/.libreelec/options" ]; then
. "${ROOT}/.libreelec/options"
fi
# read global persistent options from $HOME if available
if [ -f "${HOME}/.libreelec/options" ]; then
. "${HOME}/.libreelec/options"
fi
if [ "${LOCAL_CCACHE_SUPPORT}" = "yes" ] && [ -z "${CCACHE_DISABLE}" ]; then
# like LOCAL_CC check for local ccache only on the very first
# call to config/options, before toolchain has been added to the path,
# otherwise we might pick up ccache from toolchain/bin here
if [ -z "${LOCAL_CCACHE}" ] && [ "${LOCAL_CCACHE_CHECKED}" != "yes" ]; then
export LOCAL_CCACHE="$(command -v ccache)"
export LOCAL_CCACHE_CHECKED="yes"
fi
else
export LOCAL_CCACHE=""
fi
# overwrite OEM_SUPPORT via commandline
if [ "${OEM}" = "yes" -o "${OEM}" = "no" ]; then
OEM_SUPPORT="${OEM}"
fi
check_config
. config/graphic
. config/path $1
## package processing
# If the package caches are unset, then populate them
init_package_cache
if [ -z "${DEFAULT_PYTHON_VERSION+set}" ]; then
export DEFAULT_PYTHON_VERSION="$(get_pkg_variable Python3 PKG_PYTHON_VERSION)"
fi
# set package metadata
source_package "${1}"