BinaryBuilder.jl est incroyable ~ Compilation croisée automatique avec Docker et conversion du code c et Fortran en bibliothèque Julia

Avez-vous déjà vu un package nommé jll, comme Arpack_jll, lors de l'utilisation de Julia? La plupart du temps, lorsque vous installez un package, vous avez probablement un package avec jll comme dépendance. En fait, ce package avec jll est une compilation de code écrit dans un langage autre que le langage Julia. Lors de l'installation, le binaire sera téléchargé automatiquement en fonction du système d'exploitation.

Ceci est réalisé BinaryBuilder.jl https://github.com/JuliaPackaging/BinaryBuilder.jl C'est un package appelé.

je https://www.youtube.com/watch?v=3IyXsBwqll8 J'ai connu l'existence en voyant cela.

Apparemment, Docker est utilisé pour la compilation croisée et la compilation de code sur diverses plates-formes telles que Mac, Windows et Linux. À ce moment-là, si cela ne fonctionne pas pour chaque OS, il semble que la méthode de compilation soit modifiée comme il convient.

C'est une bibliothèque très intéressante, alors je l'ai essayée.

Cette fois, j'ai mis C-LIME. https://usqcd-software.github.io/c-lime/ Un format de données pour la QCD de réseau (dynamique des couleurs quantiques de réseau). Je ne suis pas du tout familier avec cela, mais l'échelle était juste, alors je l'ai essayé.

environnement

Julia 1.5.2 Mac OS 10.15

Installez BinaryBuilder.jl

Tout d'abord, vous avez besoin de Docker, alors mettez Docker dedans. Veuillez découvrir comment installer Docker. Pour Mac

$ brew install docker
$ brew cask install docker

Il semble que cela puisse être fait.

Puis dans Julia, appuyez sur] pour passer en mode package,

add BinaryBuilder

ça ira. Cependant, à partir du 17 octobre 2020, quelque chose a changé sur GitHub et cela ne fonctionnera pas avec la version actuelle, donc au lieu de ce qui précède

add BinaryBuilder#f126fe7

Vous devez mettre la version modifiée sous la forme.

Comment utiliser

Après l'avoir mis

using BinaryBuilder
BinaryBuilder.run_wizard()

Et lancez l'assistant.

Make a platform selection
 > All Supported Platforms
   Select by Operating System
   Fully Custom Platform Choice

Ensuite, sélectionnez Toutes les plates-formes prises en charge

Please enter a URL (git repository or compressed archive) containing the source code to build:

Spécifiez maintenant l'adresse github ou le fichier du logiciel que vous souhaitez compiler. ici,

https://github.com/usqcd-software/c-lime.git

C'était fabriqué. Suivez ensuite les instructions. La première question est de savoir laquelle des branches git choisir, mais laissons cela comme maître. Ce code ne nécessite aucun code source ou bibliothèque supplémentaire. Au fur et à mesure que vous avancez, Il y a des choses comme donner un nom et donner une version, donc je vais le mettre comme il convient.

Au fur et à mesure que vous avancez

sandbox:${WORKSPACE}/srcdir

Quelque chose comme ça sortira. Maintenant compilez le code. Dans ce cas,

cd c-lime/
./autogen.sh 
./configure --prefix=${prefix} --build=${MACHTYPE} --host=${target}
make 
make install

Vous pouvez compiler le code avec. Appuyez ensuite sur Ctrl + D pour vous déconnecter. prochain

Your build script was:

	cd $WORKSPACE/srcdir
	cd c-lime/
	./autogen.sh 
	./configure --prefix=${prefix} --build=${MACHTYPE} --host=${target}
	make
	make install
	
Would you like to edit this script now? [y/N]: n

La méthode de compilation étant résumée, définissez-la sur n s'il n'y a pas de problème particulier. Alors que compilez-vous? Quelque chose comme ça apparaîtra, alors appuyez sur a puis sur d. Après cela, tout en appuyant sur Entrée, compilez sur divers systèmes d'exploitation et plates-formes.

Eh bien, après que c'est fait,

How should we deploy this build recipe?
 > Prepare a pull request against the community buildtree, Yggdrasil
   Write to a local file
   Print to stdout

Sera demandé. Si vous choisissez le premier, vous ferez une pull request à Yggdrasil sur GitHub. Cela signifie mettre ici des informations sur la façon de compiler.

Would you like to actually open the pull request or just prepare it?
 > Go ahead, open it
   No, just prepare it and let me look at it first

Après cela, vous ferez une demande d'extraction avec le nom de votre compte github.

S'il se termine avec succès, une demande d'extraction sera effectuée automatiquement. Et s'il n'y a pas de problème, il sera fusionné dans Yggdrasil. Une fois fusionné, https://github.com/JuliaBinaryWrappers/ Sera enregistré dans. Si vous vous inscrivez ici, vous avez terminé. https://github.com/JuliaBinaryWrappers/CLIME_jll.jl Est déjà enregistré,

Linux aarch64 {libc=glibc} (aarch64-linux-gnu)
Linux aarch64 {libc=musl} (aarch64-linux-musl)
Linux armv7l {call_abi=eabihf, libc=glibc} (armv7l-linux-gnueabihf)
Linux armv7l {call_abi=eabihf, libc=musl} (armv7l-linux-musleabihf)
Linux i686 {libc=glibc} (i686-linux-gnu)
Linux i686 {libc=musl} (i686-linux-musl)
Windows i686 (i686-w64-mingw32)
Linux powerpc64le {libc=glibc} (powerpc64le-linux-gnu)
macOS x86_64 (x86_64-apple-darwin)
Linux x86_64 {libc=glibc} (x86_64-linux-gnu)
Linux x86_64 {libc=musl} (x86_64-linux-musl)
FreeBSD x86_64 (x86_64-unknown-freebsd)
Windows x86_64 (x86_64-w64-mingw32)

On dit que la plateforme peut fournir des binaires.

Comment utiliser Julia comme bibliothèque

Après ça

add CLIME_jll

Ensuite, vous pouvez l'installer. Ce CLIME n'est pas une bibliothèque mais un type à exécuter, donc https://juliapackaging.github.io/BinaryBuilder.jl/dev/jll/ En référence à

using CLIME_jll
lime_contents() do exe
    run(`$exe`)
end

Ce faisant, le fichier exécutable lime_contents '' peut être exécuté sur Julia. Notez que ce code nécessite en fait un argument, alors utilisez-le sous la forme de run ( $ exe lime_file_test) `` .

Cette fois, j'ai exécuté BinaryBuilder.jl sur un Mac, mais cela seul a créé une bibliothèque Julia pour différentes plates-formes. Je suis surpris.

Recommended Posts

BinaryBuilder.jl est incroyable ~ Compilation croisée automatique avec Docker et conversion du code c et Fortran en bibliothèque Julia
Hello World avec Docker et langage C
Lier le code Java et C ++ avec SWIG
Découvrez .NET 5 avec Docker et Visual Studio Code