Add some scaffolding needed for C++ modules in GCC.

Further work pending GCC bug #105467 and/or Ninja bug #1962.
pull/10358/head
Jussi Pakkanen 3 years ago
parent 7183d9d71e
commit eef51fa3d6
  1. 2
      mesonbuild/backend/ninjabackend.py
  2. 7
      test cases/unit/85 cpp modules/gcc/main.cpp
  3. 19
      test cases/unit/85 cpp modules/gcc/meson.build
  4. 7
      test cases/unit/85 cpp modules/gcc/src0.cxx
  5. 7
      test cases/unit/85 cpp modules/gcc/src1.cxx
  6. 7
      test cases/unit/85 cpp modules/gcc/src2.cxx
  7. 7
      test cases/unit/85 cpp modules/gcc/src3.cxx
  8. 7
      test cases/unit/85 cpp modules/gcc/src4.cxx
  9. 7
      test cases/unit/85 cpp modules/gcc/src5.cxx
  10. 7
      test cases/unit/85 cpp modules/gcc/src6.cxx
  11. 7
      test cases/unit/85 cpp modules/gcc/src7.cxx
  12. 7
      test cases/unit/85 cpp modules/gcc/src8.cxx
  13. 5
      test cases/unit/85 cpp modules/gcc/src9.cxx
  14. 2
      test cases/unit/85 cpp modules/meson.build

@ -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':

@ -0,0 +1,7 @@
import M0;
#include<cstdio>
int main() {
printf("The value is %d", func0());
return 0;
}

@ -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)

@ -0,0 +1,7 @@
export module M0;
import M1;
export int func0() {
return func1();
}

@ -0,0 +1,7 @@
export module M1;
import M2;
export int func1() {
return func2();
}

@ -0,0 +1,7 @@
export module M2;
import M3;
export int func2() {
return func3();
}

@ -0,0 +1,7 @@
export module M3;
import M4;
export int func3() {
return func4();
}

@ -0,0 +1,7 @@
export module M4;
import M5;
export int func4() {
return func5();
}

@ -0,0 +1,7 @@
export module M5;
import M6;
export int func5() {
return func6();
}

@ -0,0 +1,7 @@
export module M6;
import M7;
export int func6() {
return func7();
}

@ -0,0 +1,7 @@
export module M7;
import M8;
export int func7() {
return func8();
}

@ -0,0 +1,7 @@
export module M8;
import M9;
export int func8() {
return func9();
}

@ -0,0 +1,5 @@
export module M9;
export int func9() {
return 42;
}

@ -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

Loading…
Cancel
Save