Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gfan 0.7 #238

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 75 additions & 42 deletions Formula/gfan.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
class Gfan < Formula
desc "Grobner fans and tropical varieties"
homepage "https://users-math.au.dk/~jensen/software/gfan/gfan.html"
url "https://users-math.au.dk/~jensen/software/gfan/gfan0.6.2.tar.gz"
sha256 "a674d5e5dc43634397de0d55dd5da3c32bd358d05f72b73a50e62c1a1686f10a"
url "https://users-math.au.dk/~jensen/software/gfan/gfan0.7.tar.gz"
sha256 "ab833757e1e4d4a98662f4aa691394013ea9a226f6416b8f8565356d6fcc989e"
license "GPL-2.0-or-later"
revision 11

bottle do
root_url "https://ghcr.io/v2/macaulay2/tap"
Expand All @@ -16,34 +15,23 @@
sha256 cellar: :any_skip_relocation, x86_64_linux: "2ac80a1fd89713e142750d8adf6f976e4249d38f58c5c2eafcfc0f6aec35793a"
end

if OS.mac?
depends_on "gcc" => :build
fails_with :clang
else
fails_with gcc: "4"
fails_with gcc: "5"
end
depends_on "gcc@14" => :build

depends_on "cddlib"
depends_on "gmp"

patch do
url "https://raw.githubusercontent.com/Macaulay2/M2/d51564127d757a3132684e9730f4085cb89297bb/M2/libraries/gfan/patch-0.6.2"
sha256 "9ebbf25e6de16baec877050bef69c85504e7bfa81e79407c2ab00ea4433e838c"
end

patch :DATA

def install

Check failure on line 25 in Formula/gfan.rb

View workflow job for this annotation

GitHub Actions / test-bot (macos-12)

`brew install --verbose --formula --build-bottle macaulay2/tap/gfan` failed on macOS Monterey (12)!

::error::The following formula cannot be installed from bottle and must be%0Abuilt from source.%0A xz%0A
linker_args = "#{ENV.cxx} -L#{Formula["cddlib"].lib} "
linker_args << "-static-libgcc -static-libstdc++ "
linker_args << "-ld_classic" if OS.mac? && DevelopmentTools.clang_build_version >= 1500
linker_args = "-L#{Formula["cddlib"].lib} -static-libgcc -static-libstdc++"
cxx_flags = "-I#{Formula["cddlib"].include}/cddlib"
cxx_flags << " -D_64BITLONGINT" unless OS.mac?

system "make", "cddnoprefix=yes",
system "make", "PREFIX=#{Formula["gcc@14"].bin}/", "cddnoprefix=yes",
"GMP_LINKOPTIONS=-L#{Formula["gmp"].lib} -lgmp",
"GMP_INCLUDEOPTIONS=-I#{Formula["gmp"].include}",
"OPTFLAGS=-O2 -DGMPRATIONAL -DNDEBUG -I#{Formula["cddlib"].include}/cddlib",
"CCLINKER=#{linker_args}"
"OPTFLAGS=-O2 -DGMPRATIONAL -DNDEBUG #{cxx_flags}",
"CCLINKER=#{Formula["gcc@14"].bin}/g++-14 #{linker_args}"
system "make", "PREFIX=#{prefix}", "install"
end

Expand All @@ -57,31 +45,76 @@

__END__

diff --git a/Makefile-orig b/Makefile
index 737208abfb..52e010e0b3 100644
diff --git a/Makefile b/Makefile
index 67c8164..fe6e00b 100644
--- a/Makefile
+++ b/Makefile
@@ -110,15 +110,15 @@ MKDIR=mkdir -p
PREFIX =
@@ -113,13 +113,12 @@ MKDIR=mkdir -p

# PREFIX = /usr/local/gcc/6.2.0/bin/
# PREFIX = /usr/local/gcc-8.1/bin/
-PREFIX =
SHELL = /bin/sh
#ARCH = LINUX

