Temps de compilation irrégulier?

Bonjour,

Sous Ubuntu :
J’ai effectué une compilation hier en 5 minutes 30 secondes.
Pour passé de la version 1.8.2-4-ge35974060 à la version 1.8.2-11-gb6f6af20a
Aujourd’hui pour passer à la version 1.8.2-12-gce8bad031 ça a pris 1 minute 40 secondes.
Cette différence est lié à quoi, à ce qui est vraiment modifier avec le nouveau commit ?

Sous Manjaro :
J’ai effectué la même mise à jour 1.8.2-11-gb6f6af20a vers 1.8.2-12-gce8bad031
Le temps de construction a été de 5 minutes 54 secondes.
Il n’y a donc aucune différence de temps de compilation sous Manjaro, contrairement à Ubuntu.
Les constructions Manjaro-AUR sont donc différentes des compilations sous Ubuntu ?

Cordialement.

Je pense que sous Ubuntu, tu as fait ta compilation en ayant gardé le répertoire des sources qui a été crée quand tu as fait git clone la première fois, et que quand tu as lancé la dernière compilation seuls les objets impactés par le dernier commit ont été recompilés, les autres n’ayant pas changé. C’est donc plus rapide.

Par contre en passant par AUR, chaque compilation recrée un nouveau répaertoire sources vierge, et doit donc tout recompiler de zéro.

Bonjour,

Ma compilation d’hier plus longue faisait également suite à des précédentes compilations.
Ma compilation d’aujourd’hui montre bien un passage de 1% à 44% sans aucun affichage.

-- Build information:
--     Build OS: Linux
--     Build date: 2021-03-03T09:16:53Z
-- CACHE_NAME_SUFFIX is ""
[  0%] Built target UpdateInfo
Scanning dependencies of target rtengine
[  0%] Building CXX object rtengine/CMakeFiles/rtengine.dir/imageio.cc.o
[  0%] Building CXX object rtengine/CMakeFiles/rtengine.dir/procparams.cc.o
[  0%] Building CXX object rtengine/CMakeFiles/rtengine.dir/metadata.cc.o
[  1%] Linking CXX static library librtengine.a
[ 44%] Built target rtengine
Scanning dependencies of target rth-cli

Ci-dessous la compilation complète.

Compilation Ubuntu du 03032021

Il est sans doute préférable d’utiliser la même compilation sous Manjaro que sous Ubuntu ?

Salut @Caille,
comme le dit @sguyader en passant par AUR, la compilation recrée un répertoire vierge et recompile de zéro.
Mais si tu lances ton script Build-art sous Manjaro tu devrais avoir les mêmes temps de compil que sur Ubuntu, mais la compil ne se fera pas au même endroit… Tu auras 2 binaires distincts: celui de AUR dans usr/bin/ART et celui du build-art dans Home/caille/programs/art/ART…

Bonsoir et merci pour vos réponses.
Je possède exactement les mêmes versions sur chaque distributions.
Dans Ubuntu, /home/caille/programs/art ART fait 14.7 MB
Dans Manjaro, usr/bin/ ART fait 12.7 MB
Pourquoi une telle différence ?
Pour utiliser la version compilée sous Mangaro, d’autres dépendances doivent-elles être installées.
Sous entendu que Manjaro possède déjà les bonnes dépendances ?

Étant donné que tu possèdes sur ta Manjaro la version AUR, les dépendances sont installées (ce serait logique !!)
Pour être certain, tu peux tenter de les installer avec cette commande

sudo pacman -S --needed bzip2 cmake exiv2 expat fftw glib2 glibmm gtk3 gtkmm3 lcms2 lensfun libcanberra libiptcdata libjpeg-turbo libpng librsvg libsigc++ libtiff zlib

si tout est déjà là, l’installation sera ignorée.

Bonjour jllailes,

Effectivement les dépendances sont bien installées.

