Makarius
2018-02-09 22:06:41 UTC
Dear Poly/ML enthusiasts and experts of the gcc toolchain on macOS,
building Poly/ML with libgmp has always been a challenge, but I have now
managed as follows for x86_64-darwin.
The approach works as follows:
(1) Build libgmp from sources.
(2) Build Poly/ML --with-gmp using that homemade version.
(3) Copy libgmp.10.dylib into the Poly/ML lib directory and adjust
locations with install_name_tool
Afterwards it is possible to copy the resulting Poly/ML target directory
to a different location on a different machine, with a different (newer)
macOS version.
The details are in the included build.txt (e.g. for macOS 10.12 Sierra).
This is not a shell script! It should be run carefully line-by-line.
Towards the end there are two install_name_tool invocations with
locations determined beforehand by "otool -L". The final "otool -L" is
just a sanity check, the result is like this:
target/bin/poly:
@executable_path/../lib/libpolyml.9.dylib (compatibility version
10.0.0, current version 10.0.0)
@executable_path/../lib/libgmp.10.dylib (compatibility version 14.0.0,
current version 14.2.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version
307.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
version 1238.0.0)
This setup is already part of "isabelle build_polyml", see
http://isabelle.in.tum.de/repos/isabelle/file/8b19a8a7f029/src/Pure/Admin/build_polyml.scala
-- but that assumes that libgmp has been installed in a standard place
(e.g. /usr/local/lib).
I wonder if anybody has managed to build libgmp for x86-darwin (32bit)
platform. That platform variant still provides better performance for
big applications like Isabelle, because it requires only half the memory.
Makarius
building Poly/ML with libgmp has always been a challenge, but I have now
managed as follows for x86_64-darwin.
The approach works as follows:
(1) Build libgmp from sources.
(2) Build Poly/ML --with-gmp using that homemade version.
(3) Copy libgmp.10.dylib into the Poly/ML lib directory and adjust
locations with install_name_tool
Afterwards it is possible to copy the resulting Poly/ML target directory
to a different location on a different machine, with a different (newer)
macOS version.
The details are in the included build.txt (e.g. for macOS 10.12 Sierra).
This is not a shell script! It should be run carefully line-by-line.
Towards the end there are two install_name_tool invocations with
locations determined beforehand by "otool -L". The final "otool -L" is
just a sanity check, the result is like this:
target/bin/poly:
@executable_path/../lib/libpolyml.9.dylib (compatibility version
10.0.0, current version 10.0.0)
@executable_path/../lib/libgmp.10.dylib (compatibility version 14.0.0,
current version 14.2.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version
307.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
version 1238.0.0)
This setup is already part of "isabelle build_polyml", see
http://isabelle.in.tum.de/repos/isabelle/file/8b19a8a7f029/src/Pure/Admin/build_polyml.scala
-- but that assumes that libgmp has been installed in a standard place
(e.g. /usr/local/lib).
I wonder if anybody has managed to build libgmp for x86-darwin (32bit)
platform. That platform variant still provides better performance for
big applications like Isabelle, because it requires only half the memory.
Makarius