-CC = $(PREFIX)gcc
-CLINKER = $(CC)
+CC = $(PREFIX)gcc-14
CLINKER = $(CC)
-CXX = $(PREFIX)g++
-CCLINKER = $(CXX)
+#CC = $(PREFIX)gcc
+#CLINKER = $(CC)
+#CXX = $(PREFIX)g++
+#CCLINKER = $(CXX)
#OPTFLAGS = -O2 -DGMPRATIONAL -DNDEBUG
# Note that gcc produces wrong code with -O3
-OPTFLAGS = -DGMPRATIONAL -Wuninitialized -fno-omit-frame-pointer -O2 #-O3 -fno-guess-branch-probability #-DNDEBUG
+#OPTFLAGS = -DGMPRATIONAL -Wuninitialized -fno-omit-frame-pointer -O2 #-O3 -fno-guess-branch-probability #-DNDEBUG
#OPTFLAGS = -DGMPRATIONAL -Wuninitialized -fno-omit-frame-pointer -O3 -mavx -msse2 -finline-limit=1000 -ffast-math -Wuninitialized # -fno-guess-branch-probability #-DNDEBUG -ftree-vectorizer-verbose=2
-#OPTFLAGS = -DGMPRATIONAL -Wuninitialized -fno-omit-frame-pointer -O1 -fno-guess-branch-probability
+OPTFLAGS = -DGMPRATIONAL -Wuninitialized -fno-omit-frame-pointer -O1 -fno-guess-branch-probability
#-DNDEBUG
#OPTFLAGS = -DGMPRATIONAL -Wuninitialized -fno-omit-frame-pointer -O3 -mavx -msse2 -ftree-vectorizer-verbose=2 -finline-limit=1000 -ffast-math #-DNDEBUG
#OPTFLAGS = -DGMPRATIONAL -Wuninitialized -fno-omit-frame-pointer -O3 -mavx -msse2 -ftree-vectorizer-verbose=2 -march=native -unroll-loops --param max-unroll-times=4 -ffast-math #-DNDEBUG
+CXX = $(PREFIX)g++-14
CCLINKER = $(CXX)

#CC = $(PREFIX)gcc-8.1
diff --git a/src/gfanlib_circuittableint.h b/src/gfanlib_circuittableint.h
index 2b5ced4..b5bf6ed 100644
--- a/src/gfanlib_circuittableint.h
+++ b/src/gfanlib_circuittableint.h
@@ -25,6 +25,7 @@ namespace gfan{
template<typename> struct MyMakeUnsigned;
template <> struct MyMakeUnsigned<int>{typedef unsigned int type;};
template <> struct MyMakeUnsigned<long int>{typedef unsigned long int type;};
+ template <> struct MyMakeUnsigned<long long int>{typedef unsigned long long int type;};
template <> struct MyMakeUnsigned<__int128>{typedef unsigned __int128 type;};
Comment on lines +74 to +77
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure if this makes sense. It seems like support for __int128 is patchy and on some systems it's just long long int, at least that's my guess from errors like

src/gfanlib_circuittableint.h:617:57: error: invalid use of incomplete type 'struct gfan::MyMakeUnsigned<long long int>'
  617 |                 typename MyMakeUnsigned<longword>::type positiveResultBoundTimesD=extMul(negabs(s).v,boundA.v);
      |                                                         ^~~~~~~~~~~~~~~~~~~~~~~~~

It's a mystery to me why having both declarations makes the compiler happy, but I hope it's not introducing an overflow bug.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These new __int128's are giving me lots of problem in the Debian package, too -- gfan won't even build on 32-bit systems any more.


class MVMachineIntegerOverflow: public std::exception
@@ -92,6 +93,15 @@ static std::string toStr(__uint32_t b)
return s.str();
}

+#ifndef _64BITLONGINT
+static std::string toStr(long int b)
+{
+ std::stringstream s;
+ s<<b;
+ return s.str();
+}
+#endif
+
class my256s{
public:
__int128_t lo,hi;
@@ -213,6 +221,10 @@ static __int128_t extMul(long int a, long int b)
{
return ((__int128_t)a)*((__int128_t)b);
}
+static __int128_t extMul(long long int a, long long int b)
+{
+ return ((__int128_t)a)*((__int128_t)b);
+}

static __uint128_t unsignedProd64(uint64_t x,uint64_t y)
{
diff --git a/src/gfanlib_z.h b/src/gfanlib_z.h
index f56597c..8c84ed1 100644
--- a/src/gfanlib_z.h
+++ b/src/gfanlib_z.h
@@ -9,6 +9,7 @@
#define LIB_Z_H_

#include <string.h>
+#include <cstdint>
#include <ostream>
#include <iostream>
#define OLD 1
--
2.31.1
2.46.0
Loading