build: autocompilation avec choix des révisions et configuration de la compilation

This commit is contained in:
Nicolas Hordé 2020-09-19 20:40:15 +02:00
parent 9fb0a7de6d
commit 4cf187aabd
7 changed files with 77 additions and 28 deletions

View File

@ -1,2 +0,0 @@
#!/bin/bash
docker build . -t cos2000-compiler-alpine

View File

@ -1,2 +0,0 @@
#!/bin/bash
docker build . -t cos2000-compiler

50
make.sh
View File

@ -1,23 +1,47 @@
#!/bin/bash #!/bin/bash
function tool {
echo "*** Fabrication des outils de compilation par Docker (version ${VERSION} config ${CONFIGURATION})"
docker build - -t $COMPILER < ./docker/dockerfile.${CONFIGURATION}
}
function configuration {
echo "*** Création du fichier de configuration"
echo -en "compilation=alpine\nvideo=vesa" > ./configuration
}
echo "Autorisation de docker à se connecter à l'écran :0" echo "Autorisation de docker à se connecter à l'écran :0"
xhost +local:docker xhost +local:docker
DOCKER=$(docker -v| grep build)
ALPINE=$(docker image ls| grep cos2000-compiler-alpine)
COMPILER=$(docker image ls| grep cos2000-compiler)
PWD=$(pwd) PWD=$(pwd)
FILE=${PWD}/configuration
if [ ! -f "$FILE" ]; then
configuration
fi
DOCKER=$(docker -v| grep build)
if [ "${DOCKER}" == "" ]; then if [ "${DOCKER}" == "" ]; then
echo "Docker n'est pas installé..." echo "Docker n'est pas installé..."
echo "*** installation si sous gestionnaire de paquet debian (.deb)" echo "*** installation si sous gestionnaire de paquet debian (.deb)"
sudo apt-get install docker sudo apt-get install docker
exit exit
elif [ "${ALPINE}" != "" ]; then fi
echo "*** lancement de la version Alpine Linux" CONFIGURATION=$(sed -rn 's/^compilation=([^\n]+)$/\1/p' ./configuration)
docker run --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --privileged -v ${PWD}:/data cos2000-compiler-alpine make $1 VERSION=$(git rev-parse --short HEAD)
elif [ "${COMPILER}" != "" ]; then COMPILER=cos2000-compiler-${CONFIGURATION}-${VERSION}
echo "*** lancement de la version Debian" if [ "$1" == "tool" ]; then
docker run --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --privileged -v ${PWD}:/data cos2000-compiler make $1 tool
else exit
echo "Docker est installé mais aucune image docker n'est fonctionnelle..." fi
echo "*** compilation de l'image docker" if [ "$1" == "configuration" ]; then
docker build ${PWD}/docker/alpine -t cos2000-compiler-alpine configuration
exit
fi
PRESENT=$(docker image ls| grep $COMPILER)
if [ "${PRESENT}" == "" ]; then
tool
fi
echo "*** lancement de la version ${VERSION}"
if [ "$1" == "config" ]; then
docker run --rm -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --privileged -v ${PWD}:/data $COMPILER make $1
else
docker run --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --privileged -v ${PWD}:/data $COMPILER make $1
fi fi

View File

@ -183,3 +183,11 @@ qemu64: killer
$(WAIT2S) $(WAIT2S)
$(SPICE) $(SPICE)
config:
@echo "*** Options de compilation"
@echo "Quelle distribution utiliser avec Docker comme environnement de compilation ?"
@echo "Alpine Linux ou Debian [A*/D]"
@read line; if [ $$line = "D" ]; then sed -i -r 's/compilation=.*/compilation=debian/' configuration ; else sed -i -r 's/compilation=.*/compilation=alpine/' configuration ; fi
@echo "Quel mode vidéo préférez vous utiliser ?"
@echo "VESA ou VGA [E*/G]"
@read line; if [ $$line = "G" ]; then sed -i -r 's/video=.*/video=vga/' configuration ; else sed -i -r 's/video=.*/video=vesa/' configuration ; fi

33
menu.sh
View File