[caille@caille-n76vb ~]$ sudo pacman -S --needed bzip2 cmake exiv2 expat fftw glib2 glibmm gtk3 gtkmm3 lcms2 lensfun libcanberra libiptcdata libjpeg-turbo libpng librsvg libsigc++ libtiff zlib
[sudo] Mot de passe de caille : 
avertissement : bzip2-1.0.8-4 est à jour -- ignoré
avertissement : cmake-3.19.5-1 est à jour -- ignoré
avertissement : exiv2-0.27.3-1 est à jour -- ignoré
avertissement : expat-2.2.10-2 est à jour -- ignoré
avertissement : fftw-3.3.9-1 est à jour -- ignoré
avertissement : glib2-2.66.7-1 est à jour -- ignoré
avertissement : glibmm-2.66.0-1 est à jour -- ignoré
avertissement : gtk3-1:3.24.26-1 est à jour -- ignoré
avertissement : gtkmm3-3.24.4-1 est à jour -- ignoré
avertissement : lcms2-2.12-1 est à jour -- ignoré
avertissement : lensfun-0.3.95-4 est à jour -- ignoré
avertissement : libcanberra-0.30+2+gc0620e4-3 est à jour -- ignoré
avertissement : libiptcdata-1.0.4-5 est à jour -- ignoré
avertissement : libjpeg-turbo-2.0.6-1 est à jour -- ignoré
avertissement : libpng-1.6.37-3 est à jour -- ignoré
avertissement : librsvg-2:2.50.3-1 est à jour -- ignoré
avertissement : libsigc++-2.10.6-1 est à jour -- ignoré
avertissement : libtiff-4.2.0-1 est à jour -- ignoré
avertissement : zlib-1:1.2.11-4 est à jour -- ignoré
 il n’y a rien à faire
[caille@caille-n76vb ~]$ 

Merci pour ta réponse !

Par contre pourquoi une différence de taille du fichier ART entre les deux distributions ?
14.7 MB contre 12.7 MB pour exactement la même version entre Ubuntu et AUR ?
Je n’ai toujours pas compilé l’autre version sous Mangaro.

Cordialement.

Est-ce que les options de compilation sont exactment les mêmes entre Ubuntu et AUR? Il est possible qu’une ou plusieurs options dans la configuration cmake soient différentes.

Bonjour,
Très bonne question, mais l’exécutable devrait être exactement le même, non ?
Je viens de compiler ma version sur Manjaro, je me trouve donc bien avec deux lanceurs.
J’ai renommé la version compilée ART-Compilé, pour éviter toutes confusion.
J’ai également modifié en ce sens le fichier ./build-art pour la compilation.
Par contre j’ai constaté dans le lanceur de ART (Manjaro-AUR) la ligne :
GenericName[fr]=diteur d'images raw
Ligne que j’ai renommée :
GenericName[fr]=Editeur d'images raw
Avant la compilation sous Manjaro, lorsque je pointais sur l’icône il y avait simplement l’affichage:
ART
Après cette compilation j’apercevais lorsque je pointais sur l’icône l’affichage:
ART
diteur d’images raw

J’ai donc corrigé cette faute d’orthographe dans le lanceur de ART (Manjaro-AUR)

[Desktop Entry]
Type=Application
Version=1.0
Name=ART
GenericName=Raw photo editor
GenericName[cs]=Editor raw obrzk
GenericName[fr]=diteur d'images raw
GenericName[pl]=Edytor zdj raw
Comment=An advanced raw photo development program
Comment[cs]=Program pro konverzi a zpracovn digitlnch raw fotografi
Comment[fr]=Logiciel de conversion et de traitement de photos numriques de format raw (but de capteur)
Comment[pl]=Zaawansowany program do wywoywania zdj typu raw
Icon=ART
Exec=ART %f
Terminal=false
MimeType=image/jpeg;image/png;image/tiff;image/x-adobe-dng;image/x-canon-cr2;image/x-canon-cr3;image/x-canon-crf;image/x-canon-crw;image/x-fuji-raf;image/x-hasselblad-3fr;image/x-hasselblad-fff;image/x-jpg;image/x-kodak-dcr;image/x-kodak-k25;image/x-kodak-kdc;image/x-leaf-mos;image/x-leica-rwl;image/x-mamiya-mef;image/x-minolta-mrw;image/x-nikon-nef;image/x-nikon-nrw;image/x-olympus-orf;image/x-panasonic-raw;image/x-panasonic-rw2;image/x-pentax-pef;image/x-pentax-raw;image/x-phaseone-iiq;image/x-raw;image/x-rwz;image/x-samsung-srw;image/x-sigma-x3f;image/x-sony-arq;image/x-sony-arw;image/x-sony-sr2;image/x-sony-srf;image/x-tif;inode/directory;
Categories=Photography;Graphics;2DGraphics;RasterGraphics;GTK;
Keywords=raw;photography;develop;pp3;graphics;
StartupWMClass=ART

