I'm glad you now have a working build! BTW: Since you have flang installed - a build with it - i.e. with clang/clang++/flang might also work [instead of clang/clang++/gfortran] However flang usage is still nascent (likely some fortran examples fail with it) - if you are using PETSc from fortran - a build with gfortran is the preferred option
Satish On Fri, 21 Feb 2025, Michael Schaferkotter wrote: > Satish; > > Thank you for the masterful demonstration. > > One of the alternatives caught my eye: —with-cxx=0 (I remember I had to do > that ages ago on my macOS Darwin machine. > > I cleared *FLAGS and successfully completed make && make check as suggested; > > #======================================================================= > It may be moot now. Here is the requested OS, compiler information: > > cat /etc/os-release > > NAME="Red Hat Enterprise Linux" > VERSION="8.8 (Ootpa)" > ID="rhel" > ID_LIKE="fedora" > VERSION_ID="8.8" > PLATFORM_ID="platform:el8" > PRETTY_NAME="Red Hat Enterprise Linux 8.8 (Ootpa)" > ANSI_COLOR="0;31" > CPE_NAME="cpe:/o:redhat:enterprise_linux:8::baseos" > HOME_URL="https://urldefense.us/v3/__https://www.redhat.com/__;!!G_uCfscf7eWS!Z9OsinaKusqhhdPuDCNknHJq6f6UGZt17SofPYc-BvWQvrlqpeDbEEucEHNxioN04anLOPsjW0v_aCHG5RpV-0tjnQ$ > " > DOCUMENTATION_URL="https://urldefense.us/v3/__https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8__;!!G_uCfscf7eWS!Z9OsinaKusqhhdPuDCNknHJq6f6UGZt17SofPYc-BvWQvrlqpeDbEEucEHNxioN04anLOPsjW0v_aCHG5Roh1jkm1w$ > " > BUG_REPORT_URL="https://urldefense.us/v3/__https://bugzilla.redhat.com/__;!!G_uCfscf7eWS!Z9OsinaKusqhhdPuDCNknHJq6f6UGZt17SofPYc-BvWQvrlqpeDbEEucEHNxioN04anLOPsjW0v_aCHG5RpG5qdUaQ$ > " > > REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8" > REDHAT_BUGZILLA_PRODUCT_VERSION=8.8 > REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux" > REDHAT_SUPPORT_PRODUCT_VERSION="8.8" > > clang version 20.0.0git > (https://urldefense.us/v3/__https://github.com/llvm/llvm-project.git__;!!G_uCfscf7eWS!Z9OsinaKusqhhdPuDCNknHJq6f6UGZt17SofPYc-BvWQvrlqpeDbEEucEHNxioN04anLOPsjW0v_aCHG5RoxqM2a5g$ > 48d0ef1a07993139e1acf65910704255443103a5) > Target: x86_64-unknown-linux-gnu > Thread model: posix > InstalledDir: /tmp/build_release/bin > Clang version: 20.0.0git > LLVM version: LLVM version 20.0.0git > (48d0ef1a07993139e1acf65910704255443103a5<unknown encoding> > C++ standard: > Host target: x86_64-unknown-linux-gnu > Supported targets: > Registered Targets: > x86 - 32-bit X86: Pentium-Pro and above > x86-64 - 64-bit X86: EM64T and AMD64 > > flang version 20.0.0git > (https://urldefense.us/v3/__https://github.com/llvm/llvm-project.git__;!!G_uCfscf7eWS!Z9OsinaKusqhhdPuDCNknHJq6f6UGZt17SofPYc-BvWQvrlqpeDbEEucEHNxioN04anLOPsjW0v_aCHG5RoxqM2a5g$ > 48d0ef1a07993139e1acf65910704255443103a5) > Target: x86_64-unknown-linux-gnu > Thread model: posix > InstalledDir: /tmp/build_release/bin > Flang version: 20.0.0git > Host target: x86_64-unknown-linux-gnu > > > Fortran compiler: GNU Fortran (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) > Compiler path: /usr/bin/gfortran > Version: > -std=<standard> Assume that the input sources are for <standard>. > Default flags: No default flags information available > Target: x86_64-redhat-linux > > #======================================================================= > > Thank you again. > > > On Feb 20, 2025, at 2:44 PM, Satish Balay <balay....@fastmail.org> wrote: > > > > A couple of alternates (if mixing compiler versions can't be avoided): > > > > - don't need to use petsc from fortran: > > [balay@frog petsc]$ ./configure --with-cc=clang --with-cxx=clang++ > > --with-fc=0 --with-mpi=0 --download-f2cblaslapack && make && make check > > > > - don't use c++: > > [balay@frog petsc]$ ./configure --with-cc=clang --with-cxx=0 > > --with-fc=gfortran --with-mpi=0 && make && make check > > > > - add in v14 -lstdc++ location ahead in the search path - so that even when > > -lgfortran is found in v11, v14 -lstdc++ gets picked up correctly. > > [balay@frog petsc]$ ./configure > > LDFLAGS=-L/opt/rh/gcc-toolset-14/root/usr/lib/gcc/x86_64-redhat-linux/14/ > > --with-cc=clang --with-cxx=clang++ --with-fc=gfortran --with-mpi=0 && make > > && make check > > > > Satish > > > > On Thu, 20 Feb 2025, Satish Balay wrote: > > > >> Ok - I see this issue on CentOS [Stream/9]. > >> > >> What I have is: > >>>>> > >> [balay@frog petsc]$ clang --version > >> clang version 19.1.7 (CentOS 19.1.7-1.el9) > >> Target: x86_64-redhat-linux-gnu > >> Thread model: posix > >> InstalledDir: /usr/bin > >> Configuration file: /etc/clang/x86_64-redhat-linux-gnu-clang.cfg > >> [balay@frog petsc]$ gfortran --version > >> GNU Fortran (GCC) 11.5.0 20240719 (Red Hat 11.5.0-5) > >> Copyright (C) 2021 Free Software Foundation, Inc. > >> This is free software; see the source for copying conditions. There is NO > >> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > >> <<<< > >> > >> Now I build: > >>>>> > >> [balay@frog petsc]$ ./configure --with-cc=clang --with-cxx=clang++ > >> --with-fc=gfortran --with-mpi=0 && make && make check > >> <snip> > >> ********************************************************************************* > >> clang -fPIC -Wall -Wwrite-strings -Wno-unknown-pragmas -Wconversion > >> -Wno-sign-conversion -Wno-float-conversion -Wno-implicit-float-conversion > >> -fstack-protector -Qunused-arguments -fvisibility=hidden -Wall > >> -Wwrite-strings -Wno-unknown-pragmas -Wconversion -Wno-sign-conversion > >> -Wno-float-conversion -Wno-implicit-float-conversion -fstack-protector > >> -Qunused-arguments -fvisibility=hidden -g3 -O0 > >> -I/home/balay/petsc/include -I/home/balay/petsc/arch-linux-c-debug/include > >> -Wl,-export-dynamic ex19.c > >> -Wl,-rpath,/home/balay/petsc/arch-linux-c-debug/lib > >> -L/home/balay/petsc/arch-linux-c-debug/lib > >> -Wl,-rpath,/usr/lib/gcc/x86_64-redhat-linux/11 > >> -L/usr/lib/gcc/x86_64-redhat-linux/11 -lpetsc -llapack -lblas -lm -lX11 > >> -lgfortran -lm -lgfortran -lm -lgcc_s -lquadmath -lstdc++ -o ex19 > >> /opt/rh/gcc-toolset-14/root//usr/lib/gcc/x86_64-redhat-linux/14/../../../../bin/ld: > >> /home/balay/petsc/arch-linux-c-debug/lib/libpetsc.so: undefined reference > >> to `std::__cxx11::basic_string<char, std::char_traits<char>, > >> std::allocator<char> >::_M_replace_cold(char*, unsigned long, char const*, > >> unsigned long, unsigned long)' > >> <snip> > >> <<<< > >> > >> Ok some v11 compiler libraries are getting mixed up (likely from > >> -lgfortran) causing grief. > >>>>>>>>>> > >> [root@frog ~]# yum remove gcc-toolset-14-runtime > >> Dependencies resolved. > >> ================================================================================ > >> Package Arch Version Repository > >> Size > >> ================================================================================ > >> Removing: > >> gcc-toolset-14-runtime x86_64 14.0-1.el9 @appstream > >> 11 k > >> Removing dependent packages: > >> clang x86_64 19.1.7-1.el9 @appstream > >> 181 k > >> clang-tools-extra x86_64 19.1.7-1.el9 @appstream > >> 69 M > >> gcc-toolset-14-binutils x86_64 2.41-3.el9 @appstream > >> 27 M > >> Removing unused dependencies: > >> clang-libs x86_64 19.1.7-1.el9 @appstream > >> 413 M > >> clang-resource-filesystem x86_64 19.1.7-1.el9 @appstream > >> 15 k > >> compiler-rt x86_64 19.1.7-1.el9 @appstream > >> 37 M > >> gcc-toolset-14-gcc x86_64 14.2.1-7.1.el9 @appstream > >> 122 M > >> gcc-toolset-14-gcc-c++ x86_64 14.2.1-7.1.el9 @appstream > >> 39 M > >> gcc-toolset-14-libstdc++-devel x86_64 14.2.1-7.1.el9 @appstream > >> 22 M > >> libomp x86_64 19.1.7-1.el9 @appstream > >> 1.9 M > >> libomp-devel x86_64 19.1.7-1.el9 @appstream > >> 31 M > >> > >> Transaction Summary > >> ================================================================================ > >> Remove 12 Packages > >> > >> Freed space: 763 M > >> Is this ok [y/N]: > >> <<<<< > >> > >> So this install of clang depends-on/requires gcc-toolset-14-gcc. Also > >> gfortran-14 is missing. Try installing it. > >>>>>> > >> [root@frog ~]# yum install gcc-toolset-14-gcc-gfortran > >> <<<< > >> > >> Now retry build: > >>>>> > >> [balay@frog petsc]$ ./configure --with-cc=clang --with-cxx=clang++ > >> --with-fc=gfortran --with-mpi=0 && make && make check > >> <snip> > >> Running PETSc check examples to verify correct installation > >> Using PETSC_DIR=/home/balay/petsc and PETSC_ARCH=arch-linux-c-debug > >> C/C++ example src/snes/tutorials/ex19 run successfully with 1 MPI process > >> Fortran example src/snes/tutorials/ex5f run successfully with 1 MPI process > >> Completed PETSc check examples > >> [balay@frog petsc]$ > >> <<<< > >> > >> Hm - Using gfortran-11 here [with gfortran-14 installed] somehow worked! > >> But perhaps its better to use gfortran-14 [as this install of clang > >> requires g++-14] > >>>>>> > >> [balay@frog petsc]$ export PATH=/opt/rh/gcc-toolset-14/root/usr/bin:$PATH > >> [balay@frog petsc]$ gfortran --version > >> GNU Fortran (GCC) 14.2.1 20250110 (Red Hat 14.2.1-7) > >> Copyright (C) 2024 Free Software Foundation, Inc. > >> This is free software; see the source for copying conditions. There is NO > >> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > >> > >> [balay@frog petsc]$ ./configure --with-cc=clang --with-cxx=clang++ > >> --with-fc=gfortran --with-mpi=0 && make && make check > >> <snip> > >> CLINKER arch-linux-c-debug/lib/libpetsc.so.3.22.3 > >> ========================================= > >> Now to check if the libraries are working do: > >> make PETSC_DIR=/home/balay/petsc PETSC_ARCH=arch-linux-c-debug check > >> ========================================= > >> Running PETSc check examples to verify correct installation > >> Using PETSC_DIR=/home/balay/petsc and PETSC_ARCH=arch-linux-c-debug > >> C/C++ example src/snes/tutorials/ex19 run successfully with 1 MPI process > >> Fortran example src/snes/tutorials/ex5f run successfully with 1 MPI process > >> Completed PETSc check examples > >> [balay@frog petsc]$ > >> <<<< > >> > >> So that worked! > >> > >> Satish > >> > >> > >> On Thu, 20 Feb 2025, Satish Balay wrote: > >> > >>> Actually, simpler: > >>> > >>> ./configure --with-cc=clang --with-cxx=clang++ --with-fc=gfortran > >>> --with-mpi=0 > >>> --download-fblaslapack="$(DIR_SRC)/fblaslapack-$(FBLASLAPACK_VERSION).tar.gz" > >>> && make && make check > >>> > >>>> /opt/rh/gcc-toolset-12/root/usr/lib/gcc/x86_64-redhat-linux/12/../../../../bin/ld > >>> > >>> Hm - there was in issue with some (clang versions?) incompatibilities > >>> with gcc-12 - I think using gcc-11 (system default in that use case) > >>> worked. I'm not sure if you are seeing the same issue here. > >>> > >>> Satish > >>> > >>> On Thu, 20 Feb 2025, Satish Balay wrote: > >>> > >>>> > >>>> Any particular reason to use these flags? What clang version? OS? > >>>> > >>>> Best if you can send build logs [perhaps to petsc-maint] > >>>> > >>>> Can you try a simpler build and see if it works: > >>>> > >>>> ./configure --with-mpi-dir=/PATH_TO/models/src/v2021.03-2.0.3-llvm > >>>> --download-fblaslapack="$(DIR_SRC)/fblaslapack-$(FBLASLAPACK_VERSION).tar.gz" > >>>> && make && make check > >>>> or: > >>>> ./configure --with-cc=clang --with-cxx=clang++ --with-fc=gfortran > >>>> --download-mpich="$(DIR_SRC)/mpich-$(MPICH_VERSION).tar.gz" > >>>> --download-fblaslapack="$(DIR_SRC)/fblaslapack-$(FBLASLAPACK_VERSION).tar.gz" > >>>> && make && make check > >>>> > >>>> Satish > >>>> > >>>> On Thu, 20 Feb 2025, Michael Schaferkotter wrote: > >>>> > >>>>> build petsc-3.20.3 with llvm, clang, clang++, gfortran > >>>>> > >>>>> CFLAGS='-std=c++11' > >>>>> CXXFLAGS='-std=c++11 -D_GLIBCXX_USE_CXX11_ABI=1' > >>>>> LDLIBS += -lstdc++ > >>>>> > >>>>> $PETSC_ARCH arch-linux-c-opt > >>>>> MPIF90 = ./models/src/v2021.03-2.0.3-llvm/bin/mpif90 > >>>>> MPICC = ./models/src/v2021.03-2.0.3-llvm/bin/mpicc > >>>>> CLANG = clang > >>>>> FC = gfortran > >>>>> > >>>>> > >>>>> Petsc libraries are built; > >>>>> /models/src/v2021.03-2.0.3-llvm/lib/libpetsc.so@ > >>>>> /models/src/v2021.03-2.0.3-llvm/lib/libpetsc.so.3.020@ > >>>>> /models/src/v2021.03-2.0.3-llvm/lib/libpetsc.so.3.020.3* > >>>>> > >>>>> > >>>>> The configure is this: > >>>>> cd $(PETSC_SRC) && unset CXX CC FC F77 && $(PYTHON2) ./configure > >>>>> --prefix=$(PREFIX) \ > >>>>> --with-cc=clang \ > >>>>> --with-cxx=clang++ \ > >>>>> --with-fc=gfortran \ > >>>>> --download-mpich="$(DIR_SRC)/mpich-$(MPICH_VERSION).tar.gz" \ > >>>>> > >>>>> --download-fblaslapack="$(DIR_SRC)/fblaslapack-$(FBLASLAPACK_VERSION).tar.gz" > >>>>> \ > >>>>> --download-sowing \ > >>>>> --with-debugging=$(PETSC_DBG) \ > >>>>> --with-shared-libraries=1 \ > >>>>> CFLAGS='-std=c11' \ > >>>>> CXXFLAGS='-std=c++11 -D_GLIBCXX_USE_CXX11_ABI=1' \ > >>>>> CPPFLAGS='-D_GLIBCXX_USE_CXX11_ABI=1' \ > >>>>> LDFLAGS='-L$(LLVM_LIB)' \ > >>>>> LIBS='-lstdc++’ \ > >>>>> --COPTFLAGS=$(COPTFLAGS) --CXXOPTFLAGS=$(CXXOPTFLAGS) > >>>>> --FOPTFLAGS=$(FOPTFLAGS) > >>>>> > >>>>> > >>>>> Here is the make: > >>>>> > >>>>> $(MAKE) -C $(PETSC_SRC) PETSC_DIR=$(PETSC_SRC) > >>>>> PETSC_ARCH=$(PETSC_ARCH) all > >>>>> > >>>>> > >>>>> Check-petsc is: > >>>>> > >>>>> $(MAKE) -C $(PETSC_SRC) PETSC_DIR=$(PETSC_SRC) > >>>>> PETSC_ARCH=$(PETSC_ARCH) test > >>>>> > >>>>> Here is the log file for test: > >>>>> > >>>>> make[1]: Entering directory > >>>>> '/models/src/v2021.03-2.0.3-llvm/build/petsc/petsc-3.20.3' > >>>>> /usr/bin/python3 > >>>>> /models/src/v2021.03-2.0.3-llvm/build/petsc/petsc-3.20.3/config/gmakegentest.py > >>>>> --petsc-dir=/models/src/v2021.03-2.0.3-llvm/build/petsc/petsc-3.20.3 > >>>>> --petsc-arch=arch-linux-c-opt --testdir=./arch-linux-c-opt/tests > >>>>> --srcdir /models/src/v2021.03-2.0.3-llvm/build/petsc/petsc-3.20.3/src > >>>>> --pkg-pkgs "sys vec mat dm ksp snes ts tao" > >>>>> Using MAKEFLAGS: iw -- PETSC_ARCH=arch-linux-c-opt > >>>>> PETSC_DIR=/models/src/v2021.03-2.0.3-llvm/build/petsc/petsc-3.20.3 > >>>>> CC arch-linux-c-opt/tests/sys/classes/draw/tests/ex1.o > >>>>> CLINKER arch-linux-c-opt/tests/sys/classes/draw/tests/ex1 > >>>>> /opt/rh/gcc-toolset-12/root/usr/lib/gcc/x86_64-redhat-linux/12/../../../../bin/ld: > >>>>> arch-linux-c-opt/lib/libpetsc.so: undefined reference to > >>>>> `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, > >>>>> std::allocator<char> >::basic_ostringstream()' > >>>>> /opt/rh/gcc-toolset-12/root/usr/lib/gcc/x86_64-redhat-linux/12/../../../../bin/ld: > >>>>> arch-linux-c-opt/lib/libpetsc.so: undefined reference to > >>>>> `std::__throw_bad_array_new_length()' > >>>>> clang: error: linker command failed with exit code 1 (use -v to see > >>>>> invocation) > >>>>> make[1]: [gmakefile.test:273: > >>>>> arch-linux-c-opt/tests/sys/classes/draw/tests/ex1] Error 1 (ignored) > >>>>> > >>>>> > >>>>> There are many errors of the ilk: > >>>>> > >>>>> std::__cxx11::basic_ostringstream<char, std::char_traits<char>, > >>>>> std::allocator<char> >::basic_ostringstream() > >>>>> > >>>>> [lib]$ nm -A libpetsc.so | grep basic_ostringstream > >>>>> libpetsc.so: U > >>>>> _ZNKSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@GLIBCXX_3.4.21 > >>>>> libpetsc.so: U > >>>>> _ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1Ev > >>>>> libpetsc.so: U > >>>>> _ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@GLIBCXX_3.4.21 > >>>>> > >>>>> > >>>>> I/m new to llvm and this is the first time to compile petsc.3.20.3 with > >>>>> llvm compilers. > >>>>> > >>>>> Clearly something is amiss. > >>>>> > >>>>> Any ideas appreciated. > >>>>> > >>>>> Michael > >>>>> > >>>>> > >>>>> > >>>> > >