We don't have a good way to verify if the changes continue to work
with the minver of the pkg [and if minor fixes can get this working -
without increasing this requirement - sure without access to the new
features provided by the new version]

Having a single version dependency between pkgs makes the whole
ecosystem [where many pkgs with all their dependencies mixed in]
brittle..

Satish

On Thu, 20 Jul 2023, Barry Smith wrote:

> 
>   Satish,
> 
>    I think hypre.py in main needs minversion = 2.29 instead of 2.14
> 
> 
> 
> > On Jul 20, 2023, at 11:05 AM, Satish Balay <ba...@mcs.anl.gov> wrote:
> > 
> > Can check config/BuildSystem/config/packages/hypre.py
> > 
> > petsc-3.19 (or release branch) is compatible with hypre 2.28.0, petsc 
> > 'main' branch with 2.29.0
> > 
> > Satish
> > 
> > On Thu, 20 Jul 2023, Barry Smith via petsc-users wrote:
> > 
> >> 
> >>  You cannot use this version of PETSc, 3.19, with the version of hypre you 
> >> installed. In hypre they recently changed hypre_Error from an integer to a 
> >> struct which completely breaks compatibility with previous versions of 
> >> hypre (and hence previous versions of PETSc). You must use the main git 
> >> branch of PETSc with the version of hypre you installed.
> >> 
> >>  Barry
> >> 
> >> 
> >>> On Jul 20, 2023, at 5:10 AM, Daniel Stone <daniel.st...@opengosim.com> 
> >>> wrote:
> >>> 
> >>> Hi All,
> >>> 
> >>> Many thanks for the detailed explainations and ideas!
> >>> 
> >>> I tried skipping the test. When it came time to do the build itself (make 
> >>> $PETSC_DIR... all) I get some failures, unsurprisingly:
> >>> 
> >>> --------------------------------
> >>> 
> >>>         FC arch-mswin-c-opt/obj/dm/f90-mod/petscdmplexmod.o
> >>>         CC arch-mswin-c-opt/obj/ksp/pc/impls/hypre/ftn-custom/zhypref.o
> >>>         CC arch-mswin-c-opt/obj/ksp/pc/impls/hypre/ftn-auto/hypref.o
> >>>         CC arch-mswin-c-opt/obj/ksp/pc/impls/hypre/hypre.o
> >>> C:\cygwin64\home\DANIEL~1\PETSC_~1.1\src\ksp\pc\impls\hypre\hypre.c(444,29):
> >>>  error: assigning to 'hypre_Error' from incompatible type 'int'
> >>>        hypre__global_error = 0;
> >>>                            ^ ~
> >>> C:\cygwin64\home\DANIEL~1\PETSC_~1.1\include\petscerror.h(1752,7): note: 
> >>> expanded from macro 'PetscStackCallExternalVoid'
> >>>      __VA_ARGS__; \
> >>>      ^~~~~~~~~~~
> >>> C:\cygwin64\home\DANIEL~1\PETSC_~1.1\src\ksp\pc\impls\hypre\hypre.c(634,29):
> >>>  error: assigning to 'hypre_Error' from incompatible type 'int'
> >>>        hypre__global_error = 0;
> >>>                            ^ ~
> >>> C:\cygwin64\home\DANIEL~1\PETSC_~1.1\include\petscerror.h(1752,7): note: 
> >>> expanded from macro 'PetscStackCallExternalVoid'
> >>>      __VA_ARGS__; \
> >>>      ^~~~~~~~~~~
> >>> 2 errors generated.
> >>> make[3]: *** [gmakefile:195: 
> >>> arch-mswin-c-opt/obj/ksp/pc/impls/hypre/hypre.o] Error 1
> >>> make[3]: *** Waiting for unfinished jobs....
> >>>         FC arch-mswin-c-opt/obj/ksp/f90-mod/petsckspdefmod.o
> >>>         CC arch-mswin-c-opt/obj/dm/impls/da/hypre/mhyp.o
> >>>         CC arch-mswin-c-opt/obj/mat/impls/hypre/mhypre.o
> >>> make[3]: Leaving directory '/home/DanielOGS/petsc_ogs_3.19.1'
> >>> make[2]: *** 
> >>> [/home/DanielOGS/petsc_ogs_3.19.1/lib/petsc/conf/rules.doc:28: libs] 
> >>> Error 2
> >>> make[2]: Leaving directory '/home/DanielOGS/petsc_ogs_3.19.1'
> >>> **************************ERROR*************************************
> >>>  Error during compile, check arch-mswin-c-opt/lib/petsc/conf/make.log
> >>>  Send it and arch-mswin-c-opt/lib/petsc/conf/configure.log to 
> >>> petsc-ma...@mcs.anl.gov <mailto:petsc-ma...@mcs.anl.gov>
> >>> ********************************************************************
> >>> Finishing make run at Wed, 19 Jul 2023 17:07:00 +0100
> >>> 
> >>> ----------------------------------------
> >>> 
> >>> But wait - isn't this the compile stage, not the linking stage? This 
> >>> seems to imply that I've made a hash of providing include file such that 
> >>> a definition of "hypre_Error" 
> >>> cannot be seen - unless I'm misinterpreting. Interesting note about Hypre 
> >>> and include files - if built using configure and make, all the include 
> >>> files are conviniently copied
> >>> into hypre/src/hypre/include. This is not done for a cmake build - I had 
> >>> to do the copying myself. Maybe I missed one.
> >>> 
> >>> 
> >>> On shared vs. static - if there a clear way of telling which I've ended 
> >>> up with? I've checked the cmakelists for hypre and this seems to imply 
> >>> that not-shared is the default,
> >>> which I didn't change:
> >>> 
> >>> # Configuration options
> >>> option(HYPRE_ENABLE_SHARED           "Build a shared library" OFF)
> >>> option(HYPRE_ENABLE_BIGINT           "Use long long int for HYPRE_Int" 
> >>> OFF)
> >>> option(HYPRE_ENABLE_MIXEDINT         "Use long long int for HYPRE_BigInt, 
> >>> int for HYPRE_INT" OFF)
> >>> [....]
> >>> 
> >>> 
> >>> checking again, I've noticed that the way that the stub-test fails is 
> >>> different depending on whether it's called from the config script or used 
> >>> in isolation - more details on that soon.
> >>> 
> >>> 
> >>> 
> >>> Thanks again,
> >>> 
> >>> Daniel
> >>> 
> >>> 
> >>> 
> >>> On Wed, Jul 19, 2023 at 4:58 PM Satish Balay via petsc-users 
> >>> <petsc-users@mcs.anl.gov <mailto:petsc-users@mcs.anl.gov>> wrote:
> >>>> I think it should work with static libraries and 64bit compilers.
> >>>> 
> >>>> That's how I think --download-f2cblaslapack [etc] work.
> >>>> 
> >>>> Also it works with MS-MPI - even-though its a dll install, the library 
> >>>> stub provides this symbol somehow..
> >>>> 
> >>>> balay@ps5 /cygdrive/c/Program Files (x86)/Microsoft SDKs/MPI/Lib/x64
> >>>> $ nm -Ao msmpi.lib |grep " MPI_Init"
> >>>> msmpi.lib:msmpi.dll:0000000000000000 T MPI_Init
> >>>> msmpi.lib:msmpi.dll:0000000000000000 T MPI_Init_thread
> >>>> msmpi.lib:msmpi.dll:0000000000000000 T MPI_Initialized
> >>>> 
> >>>> However - if the library symbol is somehow mangled - this configure mode 
> >>>> of checking library functions will fail.
> >>>> 
> >>>> Checking PETSc dll build:
> >>>> 
> >>>> balay@ps5 ~/petsc/arch-ci-mswin-uni/lib
> >>>> $ nm -Ao libpetsc.lib |grep MatCreateSeqAIJWithArrays
> >>>> libpetsc.lib:libpetsc.dll:0000000000000000 I 
> >>>> __imp_MatCreateSeqAIJWithArrays
> >>>> libpetsc.lib:libpetsc.dll:0000000000000000 T MatCreateSeqAIJWithArrays
> >>>> 
> >>>> It also has the unmangled symbol - so I guess this mode can work 
> >>>> generally with dlls.
> >>>> 
> >>>> Satish
> >>>> 
> >>>> 
> >>>> On Wed, 19 Jul 2023, Barry Smith wrote:
> >>>> 
> >>>>> 
> >>>>>  Satish,
> >>>>> 
> >>>>>   So it will always fail on Windows with Windows compilers (both with 
> >>>>> static and shared libraries)? Is this true for all PETSc external 
> >>>>> packages? If so, why does the installation documentation say that some 
> >>>>> external packages can work with Windows compilers? (Presumably PETSc 
> >>>>> cannot since the configure tests will fail).
> >>>>> 
> >>>>>  Barry
> >>>>> 
> >>>>> 
> >>>>>> On Jul 19, 2023, at 11:40 AM, Satish Balay <ba...@mcs.anl.gov 
> >>>>>> <mailto:ba...@mcs.anl.gov>> wrote:
> >>>>>> 
> >>>>>> BTW: Some explanation of configure:
> >>>>>> 
> >>>>>> It attempts the following on linux:
> >>>>>> 
> >>>>>>>>>>>> 
> >>>>>> Source:
> >>>>>> #include "confdefs.h"
> >>>>>> #include "conffix.h"
> >>>>>> /* Override any gcc2 internal prototype to avoid an error. */
> >>>>>> char HYPRE_IJMatrixCreate();
> >>>>>> static void _check_HYPRE_IJMatrixCreate() { HYPRE_IJMatrixCreate(); }
> >>>>>> 
> >>>>>> int main(void) {
> >>>>>> _check_HYPRE_IJMatrixCreate();
> >>>>>> return 0;
> >>>>>> }
> >>>>>> <<<<<<<
> >>>>>> 
> >>>>>> Note - it does not include 'HYPRE.h' here - but redefines the 
> >>>>>> prototype as 'char HYPRE_IJMatrixCreate();
> >>>>>> 
> >>>>>> Compiling it manually:
> >>>>>> 
> >>>>>>>>>> 
> >>>>>> [balay@pj01 petsc]$ cat conftest.c
> >>>>>> char HYPRE_IJMatrixCreate();
> >>>>>> static void _check_HYPRE_IJMatrixCreate() { HYPRE_IJMatrixCreate(); }
> >>>>>> 
> >>>>>> int main(void) {
> >>>>>> _check_HYPRE_IJMatrixCreate();
> >>>>>> return 0;
> >>>>>> }
> >>>>>> [balay@pj01 petsc]$ gcc -c conftest.c
> >>>>>> [balay@pj01 petsc]$ nm -Ao conftest.o |grep HYPRE_IJMatrixCreate
> >>>>>> conftest.o:0000000000000000 t _check_HYPRE_IJMatrixCreate
> >>>>>> conftest.o:                 U HYPRE_IJMatrixCreate
> >>>>>> [balay@pj01 petsc]$ nm -Ao arch-linux-c-debug/lib/libHYPRE.so |grep 
> >>>>>> HYPRE_IJMatrixCreate
> >>>>>> arch-linux-c-debug/lib/libHYPRE.so:000000000007f2c2 T 
> >>>>>> HYPRE_IJMatrixCreate
> >>>>>> [balay@pj01 petsc]$ 
> >>>>>> <<<<
> >>>>>> 
> >>>>>> Here the "U HYPRE_IJMatrixCreate" in conftest.o matches "T 
> >>>>>> HYPRE_IJMatrixCreate" in libHYPRE.so - so the "link" test in configure 
> >>>>>> succeeds!
> >>>>>> 
> >>>>>>>>>>>> 
> >>>>>> [balay@pj01 petsc]$ gcc -o conftest conftest.o 
> >>>>>> arch-linux-c-debug/lib/libHYPRE.so
> >>>>>> [balay@pj01 petsc]$ echo $?
> >>>>>> 0
> >>>>>> <<<<<
> >>>>>> 
> >>>>>> On windows - [due to name mangling by cdecl/stdcall, (/MT vs /MD) 
> >>>>>> etc..] - this might not match - resulting in link failures.
> >>>>>> 
> >>>>>> Satish
> >>>>>> 
> >>>>>> 
> >>>>>> On Wed, 19 Jul 2023, Satish Balay via petsc-users wrote:
> >>>>>> 
> >>>>>>> You could try skipping this test [and assume --with-hypre-include and 
> >>>>>>> --with-hypre-lib options are correct] - and see if this works.
> >>>>>>> 
> >>>>>>> diff --git a/config/BuildSystem/config/packages/hypre.py 
> >>>>>>> b/config/BuildSystem/config/packages/hypre.py
> >>>>>>> index 5bc88322aa2..2d6c7932e17 100644
> >>>>>>> --- a/config/BuildSystem/config/packages/hypre.py
> >>>>>>> +++ b/config/BuildSystem/config/packages/hypre.py
> >>>>>>> @@ -11,7 +11,7 @@ class Configure(config.package.GNUPackage):
> >>>>>>>    self.requiresversion = 1
> >>>>>>>    self.gitcommit       = 'v'+self.version
> >>>>>>>    self.download        = 
> >>>>>>> ['git://https://github.com/hypre-space/hypre','https://github.com/hypre-space/hypre/archive/'+self.gitcommit+'.tar.gz']
> >>>>>>> -    self.functions       = ['HYPRE_IJMatrixCreate']
> >>>>>>> +    self.functions       = []
> >>>>>>>    self.includes        = ['HYPRE.h']
> >>>>>>>    self.liblist         = [['libHYPRE.a']]
> >>>>>>>    self.buildLanguages  = ['C','Cxx']
> >>>>>>> 
> >>>>>>> 
> >>>>>>> Satish
> >>>>>>> 
> >>>>>>> 
> >>>>>>> On Wed, 19 Jul 2023, Barry Smith wrote:
> >>>>>>> 
> >>>>>>>> 
> >>>>>>>> You don't indicate what type of libraries you built hypre with; 
> >>>>>>>> static or shared. My guess is you ended up with shared
> >>>>>>>> 
> >>>>>>>> I think the answer to your difficulty is hidden in __cdecl (Satish 
> >>>>>>>> will know much better than me). When you are looking for symbols in 
> >>>>>>>> Windows shared libraries you have to prepend something to the 
> >>>>>>>> function prototype to have it successfully found. For example the 
> >>>>>>>> PETSc include files have these things __declspec(dllimport) The 
> >>>>>>>> configure test fails because it does not provide the needed 
> >>>>>>>> prototype. Likely you built PTScotch with static libraries so no 
> >>>>>>>> problem.
> >>>>>>>> 
> >>>>>>>> The simplest fix would be to build static hypre libraries. I think 
> >>>>>>>> it is a major project to get PETSc configure and macro system to 
> >>>>>>>> work properly with external packages that are in Windows shared 
> >>>>>>>> libraries since more use of __declspec would be needed.
> >>>>>>>> 
> >>>>>>>> Barry
> >>>>>>>> 
> >>>>>>>> The PETSc installation instructions should probably say something 
> >>>>>>>> about external packages with Windows shared libraries.
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>>> On Jul 19, 2023, at 10:52 AM, Daniel Stone 
> >>>>>>>>> <daniel.st...@opengosim.com <mailto:daniel.st...@opengosim.com>> 
> >>>>>>>>> wrote:
> >>>>>>>>> 
> >>>>>>>>> Hello,
> >>>>>>>>> 
> >>>>>>>>> I'm working on getting a petsc build running on windows. One 
> >>>>>>>>> necessary package to include is Hypre. I've been able to build 
> >>>>>>>>> Hypre seperately using cmake, and confirmed that the library works
> >>>>>>>>> by setting up a VS project to run some of the example programs.
> >>>>>>>>> 
> >>>>>>>>> My attempted petsc build is being done through cygwin. I've been 
> >>>>>>>>> able to (with varying degrees of difficulty), build a fairly plain 
> >>>>>>>>> petsc, and one that downloads and builds ptscotch (after some 
> >>>>>>>>> modifications
> >>>>>>>>> to both ptscotch and the config script). I am now attempting to 
> >>>>>>>>> include Hypre (using the --hypre-iclude and --hypre-lib flags, 
> >>>>>>>>> etc). Note that the same compilers are being used for both Hypre 
> >>>>>>>>> and for petsc
> >>>>>>>>> through cygwin - the new intel oneapi compilers (icx and ifx, after 
> >>>>>>>>> again varying amounts of pain to work around their awkwardness with 
> >>>>>>>>> the config script).
> >>>>>>>>> 
> >>>>>>>>> I'm seeing a problem when the config script does some tests on the 
> >>>>>>>>> included hypre lib. The source code looks like:
> >>>>>>>>> 
> >>>>>>>>> #include "confdefs.h"
> >>>>>>>>> #include "conffix.h"
> >>>>>>>>> /* Override any gcc2 internal prototype to avoid an error. */
> >>>>>>>>> 
> >>>>>>>>> #include "HYPRE.h"
> >>>>>>>>> 
> >>>>>>>>> char HYPRE_IJMatrixCreate();
> >>>>>>>>> static void _check_HYPRE_IJMatrixCreate() { HYPRE_IJMatrixCreate(); 
> >>>>>>>>> }
> >>>>>>>>> 
> >>>>>>>>> int main() {
> >>>>>>>>> _check_HYPRE_IJMatrixCreate();;
> >>>>>>>>> return 0;
> >>>>>>>>> }
> >>>>>>>>> 
> >>>>>>>>> 
> >>>>>>>>> As I understand this is a fairly standard type of stub program used 
> >>>>>>>>> by the config script to check that it is able to link to certain 
> >>>>>>>>> symbols in given libraries. Tests like this have succeeded in my 
> >>>>>>>>> builds that
> >>>>>>>>> include PTScotch.
> >>>>>>>>> 
> >>>>>>>>> I keep getting a linker error with the above test, including if I 
> >>>>>>>>> seperate it out and try to build it seperately:
> >>>>>>>>> 
> >>>>>>>>> unresolved external symbol "char __cdel HYPRE_IJMatrixCreate(void)" 
> >>>>>>>>> ....
> >>>>>>>>> 
> >>>>>>>>> Ok, it looks like a problem with either the library or linker 
> >>>>>>>>> commands. But here's the interesting thing - If I transplant this 
> >>>>>>>>> code into VS, with the same project setting that allows it to build 
> >>>>>>>>> the much more 
> >>>>>>>>> nontrivial Hypre example programs, I get the same error:
> >>>>>>>>> 
> >>>>>>>>> Error LNK2001 unresolved external symbol "char __cdecl 
> >>>>>>>>> HYPRE_IJMatrixCreate(void)" (?HYPRE_IJMatrixCreate@@YADXZ) 
> >>>>>>>>> hypretry1 
> >>>>>>>>> C:\Users\DanielOGS\source\repos\hypretry1\hypretry1\Source.obj 1
> >>>>>>>>> 
> >>>>>>>>> So it seems like there might be something about this type of stub 
> >>>>>>>>> program that is not working with my Hypre library. I don't fully 
> >>>>>>>>> understand this program - it's able to call the function with no 
> >>>>>>>>> arguments, but
> >>>>>>>>> it also needs to be linked against a library containing the 
> >>>>>>>>> function, apparently by wrapping it in a static void function? Not 
> >>>>>>>>> something I've seen before. 
> >>>>>>>>> 
> >>>>>>>>> Does anyone have any insight into what might be going wrong - or 
> >>>>>>>>> really just any explaination of how the stub program works so I can 
> >>>>>>>>> figure out why it isn't in this case?
> >>>>>>>>> 
> >>>>>>>>> Many thanks,
> >>>>>>>>> 
> >>>>>>>>> Daniel
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>> 
> >>>>>> 
> >>>>> 
> >>>> 
> >> 
> >> 
> 

Reply via email to