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
Lien de téléchargement ici.