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
# build libgmp (see also
https://github.com/Homebrew/homebrew-core/blob/master/Formula/gmp.rb)
curl https://gmplib.org/download/gmp/gmp-6.1.2.tar.xz | xz -dc | tar xf -
cd gmp-6.1.2
make distclean
./configure --prefix="$PWD/target" --enable-cxx
--build=core2-apple-darwin"$(uname -r)"
make && make check && make install
# build polyml with this libgmp
cd ../polyml
make distclean
rm -rf target
./configure --prefix="$PWD/target" CFLAGS="-arch x86_64 -O3 -I../libffi/include
-I$PWD/../gmp-6.1.2/target/include" CXXFLAGS="-arch x86_64 -O3
-I../libffi/include -I$PWD/../gmp-6.1.2/target/include" CCASFLAGS="-arch
x86_64" LDFLAGS="-segprot POLY rwx rwx -L$PWD/../gmp-6.1.2/target/lib"
--with-gmp
make compiler && make compiler && make install
# adjust runtime library path
cp ../gmp-6.1.2/target/lib/libgmp.10.dylib target/lib
otool -L target/bin/poly
install_name_tool -change
/Users/wenzelm/lib/polyml/gmp-6.1.2/target/lib/libgmp.10.dylib
"@executable_path/../lib/libgmp.10.dylib" target/bin/poly
install_name_tool -change
/Users/wenzelm/lib/polyml/polyml-git/target/lib/libpolyml.9.dylib
"@executable_path/../lib/libpolyml.9.dylib" target/bin/poly
otool -L target/bin/poly
_______________________________________________
polyml mailing list
[email protected]
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml