summaryrefslogtreecommitdiff
path: root/m4/efl_attribute.m4
diff options
context:
space:
mode:
Diffstat (limited to 'm4/efl_attribute.m4')
-rw-r--r--m4/efl_attribute.m451
1 files changed, 51 insertions, 0 deletions
diff --git a/m4/efl_attribute.m4 b/m4/efl_attribute.m4
index cd42e9cda6..4f31d93175 100644
--- a/m4/efl_attribute.m4
+++ b/m4/efl_attribute.m4
@@ -29,4 +29,55 @@ if test "x${have_attribute_vector}" = "xyes" ; then
fi
])
+dnl Usage: EFL_ATTRIBUTE_ALWAYS_INLINE
+dnl call AC_DEFINE for alway_inline if __attribute__((always_inline)) is available
+
+AC_DEFUN([EFL_ATTRIBUTE_ALWAYS_INLINE],
+[
+
+have_attribute_forceinline="no"
+
+AC_MSG_CHECKING([for __forceinline])
+
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <windows.h>
+static __forceinline void foo(void) {}
+ ]],
+ [[
+ ]])],
+ [
+ have_attribute_always_inline="yes"
+ have_attribute_forceinline="yes"
+ ],
+ [have_attribute_always_inline="no"])
+
+AC_MSG_RESULT([${have_attribute_always_inline}])
+
+if test "x${have_attribute_always_inline}" = "xno" ; then
+ AC_MSG_CHECKING([for __attribute__ ((__always_inline__))])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+static __attribute__((__always_inline__)) inline void foo(void) {}
+ ]],
+ [[
+ ]])],
+ [have_attribute_always_inline="yes"],
+ [have_attribute_always_inline="no"])
+ AC_MSG_RESULT([${have_attribute_always_inline}])
+fi
+
+if test "x${have_attribute_always_inline}" = "xyes" ; then
+ if test "x${have_attribute_forceinline}" = "xyes" ; then
+ AC_DEFINE([EFL_ALWAYS_INLINE], [__forceinline], [Macro declaring a function to always be inlined.])
+ else
+ AC_DEFINE([EFL_ALWAYS_INLINE], [__attribute__ ((__always_inline__)) inline], [Macro declaring a function to always be inlined.])
+ fi
+else
+ AC_DEFINE([EFL_ALWAYS_INLINE], [static inline], [Macro declaring a function to always be inlined.])
+fi
+])
+
dnl End of efl_attribute.m4