From 8098fe7244b72c066bad62178b5020a9e2491d2b Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Tue, 3 May 2022 18:11:08 +0300 Subject: Add some scaffolding needed for C++ modules in GCC. Further work pending GCC bug #105467 and/or Ninja bug #1962. --- mesonbuild/backend/ninjabackend.py | 2 ++ test cases/unit/85 cpp modules/gcc/main.cpp | 7 +++++++ test cases/unit/85 cpp modules/gcc/meson.build | 19 +++++++++++++++++++ test cases/unit/85 cpp modules/gcc/src0.cxx | 7 +++++++ test cases/unit/85 cpp modules/gcc/src1.cxx | 7 +++++++ test cases/unit/85 cpp modules/gcc/src2.cxx | 7 +++++++ test cases/unit/85 cpp modules/gcc/src3.cxx | 7 +++++++ test cases/unit/85 cpp modules/gcc/src4.cxx | 7 +++++++ test cases/unit/85 cpp modules/gcc/src5.cxx | 7 +++++++ test cases/unit/85 cpp modules/gcc/src6.cxx | 7 +++++++ test cases/unit/85 cpp modules/gcc/src7.cxx | 7 +++++++ test cases/unit/85 cpp modules/gcc/src8.cxx | 7 +++++++ test cases/unit/85 cpp modules/gcc/src9.cxx | 5 +++++ test cases/unit/85 cpp modules/meson.build | 2 ++ 14 files changed, 98 insertions(+) create mode 100644 test cases/unit/85 cpp modules/gcc/main.cpp create mode 100644 test cases/unit/85 cpp modules/gcc/meson.build create mode 100644 test cases/unit/85 cpp modules/gcc/src0.cxx create mode 100644 test cases/unit/85 cpp modules/gcc/src1.cxx create mode 100644 test cases/unit/85 cpp modules/gcc/src2.cxx create mode 100644 test cases/unit/85 cpp modules/gcc/src3.cxx create mode 100644 test cases/unit/85 cpp modules/gcc/src4.cxx create mode 100644 test cases/unit/85 cpp modules/gcc/src5.cxx create mode 100644 test cases/unit/85 cpp modules/gcc/src6.cxx create mode 100644 test cases/unit/85 cpp modules/gcc/src7.cxx create mode 100644 test cases/unit/85 cpp modules/gcc/src8.cxx create mode 100644 test cases/unit/85 cpp modules/gcc/src9.cxx diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 1720138..35c14ee 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -913,6 +913,8 @@ class NinjaBackend(backends.Backend): return True if 'cpp' not in target.compilers: return False + if '-fmodules-ts' in target.extra_args.get('cpp', []): + return True # Currently only the preview version of Visual Studio is supported. cpp = target.compilers['cpp'] if cpp.get_id() != 'msvc': diff --git a/test cases/unit/85 cpp modules/gcc/main.cpp b/test cases/unit/85 cpp modules/gcc/main.cpp new file mode 100644 index 0000000..d825c7d --- /dev/null +++ b/test cases/unit/85 cpp modules/gcc/main.cpp @@ -0,0 +1,7 @@ +import M0; +#include + +int main() { + printf("The value is %d", func0()); + return 0; +} diff --git a/test cases/unit/85 cpp modules/gcc/meson.build b/test cases/unit/85 cpp modules/gcc/meson.build new file mode 100644 index 0000000..e405c56 --- /dev/null +++ b/test cases/unit/85 cpp modules/gcc/meson.build @@ -0,0 +1,19 @@ +# GCC does not recognize .ixx as a C++ source extension so +# we have to do this instead. + +e = executable('modtest', + 'main.cpp', + 'src0.cxx', + 'src1.cxx', + 'src2.cxx', + 'src3.cxx', + 'src4.cxx', + 'src5.cxx', + 'src6.cxx', + 'src7.cxx', + 'src8.cxx', + 'src9.cxx', + cpp_args: ['-fmodules-ts'], + ) + +test('modtest', e) diff --git a/test cases/unit/85 cpp modules/gcc/src0.cxx b/test cases/unit/85 cpp modules/gcc/src0.cxx new file mode 100644 index 0000000..3ca4d14 --- /dev/null +++ b/test cases/unit/85 cpp modules/gcc/src0.cxx @@ -0,0 +1,7 @@ +export module M0; + +import M1; + +export int func0() { + return func1(); +} diff --git a/test cases/unit/85 cpp modules/gcc/src1.cxx b/test cases/unit/85 cpp modules/gcc/src1.cxx new file mode 100644 index 0000000..cea6696 --- /dev/null +++ b/test cases/unit/85 cpp modules/gcc/src1.cxx @@ -0,0 +1,7 @@ +export module M1; + +import M2; + +export int func1() { + return func2(); +} diff --git a/test cases/unit/85 cpp modules/gcc/src2.cxx b/test cases/unit/85 cpp modules/gcc/src2.cxx new file mode 100644 index 0000000..415714c --- /dev/null +++ b/test cases/unit/85 cpp modules/gcc/src2.cxx @@ -0,0 +1,7 @@ +export module M2; + +import M3; + +export int func2() { + return func3(); +} diff --git a/test cases/unit/85 cpp modules/gcc/src3.cxx b/test cases/unit/85 cpp modules/gcc/src3.cxx new file mode 100644 index 0000000..96f135c --- /dev/null +++ b/test cases/unit/85 cpp modules/gcc/src3.cxx @@ -0,0 +1,7 @@ +export module M3; + +import M4; + +export int func3() { + return func4(); +} diff --git a/test cases/unit/85 cpp modules/gcc/src4.cxx b/test cases/unit/85 cpp modules/gcc/src4.cxx new file mode 100644 index 0000000..1ac1a6a --- /dev/null +++ b/test cases/unit/85 cpp modules/gcc/src4.cxx @@ -0,0 +1,7 @@ +export module M4; + +import M5; + +export int func4() { + return func5(); +} diff --git a/test cases/unit/85 cpp modules/gcc/src5.cxx b/test cases/unit/85 cpp modules/gcc/src5.cxx new file mode 100644 index 0000000..96cf707 --- /dev/null +++ b/test cases/unit/85 cpp modules/gcc/src5.cxx @@ -0,0 +1,7 @@ +export module M5; + +import M6; + +export int func5() { + return func6(); +} diff --git a/test cases/unit/85 cpp modules/gcc/src6.cxx b/test cases/unit/85 cpp modules/gcc/src6.cxx new file mode 100644 index 0000000..760b71c --- /dev/null +++ b/test cases/unit/85 cpp modules/gcc/src6.cxx @@ -0,0 +1,7 @@ +export module M6; + +import M7; + +export int func6() { + return func7(); +} diff --git a/test cases/unit/85 cpp modules/gcc/src7.cxx b/test cases/unit/85 cpp modules/gcc/src7.cxx new file mode 100644 index 0000000..8ce6608 --- /dev/null +++ b/test cases/unit/85 cpp modules/gcc/src7.cxx @@ -0,0 +1,7 @@ +export module M7; + +import M8; + +export int func7() { + return func8(); +} diff --git a/test cases/unit/85 cpp modules/gcc/src8.cxx b/test cases/unit/85 cpp modules/gcc/src8.cxx new file mode 100644 index 0000000..6a3ef96 --- /dev/null +++ b/test cases/unit/85 cpp modules/gcc/src8.cxx @@ -0,0 +1,7 @@ +export module M8; + +import M9; + +export int func8() { + return func9(); +} diff --git a/test cases/unit/85 cpp modules/gcc/src9.cxx b/test cases/unit/85 cpp modules/gcc/src9.cxx new file mode 100644 index 0000000..3ecb3be --- /dev/null +++ b/test cases/unit/85 cpp modules/gcc/src9.cxx @@ -0,0 +1,5 @@ +export module M9; + +export int func9() { + return 42; +} diff --git a/test cases/unit/85 cpp modules/meson.build b/test cases/unit/85 cpp modules/meson.build index 3dd5033..579ea9b 100644 --- a/test cases/unit/85 cpp modules/meson.build +++ b/test cases/unit/85 cpp modules/meson.build @@ -4,6 +4,8 @@ cpp = meson.get_compiler('cpp') if cpp.get_id() == 'msvc' subdir('vs') +elif cpp.get_id() == 'gcc' + subdir('gcc') else error('Unknown compiler') endif -- cgit v1.1