# 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}" # determines the default device, if not forced by user DEVICE="${DEVICE:-handheld}" # 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}"