Macaulay2 / M2

The primary source code repository for Macaulay2, a system for computing in commutative algebra, algebraic geometry and related fields.
https://macaulay2.com
343 stars 230 forks source link

building on Apple Silicon with gcc-14 #3323

Closed mikestillman closed 1 month ago

mikestillman commented 3 months ago

Building givaro on apple silicon (older macos: Monterery), using gcc-14 from homebrew, gives an error (during ninja build-libraries:

Making all in integer
gmake[2]: Entering directory '/Users/mike/src/M2-current-branches/M2-development/M2/BUILD/mike/builds.tmp/cmake-gcc-14/libraries/givaro/build/src/kernel/integer'
/bin/sh ../../../libtool  --tag=CXX   --mode=compile /opt/homebrew/bin/g++-14 -DHAVE_CONFIG_H -I. -I/Users/mike/src/M2-current-branches/M2-development/M2/submodules/givaro/src/kernel/integer -I../../..  -I../../..  -I../../../src/kernel/memory -I../../../src/kernel/system -I../../../src/kernel -I../../../src/kernel/ring -I../../../src/kernel/rational -I/Users/mike/src/M2-current-branches/M2-development/M2/submodules/givaro/src/kernel -DSING_NDEBUG -DOM_NDEBUG -DNDEBUG  -I/opt/homebrew/include -O2 -Wall -DNDEBUG -UDEBUG -Wuninitialized -g3 -I/Users/mike/src/M2-current-branches/M2-development/M2/BUILD/mike/builds.tmp/cmake-gcc-14/usr-host/include -I/Users/mike/src/M2-current-branches/M2-development/M2/include -I/Users/mike/src/M2-current-branches/M2-development/M2/BUILD/mike/builds.tmp/cmake-gcc-14/include -std=gnu++11 -w -Wno-mismatched-tags -Wno-deprecated-register -MT givinteger.lo -MD -MP -MF .deps/givinteger.Tpo -c -o givinteger.lo /Users/mike/src/M2-current-branches/M2-development/M2/submodules/givaro/src/kernel/integer/givinteger.C
/bin/sh ../../../libtool  --tag=CXX   --mode=compile /opt/homebrew/bin/g++-14 -DHAVE_CONFIG_H -I. -I/Users/mike/src/M2-current-branches/M2-development/M2/submodules/givaro/src/kernel/integer -I../../..  -I../../..  -I../../../src/kernel/memory -I../../../src/kernel/system -I../../../src/kernel -I../../../src/kernel/ring -I../../../src/kernel/rational -I/Users/mike/src/M2-current-branches/M2-development/M2/submodules/givaro/src/kernel -DSING_NDEBUG -DOM_NDEBUG -DNDEBUG  -I/opt/homebrew/include -O2 -Wall -DNDEBUG -UDEBUG -Wuninitialized -g3 -I/Users/mike/src/M2-current-branches/M2-development/M2/BUILD/mike/builds.tmp/cmake-gcc-14/usr-host/include -I/Users/mike/src/M2-current-branches/M2-development/M2/include -I/Users/mike/src/M2-current-branches/M2-development/M2/BUILD/mike/builds.tmp/cmake-gcc-14/include -std=gnu++11 -w -Wno-mismatched-tags -Wno-deprecated-register -MT givintprime.lo -MD -MP -MF .deps/givintprime.Tpo -c -o givintprime.lo /Users/mike/src/M2-current-branches/M2-development/M2/submodules/givaro/src/kernel/integer/givintprime.C
libtool: compile:  /opt/homebrew/bin/g++-14 -DHAVE_CONFIG_H -I. -I/Users/mike/src/M2-current-branches/M2-development/M2/submodules/givaro/src/kernel/integer -I../../.. -I../../.. -I../../../src/kernel/memory -I../../../src/kernel/system -I../../../src/kernel -I../../../src/kernel/ring -I../../../src/kernel/rational -I/Users/mike/src/M2-current-branches/M2-development/M2/submodules/givaro/src/kernel -DSING_NDEBUG -DOM_NDEBUG -DNDEBUG -I/opt/homebrew/include -O2 -Wall -DNDEBUG -UDEBUG -Wuninitialized -g3 -I/Users/mike/src/M2-current-branches/M2-development/M2/BUILD/mike/builds.tmp/cmake-gcc-14/usr-host/include -I/Users/mike/src/M2-current-branches/M2-development/M2/include -I/Users/mike/src/M2-current-branches/M2-development/M2/BUILD/mike/builds.tmp/cmake-gcc-14/include -std=gnu++11 -w -Wno-mismatched-tags -Wno-deprecated-register -MT givinteger.lo -MD -MP -MF .deps/givinteger.Tpo -c /Users/mike/src/M2-current-branches/M2-development/M2/submodules/givaro/src/kernel/integer/givinteger.C -o givinteger.o
libtool: compile:  /opt/homebrew/bin/g++-14 -DHAVE_CONFIG_H -I. -I/Users/mike/src/M2-current-branches/M2-development/M2/submodules/givaro/src/kernel/integer -I../../.. -I../../.. -I../../../src/kernel/memory -I../../../src/kernel/system -I../../../src/kernel -I../../../src/kernel/ring -I../../../src/kernel/rational -I/Users/mike/src/M2-current-branches/M2-development/M2/submodules/givaro/src/kernel -DSING_NDEBUG -DOM_NDEBUG -DNDEBUG -I/opt/homebrew/include -O2 -Wall -DNDEBUG -UDEBUG -Wuninitialized -g3 -I/Users/mike/src/M2-current-branches/M2-development/M2/BUILD/mike/builds.tmp/cmake-gcc-14/usr-host/include -I/Users/mike/src/M2-current-branches/M2-development/M2/include -I/Users/mike/src/M2-current-branches/M2-development/M2/BUILD/mike/builds.tmp/cmake-gcc-14/include -std=gnu++11 -w -Wno-mismatched-tags -Wno-deprecated-register -MT givintprime.lo -MD -MP -MF .deps/givintprime.Tpo -c /Users/mike/src/M2-current-branches/M2-development/M2/submodules/givaro/src/kernel/integer/givintprime.C -o givintprime.o
In file included from ./givaro/givinteger.h:24,
                 from /Users/mike/src/M2-current-branches/M2-development/M2/submodules/givaro/src/kernel/integer/givinteger.C:13:
./givaro/random-integer.h: In member function 'Givaro::RandomIntegerIterator<_Unsigned, _Exact_Size>& Givaro::RandomIntegerIterator<_Unsigned, _Exact_Size>::operator=(const Givaro::RandomIntegerIterator<_Unsigned, _Exact_Size>&)':
./givaro/random-integer.h:94:54: error: no match for 'operator=' (operand types are 'Givaro::RandomIntegerIterator<_Unsigned, _Exact_Size>::Integer_Domain' {aka 'Givaro::ZRing<Givaro::Integer>'} and 'const Givaro::RandomIntegerIterator<_Unsigned, _Exact_Size>::Integer_Domain' {aka 'const Givaro::ZRing<Givaro::Integer>'})
   94 |                 const_cast<Integer_Domain&>(_ring)=R._ring;
      |                                                      ^~~~~
In file included from ./givaro/givinteger.h:24,
                 from ./givaro/givintprime.h:24,
                 from /Users/mike/src/M2-current-branches/M2-development/M2/submodules/givaro/src/kernel/integer/givintprime.C:19:
./givaro/random-integer.h: In member function 'Givaro::RandomIntegerIterator<_Unsigned, _Exact_Size>& Givaro::RandomIntegerIterator<_Unsigned, _Exact_Size>::operator=(const Givaro::RandomIntegerIterator<_Unsigned, _Exact_Size>&)':
./givaro/random-integer.h:94:54: error: no match for 'operator=' (operand types are 'Givaro::RandomIntegerIterator<_Unsigned, _Exact_Size>::Integer_Domain' {aka 'Givaro::ZRing<Givaro::Integer>'} and 'const Givaro::RandomIntegerIterator<_Unsigned, _Exact_Size>::Integer_Domain' {aka 'const Givaro::ZRing<Givaro::Integer>'})
   94 |                 const_cast<Integer_Domain&>(_ring)=R._ring;
      |                                                      ^~~~~

I'll try on latest MacOS too. I haven't yet investigated what the problem is.

mahrud commented 3 months ago

Use the brew version. They have had several issues on their repository and they fixed it but haven't made a new release yet.

jkyang92 commented 3 months ago

I've seen this on Linux as well. This is a Givaro bug, they fixed it in https://github.com/linbox-team/givaro/commit/b0cf33e1d4437530c7e4b3db90b6c80057a7f2f3. We only need the change to src/kernel/integer/random-integer.h. Arch in particular includes this patch in their copy of Givaro. You could add that patch to fix for our build process, but I haven't bothered, since I've been using the distro's copy of Givaro.

d-torrance commented 2 months ago

@mikestillman - did #3324 help with this?

mikestillman commented 1 month ago

This seems to work now, although I no longer have a monterey macos machine to test. But on Sonoma, although I have other issues with gcc-14 builds, this one seems fine. So I'm closing this.