eh bien non! cela dépend des options. Certaines changent peu la taille, d’autres ont un impact important.

On doit retrouver les options de compilation dans le fichier AboutThisBuild.txt

Ce qui tendrait à indiquer que la version Compilée pour Ubuntu qui fait quand même 2MB de plus aurait été compilée avec d’autres options mais qu’au final les deux logiciels serait quand même les mêmes, sinon comment s’y retrouver ?
Je n’arrive pas à comprendre comment une application peut fonctionner pareil avec un exécutable différent ?
Bonne nuit, y paraît que ça porte conseil. :cold_sweat:

Comme l’a suggéré @edmond_Gautier montre nous les 2 AboutThisBuild.txt et comparons les options de compilation. Il est probable qu’il y ait des “flags” différents, qui expliqueraient la différence.

Bonjour,

Voici le fichier en question récupéré sur Manjaro, depuis la version compilée ?
Je ne pourrais pas récupérer le fichier AboutThisBuild.txt de la version AUR car construit probablement sur une partition tmpfs en RAM pour limiter l’usure du SSD, car je ne trouve pas les fichiers de construction de la version AUR ? Il faut pour ça qu’il y ait un nouveau commit et que le récupère avant d’arrêter le PC ?
En fait ils ne sont pas dans le même dossier.
L’un ce trouve dans le dossier: programs/art
L’autre dans: programs/code-art/build
Ce sont exactement les mêmes fichiers.

Version: 1.8.2-12-gce8bad031
Branch: master
Commit: ce8bad031
Commit date: 2021-03-02
Compiler: cc 10.2.0
Processor: x86_64
System: Linux
Bit depth: 64 bits
Gtkmm: V3.24.4
Lensfun: V0.3.95.0
Exiv2: V0.27.3
LCMS2: V2.12
Build type: release
Build flags:  -std=c++11 -march=native -Werror=unused-label -fno-math-errno -Wall -Wuninitialized -Wno-deprecated-declarations -Wno-unused-result -fopenmp -Werror=unknown-pragmas -O3 -DNDEBUG -ftree-vectorize
Link flags:  -march=native
OpenMP support: ON
MMAP support: OFF
Build OS: Linux
Build date: 2021-03-04T11:56:57Z

Il y a également un fichier: AboutThisBuild.txt.in

Version: ${GIT_DESCRIBE}
Branch: ${GIT_BRANCH}
Commit: ${GIT_COMMIT}
Commit date: ${GIT_COMMIT_DATE}
Compiler: ${COMPILER_INFO}
Processor: ${PROC_LABEL}
System: ${SYSTEM}
Bit depth: ${PROC_BIT_DEPTH}
Gtkmm: V${GTKMM_VERSION}
Lensfun: V${LENSFUN_VERSION}
Exiv2: V${EXIV2_VERSION}
LCMS2: V${LCMS_VERSION_INFO}
Build type: ${BUILD_TYPE}
Build flags: ${CXX_FLAGS}
Link flags: ${LFLAGS}
OpenMP support: ${OPTION_OMP}
MMAP support: ${WITH_MYFILE_MMAP}
Build OS: ${BUILDINFO_OS}
Build date: ${BUILDINFO_DATE}

Pour la version AUR le fichier AboutThisBuild.txt.in est ci-dessous.

