aboutsummaryrefslogtreecommitdiffstats
path: root/meson/test cases/common/119 cpp and asm
diff options
context:
space:
mode:
authorAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
committerAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
commitaf1a266670d040d2f4083ff309d732d648afba2a (patch)
tree2fc46203448ddcc6f81546d379abfaeb323575e9 /meson/test cases/common/119 cpp and asm
parente02cda008591317b1625707ff8e115a4841aa889 (diff)
Add submodule dependency filesHEADmaster
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'meson/test cases/common/119 cpp and asm')
-rw-r--r--meson/test cases/common/119 cpp and asm/meson.build33
-rw-r--r--meson/test cases/common/119 cpp and asm/retval-arm.S11
-rw-r--r--meson/test cases/common/119 cpp and asm/retval-x86.S11
-rw-r--r--meson/test cases/common/119 cpp and asm/retval-x86_64.S11
-rw-r--r--meson/test cases/common/119 cpp and asm/symbol-underscore.h5
-rw-r--r--meson/test cases/common/119 cpp and asm/trivial.cc16
6 files changed, 87 insertions, 0 deletions
diff --git a/meson/test cases/common/119 cpp and asm/meson.build b/meson/test cases/common/119 cpp and asm/meson.build
new file mode 100644
index 000000000..99713d485
--- /dev/null
+++ b/meson/test cases/common/119 cpp and asm/meson.build
@@ -0,0 +1,33 @@
+project('c++ and assembly test')
+add_languages('cpp')
+
+if meson.backend() == 'xcode'
+ error('MESON_SKIP_TEST: asm not supported with the Xcode backend. Patches welcome.')
+endif
+
+cpp = meson.get_compiler('cpp')
+cpu = host_machine.cpu_family()
+
+supported_cpus = ['arm', 'x86', 'x86_64']
+
+if not supported_cpus.contains(cpu)
+ error('MESON_SKIP_TEST unsupported cpu:' + cpu)
+endif
+
+if cpp.symbols_have_underscore_prefix()
+ add_project_arguments('-DMESON_TEST__UNDERSCORE_SYMBOL', language : 'cpp')
+endif
+
+sources = ['trivial.cc']
+# If the compiler cannot compile assembly, don't use it
+if not ['msvc', 'clang-cl', 'intel-cl'].contains(meson.get_compiler('cpp').get_id())
+ sources += ['retval-' + cpu + '.S']
+ cpp_args = ['-DUSE_ASM']
+ message('Using ASM')
+else
+ cpp_args = ['-DNO_USE_ASM']
+endif
+
+exe = executable('trivialprog', sources,
+ cpp_args : cpp_args)
+test('runtest', exe)
diff --git a/meson/test cases/common/119 cpp and asm/retval-arm.S b/meson/test cases/common/119 cpp and asm/retval-arm.S
new file mode 100644
index 000000000..a8923624a
--- /dev/null
+++ b/meson/test cases/common/119 cpp and asm/retval-arm.S
@@ -0,0 +1,11 @@
+#include "symbol-underscore.h"
+
+.text
+.globl SYMBOL_NAME(get_retval)
+# ifdef __linux__
+.type get_retval, %function
+#endif
+
+SYMBOL_NAME(get_retval):
+ mov r0, #0
+ mov pc, lr
diff --git a/meson/test cases/common/119 cpp and asm/retval-x86.S b/meson/test cases/common/119 cpp and asm/retval-x86.S
new file mode 100644
index 000000000..f9e819070
--- /dev/null
+++ b/meson/test cases/common/119 cpp and asm/retval-x86.S
@@ -0,0 +1,11 @@
+#include "symbol-underscore.h"
+
+.text
+.globl SYMBOL_NAME(get_retval)
+# ifdef __linux__
+.type get_retval, %function
+#endif
+
+SYMBOL_NAME(get_retval):
+ xorl %eax, %eax
+ retl
diff --git a/meson/test cases/common/119 cpp and asm/retval-x86_64.S b/meson/test cases/common/119 cpp and asm/retval-x86_64.S
new file mode 100644
index 000000000..1a5f3eb23
--- /dev/null
+++ b/meson/test cases/common/119 cpp and asm/retval-x86_64.S
@@ -0,0 +1,11 @@
+#include "symbol-underscore.h"
+
+.text
+.globl SYMBOL_NAME(get_retval)
+# ifdef __linux__
+.type get_retval, %function
+#endif
+
+SYMBOL_NAME(get_retval):
+ xorl %eax, %eax
+ retq
diff --git a/meson/test cases/common/119 cpp and asm/symbol-underscore.h b/meson/test cases/common/119 cpp and asm/symbol-underscore.h
new file mode 100644
index 000000000..d0f3ef9cc
--- /dev/null
+++ b/meson/test cases/common/119 cpp and asm/symbol-underscore.h
@@ -0,0 +1,5 @@
+#if defined(MESON_TEST__UNDERSCORE_SYMBOL)
+# define SYMBOL_NAME(name) _##name
+#else
+# define SYMBOL_NAME(name) name
+#endif
diff --git a/meson/test cases/common/119 cpp and asm/trivial.cc b/meson/test cases/common/119 cpp and asm/trivial.cc
new file mode 100644
index 000000000..19d5e944d
--- /dev/null
+++ b/meson/test cases/common/119 cpp and asm/trivial.cc
@@ -0,0 +1,16 @@
+#include<iostream>
+
+extern "C" {
+ int get_retval(void);
+}
+
+int main(void) {
+ std::cout << "C++ seems to be working." << std::endl;
+#if defined(USE_ASM)
+ return get_retval();
+#elif defined(NO_USE_ASM)
+ return 0;
+#else
+ #error "Forgot to pass asm define"
+#endif
+}