@ -3,7 +3,7 @@ PWD=$(pwd)
FILE=${PWD}/README.md FILE=${PWD}/README.md
if [ ! -f "$FILE" ]; then if [ ! -f "$FILE" ]; then
echo "Les sources ne sont pas complets..." echo "Les sources ne sont pas complets..."
echo "* Récupération des sources" echo "*** Récupération des sources"
VERSION=$(git --version|grep version) VERSION=$(git --version|grep version)
if [ "${VERSION}" == "" ]; then if [ "${VERSION}" == "" ]; then
echo "Git n'est pas installé, veuillez l'installer et relancer le script" echo "Git n'est pas installé, veuillez l'installer et relancer le script"
@ -15,6 +15,10 @@ if [ ! -f "$FILE" ]; then
git reset --hard git reset --hard
rm -rf ../menu.sh rm -rf ../menu.sh
fi fi
FILE=${PWD}/configuration
if [ ! -f "$FILE" ]; then
./make.sh configuration
fi
while true while true
do do
clear clear
@ -28,17 +32,18 @@ echo "2u Emulation de COS2000 (uefi)"
echo "3l Débuguage de COS2000 (legacy)" echo "3l Débuguage de COS2000 (legacy)"
echo "3u Débuguage de COS2000 (uefi)" echo "3u Débuguage de COS2000 (uefi)"
echo "4l Débuguage de COS2000 boot en mode réel (legacy)" echo "4l Débuguage de COS2000 boot en mode réel (legacy)"
echo "4u Débuguage de COS2000 boot en mode réel (legacy)" echo "4u Débuguage de COS2000 boot en mode réel (uefi)"
echo "5 Réalisez une sauvegarde" echo "5 Réalisez une sauvegarde"
echo "6 Tuer tout les processus" echo "6 Tuer tout les processus"
echo "7 Nettoyer les sources" echo "7 Nettoyer les sources"
echo "8 Voir le disque en hexadécimal" echo "8 Voir le disque en hexadécimal"
echo "9 Voir le système en hexadécimal" echo "9 Voir le système en hexadécimal"
echo "c Changer la version de developpement" echo "c Changer la version de développement"
echo "o Changer les options de développement"
echo "0 Quitter" echo "0 Quitter"
echo "------------------------------------------" echo "------------------------------------------"
echo "Choisissez l'action à réaliser..." echo "Choisissez l'action à réaliser..."
read answer read -p"?" answer
clear clear
case "${answer}" in case "${answer}" in
0*) exit;; 0*) exit;;
@ -54,20 +59,36 @@ case "${answer}" in
7*) ./make.sh clean;; 7*) ./make.sh clean;;
8*) ./make.sh view-dsk|more;; 8*) ./make.sh view-dsk|more;;
9*) ./make.sh view-sys|more;; 9*) ./make.sh view-sys|more;;
o*) ./make.sh config;;
c*) echo "Version disponibles:" c*) echo "Version disponibles:"
SELECT=$(git branch|grep "*"|tr -d "* ") SELECT=$(git branch|grep "*"|tr -d "* ")
NUM=1 NUM=1
echo "XX Hash d'une révision particulière"
while read LINE while read LINE
do do
echo "${NUM} ${LINE}" echo "${NUM} ${LINE}"
(( NUM++ )) (( NUM++ ))
done < <(git branch -lr|tr -d "* "|grep -v HEAD|sed s/".*origin\/"//) done < <(git branch -lr|tr -d "* "|grep -v HEAD|sed s/".*origin\/"//)
read ANSWER read -p"?" ANSWER
COUNT=$(echo -n ${ANSWER}|wc -c)
if [ "${COUNT}" == "1" ]; then
CHOOSE=$(git branch -lr|tr -d "* "|grep -v HEAD|sed s/".*origin\/"//|tr "\n" " "|cut -d " " -f${ANSWER}) CHOOSE=$(git branch -lr|tr -d "* "|grep -v HEAD|sed s/".*origin\/"//|tr "\n" " "|cut -d " " -f${ANSWER})
echo "vous avez selectionné $ALL..." echo "vous avez selectionné une branche $CHOOSE..."
else
EXIST=$(git show ${ANSWER})
if [ "${EXIST}" != "" ]; then
CHOOSE=${ANSWER}
echo "vous avez selectionné une révision ${choose}..."
fi
fi
if [ "${CHOOSE}" != "" ]; then
echo "*** Application de la version ${CHOOSE}"
git pull
git checkout $CHOOSE git checkout $CHOOSE
git clean -fd git clean -fd
git reset --hard git reset --hard
./make.sh tool
fi
read read
;; ;;
esac esac