From 51e9db370a0ebccaf220e171c3444a0f2c4e1723 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Fri, 29 Sep 2017 11:52:06 -0700 Subject: Add method to check for C/C++ function attributes It's fairly common on Linux and *BSD platforms to check for these attributes existence, so it makes sense to me to have this checking build into meson itself. Autotools also has a builtin for handling these, and by building them in we can short circuit cases that we know that these don't exist (MSVC). Additionally this adds support for two common MSVC __declspec attributes, dllimport and dllexport. This implements the declspec version (even though GCC has an __attribute__ version that both it and clang support), since GCC and Clang support the MSVC version as well. Thus it seems reasonable to assume that most projects will use the __declspec version over teh __attribute__ version. --- docs/markdown/snippets/function_attributes.md | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 docs/markdown/snippets/function_attributes.md (limited to 'docs/markdown/snippets') diff --git a/docs/markdown/snippets/function_attributes.md b/docs/markdown/snippets/function_attributes.md new file mode 100644 index 0000000..5514494 --- /dev/null +++ b/docs/markdown/snippets/function_attributes.md @@ -0,0 +1,29 @@ +## Helper methods added for checking GNU style attributes: __attribute__(...) + +A set of new helpers have been added to the C and C++ compiler objects for +checking GNU style function attributes. These are not just simpler to use, they +may be optimized to return fast on compilers that don't support these +attributes. Currently this is true for MSVC. + +```meson +cc = meson.get_compiler('c') +if cc.has_function_attribute('aligned') + add_project_arguments('-DHAVE_ALIGNED', language : 'c') +endif +``` + +Would replace code like: + +```meson +if cc.compiles('''into foo(void) __attribute__((aligned(32)))''') + add_project_arguments('-DHAVE_ALIGNED', language : 'c') +endif +``` + +Additionally, a multi argument version has been added: + +```meson +foreach s : cc.get_supported_function_attributes(['hidden', 'alias']) + add_project_arguments('-DHAVE_@0@'.format(s.to_upper()), language : 'c') +endforeach +``` -- cgit v1.1