meta-dcm/scripts/envsetup.sh

213 lines
7.2 KiB
Bash
Executable File

#!/bin/bash -
unalias -a
# Setze den Pfad zum Meta-Layer-Root
if [ -z "$META_LAYER_ROOT" ]; then
_META_LAYER_ROOT=layers/meta-st
else
_META_LAYER_ROOT=$META_LAYER_ROOT
fi
# Setze ROOTOE für oe sdk baseline
ROOTOE=$PWD
while test ! -d "${ROOTOE}/${_META_LAYER_ROOT}" && test "${ROOTOE}" != "/"
do
ROOTOE=$(dirname ${ROOTOE})
done
if test "${ROOTOE}" == "/"
then
echo "[ERROR] Du versuchst das Skript außerhalb des OE SDK-Verzeichnisses zu starten"
return 1
fi
# Konstantes Build-Verzeichnis definieren
BUILD_DIR=build-openstlinuxeglfs-stm32mp157c-dcm
# Prüfe, ob alle notwendigen Layer existieren
check_layers() {
local missing_layers=()
# Liste aller Layer, die geprüft werden sollen
local layers=(
"layers/openembedded-core/meta"
"layers/meta-openembedded/meta-oe"
"layers/meta-openembedded/meta-python"
"layers/meta-openembedded/meta-networking"
"layers/meta-openembedded/meta-gnome"
"layers/meta-openembedded/meta-multimedia"
"layers/meta-openembedded/meta-webserver"
"layers/meta-st/meta-st-stm32mp"
"layers/meta-st/meta-st-stm32mp-addons"
"layers/meta-st/meta-st-openstlinux"
"layers/meta-dcm"
)
for layer in "${layers[@]}"; do
if [ ! -d "${ROOTOE}/${layer}" ]; then
missing_layers+=("${layer}")
fi
done
if [ ${#missing_layers[@]} -gt 0 ]; then
echo "Warnung: Folgende Layer fehlen in deinem Setup:"
for layer in "${missing_layers[@]}"; do
echo " ${layer}"
done
echo "Das Script wird fortgesetzt, aber es könnten Probleme auftreten."
echo
fi
}
# Entferne alte dtc 1.6.1 Datei, falls vorhanden
remove_old_dtc() {
DTC_RECIPE_FILE="${ROOTOE}/layers/meta-dcm/recipes-devtools/dtc/dtc_1.6.1.bb"
if [ -f "${DTC_RECIPE_FILE}" ]; then
echo "Entferne altes dtc 1.6.1 Recipe..."
rm -f "${DTC_RECIPE_FILE}"
fi
}
# Erstelle bbappend für optee-stm32mp-addons, um das Repository-Problem zu beheben
create_optee_bbappend() {
OPTEE_APPEND_DIR="${ROOTOE}/layers/meta-dcm/recipes-security/optee"
OPTEE_APPEND_FILE="${OPTEE_APPEND_DIR}/optee-stm32mp-addons_%.bbappend"
mkdir -p "${OPTEE_APPEND_DIR}"
echo "Erstelle bbappend für optee-stm32mp-addons, um den Branch zu korrigieren..."
cat > "${OPTEE_APPEND_FILE}" << 'EOF'
# Korrigiere den Branch im optee-stm32mp-addons Rezept
SRC_URI = "git://github.com/STMicroelectronics/optee-stm32mp-addons;protocol=https;branch=master"
# Erzwinge kein Klonen bei Fehlern, falls das Repo vorübergehend nicht erreichbar ist
BB_FETCH_PREMIRRORONLY = "1"
EOF
}
# Initialisiere oder aktualisiere das Build-Verzeichnis
setup_build_dir() {
if [ ! -d "${ROOTOE}/${BUILD_DIR}" ]; then
echo "Erstelle neues Build-Verzeichnis: ${BUILD_DIR}"
# Initiiere das buildsystem mit dem default oe-init-build-env script
source ${ROOTOE}/layers/openembedded-core/oe-init-build-env ${BUILD_DIR} > /dev/null
is_new_build=true
else
echo "Verwende existierendes Build-Verzeichnis: ${BUILD_DIR}"
# Prüfe, ob conf-Verzeichnis existiert oder beschädigt ist
if [ ! -d "${ROOTOE}/${BUILD_DIR}/conf" ] || [ ! -f "${ROOTOE}/${BUILD_DIR}/conf/local.conf" ]; then
echo "Conf-Verzeichnis fehlt oder ist beschädigt, initialisiere neu..."
source ${ROOTOE}/layers/openembedded-core/oe-init-build-env ${BUILD_DIR} > /dev/null
is_new_build=true
else
# Initiiere das buildsystem mit dem default oe-init-build-env script
source ${ROOTOE}/layers/openembedded-core/oe-init-build-env ${BUILD_DIR} > /dev/null
is_new_build=false
fi
fi
}
# Prüfe Layer vor dem Fortfahren
check_layers
# Entferne alte dtc 1.6.1 Datei
remove_old_dtc
# Erstelle bbappend für optee-stm32mp-addons
create_optee_bbappend
# Setup Build-Verzeichnis
setup_build_dir
# Aktualisiere nur die Konfigurationsdateien, wenn es ein neuer Build ist oder wenn Flag gesetzt ist
if [ "$is_new_build" = true ] || [ "$FORCE_CONFIG_UPDATE" = true ]; then
# Aktualisiere bblayers.conf
echo "Aktualisiere bblayers.conf mit allen notwendigen Layern..."
cat > ${BUILDDIR}/conf/bblayers.conf << EOF
# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
LCONF_VERSION = "7"
BBPATH = "\${TOPDIR}"
BBFILES ?= ""
BBLAYERS ?= " \\
${ROOTOE}/layers/openembedded-core/meta \\
${ROOTOE}/layers/meta-openembedded/meta-oe \\
${ROOTOE}/layers/meta-openembedded/meta-python \\
${ROOTOE}/layers/meta-openembedded/meta-networking \\
${ROOTOE}/layers/meta-openembedded/meta-gnome \\
${ROOTOE}/layers/meta-openembedded/meta-multimedia \\
${ROOTOE}/layers/meta-openembedded/meta-webserver \\
${ROOTOE}/layers/meta-st/meta-st-stm32mp \\
${ROOTOE}/layers/meta-st/meta-st-stm32mp-addons \\
${ROOTOE}/layers/meta-st/meta-st-openstlinux \\
${ROOTOE}/layers/meta-dcm \\
"
EOF
# Aktualisiere local.conf nur, wenn es ein neuer Build ist
if [ "$is_new_build" = true ]; then
echo "Aktualisiere local.conf mit den richtigen Einstellungen..."
cat >> ${BUILDDIR}/conf/local.conf << EOF
# Distribution
DISTRO = "openstlinux-eglfs"
# Machine
MACHINE = "stm32mp157c-dcm"
# Set EULA acceptance
ACCEPT_EULA_stm32mp157c-dcm = "1"
# Optionen für Download-Probleme
BB_FETCH_PREMIRRORONLY = "1"
FETCHCMD_git = "git -c http.sslVerify=false"
EOF
fi
else
echo "Verwende bestehende Konfigurationsdateien."
fi
# Füge linux-stm32mp_%.bbappend hinzu, um mit DTC 1.7.0 zu arbeiten
KERNEL_APPEND_DIR="${ROOTOE}/layers/meta-dcm/recipes-kernel/linux"
KERNEL_APPEND_FILE="${KERNEL_APPEND_DIR}/linux-stm32mp_%.bbappend"
if [ ! -f "${KERNEL_APPEND_FILE}" ] || [ "$FORCE_CONFIG_UPDATE" = true ]; then
echo "Erstelle linux-stm32mp_%.bbappend in meta-dcm Layer für die Arbeit mit DTC 1.7.0"
mkdir -p "${KERNEL_APPEND_DIR}"
cat > "${KERNEL_APPEND_FILE}" << 'EOF'
# Vorverarbeiten der DTS-Dateien für dtc 1.7.0
do_compile:prepend() {
# Setze erweiterte DTC-FLAGS für Include-Pfade
export DTC_FLAGS="-i ${S}/include -i ${S}/arch/arm/boot/dts -i ${S}/scripts/dtc/include-prefixes"
# Verwende CPP zum Vorverarbeiten der DTS-Dateien
if [ -d ${S}/arch/arm/boot/dts ]; then
DTS_DIR=${S}/arch/arm/boot/dts
DTS_FILES=$(find ${DTS_DIR} -name "stm32mp157c-*.dts")
for dts_file in ${DTS_FILES}; do
# Erstelle Verzeichnis für vorprozessierte Dateien
dirname_dts=$(dirname ${dts_file})
basename_dts=$(basename ${dts_file})
mkdir -p ${B}/preprocessed_dts
echo "Vorverarbeiten von $dts_file mit CPP..."
# Vorverarbeiten mit CPP, um alle Includes zu verarbeiten
${CPP} -nostdinc -undef -x assembler-with-cpp -I${DTS_DIR} -I${S}/include -I${S}/arch/arm/boot/dts -I${S}/scripts/dtc/include-prefixes \
-o ${B}/preprocessed_dts/${basename_dts} ${dts_file}
# Ersetze Original-DTS mit vorverarbeiteter DTS
cp ${B}/preprocessed_dts/${basename_dts} ${dts_file}
done
fi
}
EOF
fi
echo ""
echo "meta-dcm Layer Setup abgeschlossen."
echo "Du verwendest Build-Verzeichnis: ${BUILD_DIR}"
echo "Du kannst nun mit 'bitbake <recipe>' beginnen."
echo ""