commit e48b089a8319e527f35e8bad450ba635b1dd9097
parent 9d210914bf26eaf28dede27a941d350a0ebdb7be
Author: Evgeny Grin (Karlson2k) <k2k@drgrin.dev>
Date: Fri, 17 Oct 2025 16:37:34 +0200
Added internal macros indicating compiler optimisations
Diffstat:
2 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/configure.ac b/configure.ac
@@ -337,8 +337,12 @@ AS_CASE([${enable_build_type}],[release|release-*],
[/* no includes */])],[/* no includes */])
CPPFLAGS="${CPPFLAGS_ac} ${user_CPPFLAGS}"
CFLAGS="${user_CFLAGS}"
- MHD_FIND_ADD_CC_CFLAG([CFLAGS_ac], [-Oz], [-Os], [-xO3], [-O])
- CFLAGS="${CFLAGS_ac} ${user_CFLAGS}"
+ MHD_FIND_ADD_CC_CFLAG_IFELSE(
+ [AC_DEFINE([MHD_CC_OPTIMISE_FOR_SIZE],[1],[Define to 1 if compiler optimises binary for size])],
+ [],
+ [CFLAGS_ac], [-Oz], [-Os], [-xO3], [-O]
+ )
+ CFLAGS="${CFLAGS_ac} ${user_CFLAGS}"
],
[ # All non-compact release types
CPPFLAGS="${CPPFLAGS_ac} ${user_CPPFLAGS}"
@@ -348,8 +352,12 @@ AS_CASE([${enable_build_type}],[release|release-*],
[/* no includes */])],[/* no includes */])
CPPFLAGS="${CPPFLAGS_ac} ${user_CPPFLAGS}"
CFLAGS="${user_CFLAGS}"
- MHD_FIND_ADD_CC_CFLAG([CFLAGS_ac], [-O2], [-xO4], [-O])
- CFLAGS="${CFLAGS_ac} ${user_CFLAGS}"
+ MHD_FIND_ADD_CC_CFLAG_IFELSE(
+ [AC_DEFINE([MHD_CC_OPTIMISE_FOR_SPEED],[1],[Define to 1 if compiler optimises binary for speed])],
+ [],
+ [CFLAGS_ac], [-O2], [-xO4], [-O]
+ )
+ CFLAGS="${CFLAGS_ac} ${user_CFLAGS}"
]
)
]
diff --git a/src/incl_priv/mhd_sys_options.h b/src/incl_priv/mhd_sys_options.h
@@ -527,6 +527,17 @@
# endif /* DEBUG */
#endif /* !_DEBUG && !NDEBUG */
+#if ! defined(MHD_CC_OPTIMISE_FOR_SIZE) \
+ && ! defined(MHD_CC_OPTIMISE_FOR_SPEED)
+# if defined(__OPTIMIZE_SIZE__) || defined(__OPTIMISE_SPACE)
+# define MHD_CC_OPTIMISE_FOR_SIZE 1
+# elif defined(__OPTIMIZE__) || defined(__OPTIMISE_TIME)
+# define MHD_CC_OPTIMISE_FOR_SPEED 1
+# endif /* __OPTIMIZE__ */
+#elif defined(MHD_CC_OPTIMISE_FOR_SIZE) && defined(MHD_CC_OPTIMISE_FOR_SPEED)
+#error MHD_CC_OPTIMISE_FOR_SIZE and MHD_CC_OPTIMISE_FOR_SPEED are both defined.
+#endif
+
#if defined(MHD_FAVOR_FAST_CODE) && defined(MHD_FAVOR_SMALL_CODE)
#error MHD_FAVOR_FAST_CODE and MHD_FAVOR_SMALL_CODE are both defined.
#error Cannot favor speed and size at the same time.
@@ -535,12 +546,11 @@
/* Define MHD_FAVOR_FAST_CODE to force fast code path or
define MHD_FAVOR_SMALL_CODE to choose compact code path */
#if ! defined(MHD_FAVOR_FAST_CODE) && ! defined(MHD_FAVOR_SMALL_CODE)
-/* Try to detect user preferences */
-/* Defined by GCC and many compatible compilers */
-# if defined(__OPTIMIZE_SIZE__)
-# define MHD_FAVOR_SMALL_CODE 1
-# elif defined(__OPTIMIZE__)
-# define MHD_FAVOR_FAST_CODE 1
+/* Try to guess automatically user preferences */
+# if defined(MHD_CC_OPTIMISE_FOR_SPEED)
+# define MHD_FAVOR_FAST_CODE 1
+# elif defined(MHD_CC_OPTIMISE_FOR_SIZE)
+# define MHD_FAVOR_SMALL_CODE 1
# endif /* __OPTIMIZE__ */
#endif /* !MHD_FAVOR_FAST_CODE && !MHD_FAVOR_SMALL_CODE */