Les lignes de commandes ci-dessous n'ont été testées qu'avec les distributions binaires OCaml-4.14.0 proposées sur ce site (mais on devrait pouvoir aussi utiliser ocaml-4.13.1 ou ocaml-5.0.0 : remplacer partout 4.14.0 par 4.13.1 ou 5.0.0 ci-dessous).
On suppose que le répertoire d'OCaml, avec au premier niveau 'bin/' et 'lib/', est
'/opt/amd64/ocaml-4.14.0' dans le cas d'un MAC ou LINUX à processeur intel
'/opt/arm64/ocaml-4.14.0' dans le cas d'un MAC à processeur M1
et que c'est 'C:\ocamlmgw64' dans le cas de Windows 10 ou 11 avec utilisation de MSYS2-MINGW64
et 'C:\ocamlms64' dans le cas de Windows 10 ou 11 avec utilisation des outils en ligne de commande Microsoft. 

On suppose aussi que les outils de développement en ligne de commande sont installés et au moins aussi récents que ceux utilisés pour compiler OCaml.

On obtient dans le présent répertoire l'exécutable en ligne de commande nommé mersenne_zarith qu'on lance en entrant
./mersenne_zarith
dans les cas MAC, LINUX, ou Windows 10 ou 11 avec MSYS2-MINGW64,
mersenne_zarith
dans le cas de Windows 10 ou 11 avec outils en ligne de commande de Microsoft (on peut ausi lancer cube_22_opt par double-clic sur son icône) 


Placer la ligne de commande sur le répertoire contenant ce fichier et le fichier mersenne_opt.ml et entrer les lignes de commandes ci-dessous suivant le cas



1. MAC OU LINUX:

1. a) MAC M1 ou LINUX arm64 :

export PATH=/opt/arm64/ocaml-4.14.0/bin:$PATH
ocamlopt -o mersenne_zarith -I /opt/arm64/ocaml-4.14.0/lib/ocaml/site-lib/zarith zarith.cmxa /opt/arm64/ocaml-4.14.0/lib/ocaml/site-lib/zarith/libzarith.a mersenne_opt.ml


1. b) MAC ou LINUX intel :

export PATH=/opt/amd64/ocaml-4.14.0/bin:$PATH
ocamlopt -o mersenne_zarith -I /opt/amd64/ocaml-4.14.0/lib/ocaml/site-lib/zarith zarith.cmxa /opt/amd64/ocaml-4.14.0/lib/ocaml/site-lib/zarith/libzarith.a mersenne_opt.ml

IMPORTANT : si sous LINUX ça ne marche pas et qu'un message d'erreur provenant de l'éditeur de liens ld comporte le terme PIE (Position Independent Executable) essayer la commande complétée suivante

ocamlopt -o mersenne_zarith -I /opt/amd64/ocaml-4.14.0/lib/ocaml/site-lib/zarith zarith.cmxa /opt/amd64/ocaml-4.14.0/lib/ocaml/site-lib/zarith/libzarith.a mersenne_opt.ml -ccopt -no-pie



2. WINDOWS 10 (intel)

2. a) avec invite de commandes MSYS2-MINGW64 et les outils de développement installés (gcc, ld, ...) (et libgmp.a accessible, dans C:\ocamlmgw64\lib\ocaml\site-lib\zarith par exemple)

export PATH=/c/ocamlmgw64/bin:$PATH 
ocamlopt.exe -o mersenne_zarith.exe -I c:/ocamlmgw64/lib/ocaml/site-lib/zarith zarith.cmxa libzarith.a mersenne_opt.ml -ccopt '-L/mingw64/lib -lws2_32 -L/mingw64/lib/gcc/x86_64-w64-mingw32/x.y.z -lgcc'

(où x.y.z est la version de gcc apparaissant dans le résultat de la commande 'gcc -v' , par exemple x.y.z = 12.2.0)


2. b1) avec invite de commande Windows basique et outils en ligne de commande de Visual Studio community 2022 (et mpir.lib accessible, dans C:\ocamlms64\lib\ocaml\site-lib\zarith par exemple) :

call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
set PATH=C:\ocamlms64\bin;%PATH%
ocamlopt.exe -o mersenne_zarith.exe -I C:\ocamlms64\lib\ocaml\site-lib\zarith zarith.cmxa libzarith.lib mersenne_opt.ml


2. b2) avec invite de commande Windows basique et outils en ligne de commande de Visual Studio community xxxx avec xxxx = 2017 ou 2019 (et mpir.lib accessible, dans C:\ocamlms64\lib\ocaml\site-lib\zarith par exemple) :

call "C:\Program Files (x86)\Microsoft Visual Studio\xxxx\Community\VC\Auxiliary\Build\vcvars64.bat"
set PATH=C:\ocamlms64\bin;%PATH%
ocamlopt.exe -o mersenne_zarith.exe -I C:\ocamlms64\lib\ocaml\site-lib\zarith zarith.cmxa libzarith.lib meersenne_opt.ml


2. b3) avec invite de commande Windows basique et outils en ligne de commande de Microsoft Visual Studio 2015 express (vc 14.0)  (et mpir.lib accessible, dans C:\ocamlms64\lib\ocaml\site-lib\zarith par exemple) :

call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64\vcvarsx86_amd64.bat"
set PATH=C:\ocamlms64\bin;%PATH%
ocamlopt.exe -o mersenne_zarith.exe -I C:\ocamlms64\lib\ocaml\site-lib\zarith zarith.cmxa libzarith.lib mersenne_opt.ml



3. WINDOWS 11 (intel ou émulation intel sur arm64)

3. a) avec invite de commandes MSYS2-MINGW64 et les outils de développement installés (gcc, ld, ...) (et libgmp.a accessible, dans C:\ocamlmgw64\lib\ocaml\site-lib\zarith par exemple)

export PATH=/c/ocamlmgw64/bin:$PATH  
ocamlopt.exe -o mersenne_zarith.exe -I c:/ocamlmgw64/lib/ocaml/site-lib/zarith zarith.cmxa libzarith.a mersenne_opt.ml -ccopt '-L/mingw64/lib -lws2_32 -L/mingw64/lib/gcc/x86_64-w64-mingw32/x.y.z -lgcc'

(où x.y.z est la version de gcc apparaissant dans le résultat de la commande 'gcc -v' , par exemple x.y.z = 12.2.0)


3. b) avec invite de commande Windows basique et outils en ligne de commande de Visual Studio community 2022 (et mpir.lib accessible, dans C:\ocamlms64\lib\ocaml\site-lib\zarith par exemple) (on se limite ici au dernier windows kit de Windows 10 : le 10.0.19041.0) :

call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 10.0.19041.0
set PATH=C:\ocamlms64\bin;%PATH%
ocamlopt.exe -o mersenne_zarith.exe -I C:\ocamlms64\lib\ocaml\site-lib\zarith zarith.cmxa libzarith.lib mersenne_opt.ml
