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