Version: ${GIT_DESCRIBE}
Branch: ${GIT_BRANCH}
Commit: ${GIT_COMMIT}
Commit date: ${GIT_COMMIT_DATE}
Compiler: ${COMPILER_INFO}
Processor: ${PROC_LABEL}
System: ${SYSTEM}
Bit depth: ${PROC_BIT_DEPTH}
Gtkmm: V${GTKMM_VERSION}
Lensfun: V${LENSFUN_VERSION}
Exiv2: V${EXIV2_VERSION}
LCMS2: V${LCMS_VERSION_INFO}
Build type: ${BUILD_TYPE}
Build flags: ${CXX_FLAGS}
Link flags: ${LFLAGS}
OpenMP support: ${OPTION_OMP}
MMAP support: ${WITH_MYFILE_MMAP}
Build OS: ${BUILDINFO_OS}
Build date: ${BUILDINFO_DATE}

La taille de l’exécutable dépend entre autres du niveau d’optimisation, des jeux d’instruction utilisés, de différentes options de génération de code, de l’inclusion ou non des tables de symboles pour debug.
Cependant, et heureusement, les résultats doivent être identiques.
Il en résulte que certaines options ne doivent pas être utilisées sous peine d’avoir un exe défectueux.

Le fichier AboutThisBuild.txt doit être situé dans le même répertoire que l’exécutable. Cherche donc là pour le build AUR. Il n’est pas dans les sources.

Dans les sources, il n’y a rien d’utilisable. AboutThisBuild.txt.in est un modèle permettant de générer par une sorte de compilation AboutThisBuild.txt pendant la construction de l’exécutable.

Il se peut aussi que les deux executables Manjaro et AUR soient compilés avec des compilateurs différents ( GCC/CLANG, versions différentes). On le verra en comparant les deux AboutThisBild.txt.

Bonjour,
Je viens de me rendre dans le dossier usr/bin/, il y a bien ART l’exécutable, mais pas de fichier:
AboutThisBuild.txt
Ou ce fichier est nommé différemment ?

Suite…

Je viens de trouver ce fichier dans: usr/share/doc/ART

Mais c’est bien l’exécutable de Manjaro/AUR qui est plus petit !

Version: 1.8.2-12-gce8bad031
Branch: makepkg
Commit: ce8bad031
Commit date: 2021-03-02
Compiler: cc 10.2.0
Processor: x86_64
System: Linux
Bit depth: 64 bits
Gtkmm: V3.24.4
Lensfun: V0.3.95.0
Exiv2: V0.27.3
LCMS2: V2.12
Build type: Release
Build flags: -D_FORTIFY_SOURCE=2 -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -std=c++11 -march=native -Werror=unused-label -fno-math-errno -Wall -Wuninitialized -Wno-deprecated-declarations -Wno-unused-result -fopenmp -Werror=unknown-pragmas -O3 -DNDEBUG -ftree-vectorize
Link flags: -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -march=native
OpenMP support: ON
MMAP support: OFF
Build OS: Linux
Build date: 2021-03-03T09:57:52Z

Je replace ci-dessous celui de la compilation.

Version: 1.8.2-12-gce8bad031
Branch: master
Commit: ce8bad031
Commit date: 2021-03-02
Compiler: cc 10.2.0
Processor: x86_64
System: Linux
Bit depth: 64 bits
Gtkmm: V3.24.4
Lensfun: V0.3.95.0
Exiv2: V0.27.3
LCMS2: V2.12
Build type: release
Build flags:  -std=c++11 -march=native -Werror=unused-label -fno-math-errno -Wall -Wuninitialized -Wno-deprecated-declarations -Wno-unused-result -fopenmp -Werror=unknown-pragmas -O3 -DNDEBUG -ftree-vectorize
Link flags:  -march=native
OpenMP support: ON
MMAP support: OFF
Build OS: Linux
Build date: 2021-03-04T11:56:57Z

Différences en citations, c’est plus lisible.

