From 1e08d81476ff1edb1316b5491c445aaed941e5f3 Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Sun, 28 Jul 2019 20:54:21 -0400 Subject: PGI -shared is for Linux only --- mesonbuild/compilers/mixins/pgi.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/mesonbuild/compilers/mixins/pgi.py b/mesonbuild/compilers/mixins/pgi.py index ad94271..3b0451a 100644 --- a/mesonbuild/compilers/mixins/pgi.py +++ b/mesonbuild/compilers/mixins/pgi.py @@ -61,9 +61,16 @@ class PGICompiler(): def get_no_warn_args(self) -> typing.List[str]: return ['-silent'] + def get_std_shared_lib_link_args(self) -> typing.List[str]: + # PGI -shared is Linux only. + if self.compiler_type.is_osx_compiler or self.compiler_type.is_windows_compiler: + return [] + return ['-shared'] + def get_pic_args(self) -> typing.List[str]: + # PGI -fPIC is Linux only. if self.compiler_type.is_osx_compiler or self.compiler_type.is_windows_compiler: - return [] # PGI -fPIC is Linux only. + return [] return ['-fPIC'] def openmp_flags(self) -> typing.List[str]: -- cgit v1.1 From 7eebb6749a6c059ec9f1f2752a3518e44e9612c9 Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Sun, 28 Jul 2019 21:07:03 -0400 Subject: no special shared lib args for PGI --- mesonbuild/compilers/mixins/clike.py | 14 +++++++------- mesonbuild/compilers/mixins/pgi.py | 3 +++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/mesonbuild/compilers/mixins/clike.py b/mesonbuild/compilers/mixins/clike.py index 0591b7f..37d2424 100644 --- a/mesonbuild/compilers/mixins/clike.py +++ b/mesonbuild/compilers/mixins/clike.py @@ -209,25 +209,25 @@ class CLikeCompiler: ''' return self.get_compiler_dirs(env, 'programs') - def get_pic_args(self): + def get_pic_args(self) -> typing.List[str]: return ['-fPIC'] - def name_string(self): + def name_string(self) -> str: return ' '.join(self.exelist) - def get_pch_use_args(self, pch_dir, header): + def get_pch_use_args(self, pch_dir: str, header: str) -> typing.List[str]: return ['-include', os.path.basename(header)] - def get_pch_name(self, header_name): + def get_pch_name(self, header_name: str) -> str: return os.path.basename(header_name) + '.' + self.get_pch_suffix() - def get_linker_search_args(self, dirname): + def get_linker_search_args(self, dirname: str) -> typing.List[str]: return ['-L' + dirname] def get_default_include_dirs(self): return [] - def gen_export_dynamic_link_args(self, env): + def gen_export_dynamic_link_args(self, env) -> typing.List[str]: m = env.machines[self.for_machine] if m.is_windows() or m.is_cygwin(): return ['-Wl,--export-all-symbols'] @@ -236,7 +236,7 @@ class CLikeCompiler: else: return ['-Wl,-export-dynamic'] - def gen_import_library_args(self, implibname): + def gen_import_library_args(self, implibname: str) -> typing.List[str]: """ The name of the outputted import library diff --git a/mesonbuild/compilers/mixins/pgi.py b/mesonbuild/compilers/mixins/pgi.py index 3b0451a..6cb8b45 100644 --- a/mesonbuild/compilers/mixins/pgi.py +++ b/mesonbuild/compilers/mixins/pgi.py @@ -61,6 +61,9 @@ class PGICompiler(): def get_no_warn_args(self) -> typing.List[str]: return ['-silent'] + def gen_import_library_args(self, implibname: str) -> typing.List[str]: + return [] + def get_std_shared_lib_link_args(self) -> typing.List[str]: # PGI -shared is Linux only. if self.compiler_type.is_osx_compiler or self.compiler_type.is_windows_compiler: -- cgit v1.1 From d0e78a2534a43a3523e33d516e834a60af3a21ba Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Sun, 28 Jul 2019 21:57:38 -0400 Subject: default libtype to static to allow windows compilers to not skip To make Fortran tests useful on Windows, the library_type should default to static, unless needed to specifically test shared. Shared Fortran libs on Windows for non-Gfortran compilers is fragile requiring proprietary code syntax. --- mesonbuild/compilers/mixins/pgi.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mesonbuild/compilers/mixins/pgi.py b/mesonbuild/compilers/mixins/pgi.py index 6cb8b45..0613e79 100644 --- a/mesonbuild/compilers/mixins/pgi.py +++ b/mesonbuild/compilers/mixins/pgi.py @@ -66,9 +66,11 @@ class PGICompiler(): def get_std_shared_lib_link_args(self) -> typing.List[str]: # PGI -shared is Linux only. - if self.compiler_type.is_osx_compiler or self.compiler_type.is_windows_compiler: - return [] - return ['-shared'] + if self.compiler_type.is_windows_compiler: + return ['-Bdynamic', '-Mmakedll'] + elif not self.compiler_type.is_osx_compiler: + return ['-shared'] + return [] def get_pic_args(self) -> typing.List[str]: # PGI -fPIC is Linux only. -- cgit v1.1 From 0706434afea077139d6b9629ccec0181bceb0738 Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Sun, 28 Jul 2019 22:16:04 -0400 Subject: PGI doesn't have coarray fortran --- test cases/fortran/13 coarray/meson.build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test cases/fortran/13 coarray/meson.build b/test cases/fortran/13 coarray/meson.build index e1fb34b..3e52dde 100644 --- a/test cases/fortran/13 coarray/meson.build +++ b/test cases/fortran/13 coarray/meson.build @@ -4,8 +4,8 @@ project('Fortran coarray', 'fortran', fc = meson.get_compiler('fortran') fcid = fc.get_id() -if fcid == 'pgi' or fcid == 'flang' - error('MESON_SKIP_TEST: At least through: PGI 19.4 and Flang 7.0 do not support Fortran Coarrays.') +if ['pgi', 'flang'].contains(fcid) + error('MESON_SKIP_TEST: At least through PGI 19.4 and Flang 7.1 do not support Fortran Coarrays.') endif # coarray is required because single-image fallback is an intrinsic feature -- cgit v1.1 From fe638d63d9bfb60cf3e778eff42bf3886e6e2565 Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Sun, 28 Jul 2019 23:07:55 -0400 Subject: OpenMP is intrinsic to PGI --- mesonbuild/dependencies/misc.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py index c463ec3..ffe2feb 100644 --- a/mesonbuild/dependencies/misc.py +++ b/mesonbuild/dependencies/misc.py @@ -374,9 +374,16 @@ class OpenMPDependency(ExternalDependency): openmp_date = self.clib_compiler.get_define( '_OPENMP', '', self.env, self.clib_compiler.openmp_flags(), [self], disable_cache=True)[0] except mesonlib.EnvironmentException as e: - mlog.debug('OpenMP support not available in the compiler') - mlog.debug(e) - openmp_date = False + if self.clib_compiler.get_id() == 'pgi': + # through at least PGI 19.4, there is no macro defined for OpenMP, but OpenMP 3.1 is supported. + self.version = '3.1' + self.is_found = True + self.compile_args = self.link_args = self.clib_compiler.openmp_flags() + return + else: + mlog.debug('OpenMP support not available in the compiler') + mlog.debug(e) + openmp_date = None if openmp_date: self.version = self.VERSIONS[openmp_date] -- cgit v1.1 From 051e5e0e3512319f096c85a09e86b791dd6b8566 Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Sun, 28 Jul 2019 23:17:43 -0400 Subject: skip fortran dyamiclib tests on Windows --- test cases/fortran/6 dynamic/meson.build | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test cases/fortran/6 dynamic/meson.build b/test cases/fortran/6 dynamic/meson.build index 244a38b..413223b 100644 --- a/test cases/fortran/6 dynamic/meson.build +++ b/test cases/fortran/6 dynamic/meson.build @@ -1,9 +1,11 @@ project('dynamic_fortran', 'fortran') -if meson.get_compiler('fortran').get_id() == 'intel-cl' - error('MESON_SKIP_TEST: Windows ifort does not use shared_library in a sane way') +fcid = meson.get_compiler('fortran').get_id() +if fcid == 'intel-cl' or (host_machine.system() == 'windows' and fcid == 'pgi') + error('MESON_SKIP_TEST: non-Gfortran Windows Fortran compilers do not do shared libraries in a Fortran standard way') # !DEC$ ATTRIBUTES DLLEXPORT must be used! # https://software.intel.com/en-us/node/535306 + # https://www.pgroup.com/resources/docs/19.4/x86/pgi-user-guide/index.htm#lib-dynlnk-bld-dll-fort endif dynamic = shared_library('dynamic', 'dynamic.f90') -- cgit v1.1 From 902d0e579e086cd2733840f7eb5fb90078f1c8b2 Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Sun, 28 Jul 2019 23:21:03 -0400 Subject: default fortran lib to static so windows can be tested --- test cases/fortran/14 fortran links c/meson.build | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test cases/fortran/14 fortran links c/meson.build b/test cases/fortran/14 fortran links c/meson.build index 1ac47e4..a45f06f 100644 --- a/test cases/fortran/14 fortran links c/meson.build +++ b/test cases/fortran/14 fortran links c/meson.build @@ -1,5 +1,6 @@ project('Fortran calling C', 'fortran', 'c', - meson_version: '>= 0.51.0') + meson_version: '>= 0.51.0', + default_options : ['default_library=static']) ccid = meson.get_compiler('c').get_id() if ccid == 'msvc' or ccid == 'clang-cl' -- cgit v1.1 From c2f2e511050d13b7e9e8182c72a507c2d33da97f Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Sun, 28 Jul 2019 23:50:37 -0400 Subject: PGI: fix openmp for 190common test since there is no pgc++ on Windows, we avoid invoking that in 190common --- mesonbuild/dependencies/misc.py | 19 +++++++++---------- test cases/common/190 openmp/meson.build | 21 +++++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py index ffe2feb..cdfa48b 100644 --- a/mesonbuild/dependencies/misc.py +++ b/mesonbuild/dependencies/misc.py @@ -370,20 +370,19 @@ class OpenMPDependency(ExternalDependency): language = kwargs.get('language') super().__init__('openmp', environment, language, kwargs) self.is_found = False + if self.clib_compiler.get_id() == 'pgi': + # through at least PGI 19.4, there is no macro defined for OpenMP, but OpenMP 3.1 is supported. + self.version = '3.1' + self.is_found = True + self.compile_args = self.link_args = self.clib_compiler.openmp_flags() + return try: openmp_date = self.clib_compiler.get_define( '_OPENMP', '', self.env, self.clib_compiler.openmp_flags(), [self], disable_cache=True)[0] except mesonlib.EnvironmentException as e: - if self.clib_compiler.get_id() == 'pgi': - # through at least PGI 19.4, there is no macro defined for OpenMP, but OpenMP 3.1 is supported. - self.version = '3.1' - self.is_found = True - self.compile_args = self.link_args = self.clib_compiler.openmp_flags() - return - else: - mlog.debug('OpenMP support not available in the compiler') - mlog.debug(e) - openmp_date = None + mlog.debug('OpenMP support not available in the compiler') + mlog.debug(e) + openmp_date = None if openmp_date: self.version = self.VERSIONS[openmp_date] diff --git a/test cases/common/190 openmp/meson.build b/test cases/common/190 openmp/meson.build index 71bf697..a1154c2 100644 --- a/test cases/common/190 openmp/meson.build +++ b/test cases/common/190 openmp/meson.build @@ -1,4 +1,4 @@ -project('openmp', 'c', 'cpp') +project('openmp', 'c') cc = meson.get_compiler('c') if cc.get_id() == 'gcc' and cc.version().version_compare('<4.2.0') @@ -21,21 +21,22 @@ if host_machine.system() == 'darwin' endif openmp = dependency('openmp') +env = environment() +env.set('OMP_NUM_THREADS', '2') exec = executable('exec', 'main.c', dependencies : [openmp]) - -execpp = executable('execpp', - 'main.cpp', - dependencies : [openmp]) - -env = environment() -env.set('OMP_NUM_THREADS', '2') - test('OpenMP C', exec, env : env) -test('OpenMP C++', execpp, env : env) +if not(build_machine.system() == 'windows' and cc.get_id() == 'pgi') + if add_languages('cpp', required : false) + execpp = executable('execpp', + 'main.cpp', + dependencies : [openmp]) + test('OpenMP C++', execpp, env : env) + endif +endif if add_languages('fortran', required : false) # Mixing compilers (msvc/clang with gfortran) does not seem to work on Windows. -- cgit v1.1 From f5554957cb2114be6536a15df4db6e34b541c381 Mon Sep 17 00:00:00 2001 From: "Michael Hirsch, Ph.D" Date: Mon, 29 Jul 2019 00:23:35 -0400 Subject: skip common/223 for PGI, as even 19.4 doesn't fully support C++17 as claimed --- test cases/common/223 source set realistic example/meson.build | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test cases/common/223 source set realistic example/meson.build b/test cases/common/223 source set realistic example/meson.build index f983e8b..2a9475a 100644 --- a/test cases/common/223 source set realistic example/meson.build +++ b/test cases/common/223 source set realistic example/meson.build @@ -2,6 +2,12 @@ # modules, inspired by QEMU's build system project('sourceset-example', 'cpp') + +cppid = meson.get_compiler('cpp').get_id() +if cppid == 'pgi' + error('MESON_SKIP_TEST: Even PGI 19.4 that claims C++17 full support, cannot handle auto x = y syntax used in this test.') +endif + ss = import('sourceset') kconfig = import('unstable-kconfig') -- cgit v1.1