3.2.1.8.2 : Script des paquets binaires
Voici le phoenix_createPackages.sh : Définissions l'interpreteur de notre script :
1 |
#!/bin/bash
|
Nous voulons créer un script qui puisse compiler les paquets d'un programme sur tous les OS. Il nous faut donc, un type de paquets, un dossier de sortie et une option pour activer les paquets spécialisés pour la vectorisation :
1 2 3 |
PACKAGE_TYPE="$1" OUTPUT_LINUX_DIR="$2" USE_VECTORISATION="$3" |
Récupérons le nom du projet courrant :
1 |
DIR_SOFT_NAME=`basename ${PWD}` |
Faisons un petit nettoyage :
1 2 |
rm -fr ${OUTPUT_LINUX_DIR} mkdir -p ${OUTPUT_LINUX_DIR} |
Cette fonction va générer les archives binaires du projet (.tar.gz, .tar.Z et .sh). Basiquement, on compile avec les options qui vont bien et on appelle CPack :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
function createBinaryArchive(){ EXTENTION="$1" echo "Create binary archive for extension '${EXTENTION}'" if [ ! -z "$1" ] then cd .. mv $DIR_SOFT_NAME $DIR_SOFT_NAME-${EXTENTION} cd $DIR_SOFT_NAME-${EXTENTION} fi if [ -d build ] then echo "Remove existing directory build" rm -fr build fi mkdir -p build cd build if [ -z "$1" ] then cmake .. -DSELF_TESTS_MODE=no -DCMAKE_INSTALL_PREFIX=/usr || cmake3 .. -DSELF_TESTS_MODE=no -DCMAKE_INSTALL_PREFIX=/usr else cmake .. -D${EXTENTION}=yes -DPROGRAM_EXTENSION=${EXTENTION} -DSELF_TESTS_MODE=no -DCMAKE_INSTALL_PREFIX=/usr || cmake3 .. -D${EXTENTION}=yes -DPROGRAM_EXTENSION=${EXTENTION} -DSELF_TESTS_MODE=no -DCMAKE_INSTALL_PREFIX=/usr fi # make -j `nproc` make cpack cd .. if [ ! -z "$1" ] then cd .. mv $DIR_SOFT_NAME-${EXTENTION} $DIR_SOFT_NAME cd $DIR_SOFT_NAME fi } |
Cette fonction va générer les paquets (.deb, .rmp et .dmg) binaires du projet (c'est globalement la même chose que la fonction précédente mais avec la déclaration du type que paquet à l'appel de CMake) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
function createPackage(){ PACKAGE_TYPE="$1" EXTENTION="$2" echo "Create Package '${PACKAGE_TYPE}' for extension '${EXTENTION}'" if [ ! -z "$1" ] then cd .. mv $DIR_SOFT_NAME $DIR_SOFT_NAME-${EXTENTION} cd $DIR_SOFT_NAME-${EXTENTION} fi if [ -d build ] then echo "Remove existing directory build" rm -fr build fi mkdir -p build cd build # The -DCMAKE_INSTALL_PREFIX=/usr is needed because the install prefix of CPack is /usr if [ -z "$2" ] then cmake .. -DCREATE_${PACKAGE_TYPE}=yes -DSELF_TESTS_MODE=no -DCMAKE_INSTALL_PREFIX=/usr || cmake3 .. -DCREATE_${PACKAGE_TYPE}=yes -DSELF_TESTS_MODE=no -DCMAKE_INSTALL_PREFIX=/usr else cmake .. -D${EXTENTION}=yes -DPROGRAM_EXTENSION=${EXTENTION} -DCREATE_${PACKAGE_TYPE}=yes -DSELF_TESTS_MODE=no -DCMAKE_INSTALL_PREFIX=/usr || cmake3 .. -D${EXTENTION}=yes -DPROGRAM_EXTENSION=${EXTENTION} -DCREATE_${PACKAGE_TYPE}=yes -DSELF_TESTS_MODE=no -DCMAKE_INSTALL_PREFIX=/usr fi # make -j `nproc` make cpack cd .. if [ ! -z "$1" ] then cd .. mv $DIR_SOFT_NAME-${EXTENTION} $DIR_SOFT_NAME cd $DIR_SOFT_NAME fi } |
Si on active la vectorisation, on aura un jeu de 4 paquets par extension CPU, sinon on aura juste 4 paquets génériques :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
echo "Create package, activate extension '${USE_VECTORISATION}'" if [[ "$USE_VECTORISATION" == "true"* ]] then echo "Create packages for set of extension (AVX, AVX2, AVX512F, ...)" for extension in "AVX512_2" "AVX512VPOPCNTDQ" "AVX512BW" "AVX512PF" "AVX512ER" "AVX512F" "AVX2" "AVX" "SSE4.2" "SSE4.1" "SSSE3" "SSE2" "NOVECTORIZATION" do createPackage ${PACKAGE_TYPE} ${extension} cp build/${DIR_SOFT_NAME}-* "${OUTPUT_LINUX_DIR}" createBinaryArchive ${extension} cp build/${DIR_SOFT_NAME}-* "${OUTPUT_LINUX_DIR}" done else echo "Create packages for generic extension" createPackage ${PACKAGE_TYPE} cp build/${DIR_SOFT_NAME}-* "${OUTPUT_LINUX_DIR}" createBinaryArchive cp build/${DIR_SOFT_NAME}-* "${OUTPUT_LINUX_DIR}" fi |
Le fichier phoenix_createPackages.sh complet :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
#!/bin/bash PACKAGE_TYPE="$1" OUTPUT_LINUX_DIR="$2" USE_VECTORISATION="$3" DIR_SOFT_NAME=`basename ${PWD}` rm -fr ${OUTPUT_LINUX_DIR} mkdir -p ${OUTPUT_LINUX_DIR} function createBinaryArchive(){ EXTENTION="$1" echo "Create binary archive for extension '${EXTENTION}'" if [ ! -z "$1" ] then cd .. mv $DIR_SOFT_NAME $DIR_SOFT_NAME-${EXTENTION} cd $DIR_SOFT_NAME-${EXTENTION} fi if [ -d build ] then echo "Remove existing directory build" rm -fr build fi mkdir -p build cd build if [ -z "$1" ] then cmake .. -DSELF_TESTS_MODE=no -DCMAKE_INSTALL_PREFIX=/usr || cmake3 .. -DSELF_TESTS_MODE=no -DCMAKE_INSTALL_PREFIX=/usr else cmake .. -D${EXTENTION}=yes -DPROGRAM_EXTENSION=${EXTENTION} -DSELF_TESTS_MODE=no -DCMAKE_INSTALL_PREFIX=/usr || cmake3 .. -D${EXTENTION}=yes -DPROGRAM_EXTENSION=${EXTENTION} -DSELF_TESTS_MODE=no -DCMAKE_INSTALL_PREFIX=/usr fi # make -j `nproc` make cpack cd .. if [ ! -z "$1" ] then cd .. mv $DIR_SOFT_NAME-${EXTENTION} $DIR_SOFT_NAME cd $DIR_SOFT_NAME fi } function createPackage(){ PACKAGE_TYPE="$1" EXTENTION="$2" echo "Create Package '${PACKAGE_TYPE}' for extension '${EXTENTION}'" if [ ! -z "$1" ] then cd .. mv $DIR_SOFT_NAME $DIR_SOFT_NAME-${EXTENTION} cd $DIR_SOFT_NAME-${EXTENTION} fi if [ -d build ] then echo "Remove existing directory build" rm -fr build fi mkdir -p build cd build # The -DCMAKE_INSTALL_PREFIX=/usr is needed because the install prefix of CPack is /usr if [ -z "$2" ] then cmake .. -DCREATE_${PACKAGE_TYPE}=yes -DSELF_TESTS_MODE=no -DCMAKE_INSTALL_PREFIX=/usr || cmake3 .. -DCREATE_${PACKAGE_TYPE}=yes -DSELF_TESTS_MODE=no -DCMAKE_INSTALL_PREFIX=/usr else cmake .. -D${EXTENTION}=yes -DPROGRAM_EXTENSION=${EXTENTION} -DCREATE_${PACKAGE_TYPE}=yes -DSELF_TESTS_MODE=no -DCMAKE_INSTALL_PREFIX=/usr || cmake3 .. -D${EXTENTION}=yes -DPROGRAM_EXTENSION=${EXTENTION} -DCREATE_${PACKAGE_TYPE}=yes -DSELF_TESTS_MODE=no -DCMAKE_INSTALL_PREFIX=/usr fi # make -j `nproc` make cpack cd .. if [ ! -z "$1" ] then cd .. mv $DIR_SOFT_NAME-${EXTENTION} $DIR_SOFT_NAME cd $DIR_SOFT_NAME fi } echo "Create package, activate extension '${USE_VECTORISATION}'" if [[ "$USE_VECTORISATION" == "true"* ]] then echo "Create packages for set of extension (AVX, AVX2, AVX512F, ...)" for extension in "AVX512_2" "AVX512VPOPCNTDQ" "AVX512BW" "AVX512PF" "AVX512ER" "AVX512F" "AVX2" "AVX" "SSE4.2" "SSE4.1" "SSSE3" "SSE2" "NOVECTORIZATION" do createPackage ${PACKAGE_TYPE} ${extension} cp build/${DIR_SOFT_NAME}-* "${OUTPUT_LINUX_DIR}" createBinaryArchive ${extension} cp build/${DIR_SOFT_NAME}-* "${OUTPUT_LINUX_DIR}" done else echo "Create packages for generic extension" createPackage ${PACKAGE_TYPE} cp build/${DIR_SOFT_NAME}-* "${OUTPUT_LINUX_DIR}" createBinaryArchive cp build/${DIR_SOFT_NAME}-* "${OUTPUT_LINUX_DIR}" fi |