Build flags: -D_FORTIFY_SOURCE=2 -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -std=c++11 -march=native -Werror=unused-label -fno-math-errno -Wall -Wuninitialized -Wno-deprecated-declarations -Wno-unused-result -fopenmp -Werror=unknown-pragmas -O3 -DNDEBUG -ftree-vectorize
Link flags: -Wl,-O1,–sort-common,–as-needed,-z,relro,-z,now -march=native

Build flags: -std=c++11 -march=native -Werror=unused-label -fno-math-errno -Wall -Wuninitialized -Wno-deprecated-declarations -Wno-unused-result -fopenmp -Werror=unknown-pragmas -O3 -DNDEBUG -ftree-vectorize
Link flags: -march=native

  • est-ce que les deux compilations sont faites sur la même machine?
  • Il y a des flags en plus dans la premiere compilation:

-D_FORTIFY_SOURCE=2 -march=x86-64 -mtune=generic -O2 -pipe -fno-plt

-Wl,-O1,–sort-common,–as-needed,-z,relro,-z,now

Pourquoi? est-ce généré par la procedure automatique?
Voyant qu’il y a -O2 et -O3, je ne sais pas lequel est pris.

Oui c’est bien compilé sur la même machine.
La première est la construction depuis Manjaro-AUR, résultat ART = 12,7 Mo (12 655 016 octets)
La deuxième est la compilation depuis Manjaro, résultat ART = 14,5 Mo (14 503 480 octets)
La version compilé avec la même méthode depuis Ubuntu ART = 14,7 Mo (14 672 384 octets)

Par contre là je ne sais pas quoi répondre ?

Le fichier de la version Ubuntu: AboutThisBuild.txt

Version: 1.8.2-12-gce8bad031
Branch: master
Commit: ce8bad031
Commit date: 2021-03-02
Compiler: cc 9.3.0
Processor: x86_64
System: Linux
Bit depth: 64 bits
Gtkmm: V3.24.2
Lensfun: V0.3.2.0
Exiv2: V0.27.2
LCMS2: V2.9
Build type: release
Build flags:  -std=c++11 -march=native -Werror=unused-label -fno-math-errno -Wall -Wuninitialized -Wno-deprecated-declarations -Wno-unused-result -fopenmp -Werror=unknown-pragmas -O3 -DNDEBUG -ftree-vectorize
Link flags:  -march=native
OpenMP support: ON
MMAP support: OFF
Build OS: Linux
Build date: 2021-03-03T09:16:53Z

Build flags: -std=c++11 -march=native -Werror=unused-label -fno-math-errno -Wall -Wuninitialized -Wno-deprecated-declarations -Wno-unused-result -fopenmp -Werror=unknown-pragmas -O3 -DNDEBUG -ftree-vectorize
Link flags: -march=native

Bonjour,
Je viens de passé de la version .12 à la version .14 aujourd’hui.
Sous Manjaro la version que j’avais renommée manuellement ART-Compilé a été supprimée.
Pourtant j’avais modifié le ./build-art pour que ART possède bien le nom “ART-Compilé”
Je pense ne pas avoir modifié ce qu’il faut dans le script de compilation, voir ci-dessous.
Pour le lancer je suis donc obligé de renommer manuellement ART. :rage:
Que faut-il modifier pour changer le nom ART, pour éviter toute confusion ?

#!/usr/bin/env bash
# By Morgan Hardwood
# Version 2019-09-05
# This script gets the latest source code for the given program and compiles it.

# The name of the program, used for the folder names:
prog="art"

# The name of the compiled executable:
exe="ART-Compilé"

# The name of the sub-folder, if any, relative to the folder into which the
# compiled executable is placed.
# e.g. If the executable ends up in:
#   ~/programs/someProgram/foo/bar/someExecutable
# then set it to:
#   exeRelativePath="foo/bar"
# or if the executable ends up in
#   ~/programs/someProgram/someExecutable
# then leave it empty:
# exeRelativePath=""
exeRelativePath=""

# The path to the repository:
repo="https://bitbucket.org/agriggio/art.git"

# No touching below this line, with the exception of the "Compile" section
# -----------------------------------------------------------------------------

# The name of the project's standard branch, typically "master":
master="master"

buildOnly="false"
buildType="release"

