From 1918c0d231f0c04b1a57c2fdf057b50c8aa7312b Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Wed, 25 Apr 2018 22:25:55 +0300 Subject: Can combine D and C++ in a single target. Closes #3125. --- test cases/d/10 d cpp/cppmain.cpp | 6 ++++++ test cases/d/10 d cpp/dmain.d | 5 +++++ test cases/d/10 d cpp/libfile.cpp | 5 +++++ test cases/d/10 d cpp/libfile.d | 5 +++++ test cases/d/10 d cpp/meson.build | 13 +++++++++++++ 5 files changed, 34 insertions(+) create mode 100644 test cases/d/10 d cpp/cppmain.cpp create mode 100644 test cases/d/10 d cpp/dmain.d create mode 100644 test cases/d/10 d cpp/libfile.cpp create mode 100644 test cases/d/10 d cpp/libfile.d create mode 100644 test cases/d/10 d cpp/meson.build (limited to 'test cases') diff --git a/test cases/d/10 d cpp/cppmain.cpp b/test cases/d/10 d cpp/cppmain.cpp new file mode 100644 index 000000000..aeddf56e8 --- /dev/null +++ b/test cases/d/10 d cpp/cppmain.cpp @@ -0,0 +1,6 @@ +extern void print_hello(int i); + +int main(int, char**) { + print_hello(1); + return 0; +} diff --git a/test cases/d/10 d cpp/dmain.d b/test cases/d/10 d cpp/dmain.d new file mode 100644 index 000000000..bece25f6c --- /dev/null +++ b/test cases/d/10 d cpp/dmain.d @@ -0,0 +1,5 @@ +extern (C++) void print_hello(int i); + +void main() { + print_hello(1); +} diff --git a/test cases/d/10 d cpp/libfile.cpp b/test cases/d/10 d cpp/libfile.cpp new file mode 100644 index 000000000..2ea67fc92 --- /dev/null +++ b/test cases/d/10 d cpp/libfile.cpp @@ -0,0 +1,5 @@ +#include + +void print_hello(int i) { + std::cout << "Hello. Here is a number printed with C++: " << i << ".\n"; +} diff --git a/test cases/d/10 d cpp/libfile.d b/test cases/d/10 d cpp/libfile.d new file mode 100644 index 000000000..88cb53e9b --- /dev/null +++ b/test cases/d/10 d cpp/libfile.d @@ -0,0 +1,5 @@ +import std.stdio; + +extern (C++) void print_hello(int i) { + writefln("Hello. Here is a number printed with D: %d", i); +} diff --git a/test cases/d/10 d cpp/meson.build b/test cases/d/10 d cpp/meson.build new file mode 100644 index 000000000..eecb151f4 --- /dev/null +++ b/test cases/d/10 d cpp/meson.build @@ -0,0 +1,13 @@ +project('d and c++', 'd', 'cpp') + +cpp = meson.get_compiler('cpp') + +if cpp.get_id() == 'clang' + error('MESON_SKIP_TEST combining Clang C++ with GDC produces broken executables.') +endif + +e1 = executable('dcpp', 'dmain.d', 'libfile.cpp') +test('dcpp', e1) + +e2 = executable('cppd', 'cppmain.cpp', 'libfile.d') +test('cppd', e2) -- cgit v1.2.3 From a2fdaa9ea081304dda70557755f5895194227668 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Wed, 25 Apr 2018 22:46:39 +0300 Subject: Can use C++ and FORTRAN in a single target. Closes #2685. --- mesonbuild/compilers/fortran.py | 4 +++- test cases/fortran/9 cpp/fortran.f | 5 +++++ test cases/fortran/9 cpp/main.cpp | 8 ++++++++ test cases/fortran/9 cpp/meson.build | 10 ++++++++++ 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 test cases/fortran/9 cpp/fortran.f create mode 100644 test cases/fortran/9 cpp/main.cpp create mode 100644 test cases/fortran/9 cpp/meson.build (limited to 'test cases') diff --git a/mesonbuild/compilers/fortran.py b/mesonbuild/compilers/fortran.py index 9d3240f45..87fa702f5 100644 --- a/mesonbuild/compilers/fortran.py +++ b/mesonbuild/compilers/fortran.py @@ -183,13 +183,15 @@ class GnuFortranCompiler(FortranCompiler): def openmp_flags(self): return ['-fopenmp'] + def language_stdlib_only_link_flags(self): + return ['-lgfortran', '-lm', '-lquadmath'] + class ElbrusFortranCompiler(GnuFortranCompiler, ElbrusCompiler): def __init__(self, exelist, version, gcc_type, is_cross, exe_wrapper=None, defines=None, **kwargs): GnuFortranCompiler.__init__(self, exelist, version, gcc_type, is_cross, exe_wrapper, defines, **kwargs) ElbrusCompiler.__init__(self, gcc_type, defines) - class G95FortranCompiler(FortranCompiler): def __init__(self, exelist, version, is_cross, exe_wrapper=None, **kwags): super().__init__(exelist, version, is_cross, exe_wrapper=None, **kwags) diff --git a/test cases/fortran/9 cpp/fortran.f b/test cases/fortran/9 cpp/fortran.f new file mode 100644 index 000000000..e69466932 --- /dev/null +++ b/test cases/fortran/9 cpp/fortran.f @@ -0,0 +1,5 @@ + function fortran() bind(C) + use, intrinsic :: iso_c_binding + real(kind=c_double) :: fortran + fortran = 2.0**rand(1) + end function fortran diff --git a/test cases/fortran/9 cpp/main.cpp b/test cases/fortran/9 cpp/main.cpp new file mode 100644 index 000000000..f5828f453 --- /dev/null +++ b/test cases/fortran/9 cpp/main.cpp @@ -0,0 +1,8 @@ +#include + +extern "C" double fortran(); + +int main(int, char**) { + std::cout << "FORTRAN gave us this number: " << fortran() << '\n'; + return 0; +} diff --git a/test cases/fortran/9 cpp/meson.build b/test cases/fortran/9 cpp/meson.build new file mode 100644 index 000000000..49497c07d --- /dev/null +++ b/test cases/fortran/9 cpp/meson.build @@ -0,0 +1,10 @@ +project('C++ and FORTRAN', 'cpp', 'fortran') + +cpp = meson.get_compiler('cpp') + +if cpp.get_id() == 'clang' + error('MESON_SKIP_TEST Clang C++ does not find -lgfortran for some reason.') +endif + +e = executable('cppfort', 'main.cpp', 'fortran.f') +test('C++ FORTRAN', e) -- cgit v1.2.3