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
polyml@inf.ed.ac.uk
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml

Reply via email to