# Removes the trailing forward-slash if one is present
exeRelativePath="${exeRelativePath/%\/}"
# Append forward-slash to exeRelativePath only if it is not empty.
exePath="${exeRelativePath:+${exeRelativePath}/}${exe}"

# Command-line arguments
OPTIND=1
while getopts "bdh?-" opt; do
    case "${opt}" in
        b)  buildOnly="true"
            ;;
        d)  buildType="debug"
            ;;
        h|\?|-) printf '%s\n' "This script gets the latest source code for ${prog} and compiles it." \
                "" \
                "  -b" \
                "     Optional. If specified, the script only compiles the source, it does not try to update the source. If not specified, the source will be updated first." \
                "  -d" \
                "     Optional. Compile a \"debug\" build. If not specified, a \"release\" build will be made." \
                ""
        exit 0
        ;;
    esac
done
shift $((OPTIND-1))
[ "$1" = "--" ] && shift

printf '%s\n' "" "Program name: ${prog}" "Build type: ${buildType}" "Build without updating: ${buildOnly}" ""

# Clone if needed
cloned="false"
updates="false"
if [[ ! -d "$HOME/programs/code-${prog}" ]]; then
    mkdir -p "$HOME/programs" || exit 1
    git clone "$repo" "$HOME/programs/code-${prog}" || exit 1
    pushd "$HOME/programs/code-${prog}" 1>/dev/null || exit 1
    cloned="true"
else
    pushd "$HOME/programs/code-${prog}" 1>/dev/null || exit 1
    git fetch
    if [[ $(git rev-parse HEAD) != $(git rev-parse '@{u}') ]]; then
        updates="true"
    fi
fi

# Pull updates if necessary
if [[ "$updates" = "true" && "$buildOnly" = "false" ]]; then
    git pull || exit 1
fi

# Find out which branch git is on
branch="$(git rev-parse --abbrev-ref HEAD)"

# Set build and install folder names
if [[ $branch = $master && $buildType = release ]]; then
    buildDir="$HOME/programs/code-${prog}/build"
    installDir="$HOME/programs/${prog}"
else
    buildDir="$HOME/programs/code-${prog}/build-${branch}-${buildType}"
    installDir="$HOME/programs/${prog}-${branch}-${buildType}"
fi

existsExe="false"
if [[ -e "${installDir}/${exePath}" ]]; then
    existsExe="true"
fi

# Quit if no updates and build-only flag not set
if [[ "$cloned" = "false" && "$buildOnly" = "false" && "$updates" = "false" && "$existsExe" = "true" ]]; then
    printf '%s\n' "No updates, nothing to do."
    exit 0
fi

# Determine CPU count
cpuCount="fail"
if command -v nproc >/dev/null 2>&1; then
    cpuCount="$(nproc --all)"
fi
if [[ ! ( $cpuCount -ge 1 && $cpuCount -le 64 ) ]]; then
    cpuCount=1
fi

# Prepare folders
rm -rf "${installDir}"
mkdir -p "${buildDir}" "${installDir}" || exit 1
cd "${buildDir}" || exit 1

# -----------------------------------------------------------------------------
# Compile

# See:
# http://rawpedia.rawtherapee.com/Linux#Compile_RawTherapee

cmake \
    -DCMAKE_BUILD_TYPE="$buildType"  \
    -DPROC_TARGET_NUMBER="2" \
    -DBUILD_BUNDLE="ON" \
    -DBUNDLE_BASE_INSTALL_DIR="${installDir}" \
    -DOPTION_OMP="ON" \
    -DWITH_LTO="OFF" \
    -DWITH_PROF="OFF" \
    -DWITH_SAN="OFF" \
    -DWITH_SYSTEM_KLT="OFF" \
    -DWITH_BENCHMARK="OFF" \
    -DENABLE_TCMALLOC="ON" \
    "$HOME/programs/code-${prog}" || exit 1

make --jobs="$cpuCount" install || exit 1

# Finished
printf '%s\n' "" "To run ${prog} type:" "${installDir}/${exePath}" ""

popd 1>/dev/null