154 lines
4.9 KiB
Text
154 lines
4.9 KiB
Text
# 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:-JELOS}"
|
|
|
|
# determines PROJECT, if not forced by user
|
|
PROJECT="${PROJECT:-PC}"
|
|
|
|
# determines TARGET_ARCH, if not forced by user
|
|
ARCH="${ARCH:-x86_64}"
|
|
TARGET_ARCH="${ARCH}"
|
|
|
|
# determine if we are building 32bit support
|
|
ENABLE_32BIT="${ENABLE_32BIT-true}"
|
|
|
|
# determines the default device, if not forced by user
|
|
DEVICE="${DEVICE:-AMD64}"
|
|
|
|
# the version is the date
|
|
OS_VERSION=$(date +%Y%m%d)
|
|
|
|
# defines the born on date of a build
|
|
BUILD_DATE=$(date)
|
|
|
|
# include helper functions
|
|
. config/functions
|
|
|
|
# read DISTRO options if available
|
|
if [ -f "${DISTRO_DIR}/${DISTRO}/options" ]; then
|
|
. "${DISTRO_DIR}/${DISTRO}/options"
|
|
fi
|
|
|
|
# read PROJECT options if available
|
|
if [ -f "${PROJECT_DIR}/${PROJECT}/options" ]; then
|
|
. "${PROJECT_DIR}/${PROJECT}/options"
|
|
fi
|
|
|
|
# read DEVICE options if available
|
|
if [ -f "${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/options" ]; then
|
|
. "${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/options"
|
|
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"
|
|
[[ "${TARGET_ARCH}" =~ i*86|x86_64 ]] && LINUX_DEPENDS+=" ${ROOT}/packages/linux-firmware/intel-ucode ${ROOT}/packages/linux-firmware/kernel-firmware"
|
|
|
|
# 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 *****" "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)
|
|
|
|
# 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="20G"
|
|
|
|
# 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"
|
|
|
|
# read local persistent options from ${ROOT} if available
|
|
if [ -f "${ROOT}/.jelos/options" ]; then
|
|
. "${ROOT}/.jelos/options"
|
|
fi
|
|
|
|
# read global persistent options from $HOME if available
|
|
if [ -f "${HOME}/.jelos/options" ]; then
|
|
. "${HOME}/.jelos/options"
|
|
fi
|
|
|
|
# read global persistent options from ${DOCKER_WORK_DIR} if available
|
|
if [ -f "${DOCKER_WORK_DIR}/.jelos/options" ]; then
|
|
. "${DOCKER_WORK_DIR}/.jelos/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}"
|