From be2f5816b6cf6513591f825df1d0438729b83388 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20=C4=90or=C4=91evi=C4=87?= Date: Thu, 9 Apr 2020 01:18:30 +0200 Subject: [PATCH] Fix compile issues related to NO_ACTION_MACRO/FUNCTION and LTO_ENABLE (#8663) * Define NO_ACTION_MACRO/FUNCTION in header instead of makefile when LTO is enabled Currently, boards and keymaps that define NO_ACTION_MACRO/FUNCTION unconditionally will not compile with LTO_ENABLE (#8604). This fixes the issue by moving the definitions from common.mk to action.h, which enables us to check for previous definitions of those macros (this cannot be done in a makefile). * Remove LTO checks in templates Since now NO_ACTION_MACRO/FUNCTION are defined as needed in action.h (which is included by quantum.h), checking for LTO in keyboard and user code is no longer required. * Update LTO_ENABLE docs --- docs/config_options.md | 10 +++++----- quantum/template/avr/config.h | 7 +++---- quantum/template/ps2avrgb/config.h | 6 ++---- tmk_core/common.mk | 2 -- tmk_core/common/action.h | 10 ++++++++++ 5 files changed, 20 insertions(+), 15 deletions(-) diff --git a/docs/config_options.md b/docs/config_options.md index 661cfccce6def0118067cfb93ee4e2d53a4ad439..16fea83a3312ea3336e324129ff51d6a9724642e 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -115,9 +115,9 @@ If you define these options you will disable the associated feature, which can s * `#define NO_ACTION_ONESHOT` * disable one-shot modifiers * `#define NO_ACTION_MACRO` - * disable old style macro handling: MACRO() & action_get_macro + * disable old-style macro handling using `MACRO()`, `action_get_macro()` _(deprecated)_ * `#define NO_ACTION_FUNCTION` - * disable calling of action_function() from the fn_actions array (deprecated) + * disable old-style function handling using `fn_actions`, `action_function()` _(deprecated)_ ## Features That Can Be Enabled @@ -317,10 +317,10 @@ This is a [make](https://www.gnu.org/software/make/manual/make.html) file that i * `LAYOUTS` * A list of [layouts](feature_layouts.md) this keyboard supports. * `LINK_TIME_OPTIMIZATION_ENABLE` - * Enables Link Time Optimization (`LTO`) when compiling the keyboard. This makes the process take longer, but can significantly reduce the compiled size (and since the firmware is small, the added time is not noticeable). However, this will automatically disable the old Macros and Functions features automatically, as these break when `LTO` is enabled. - It does this by automatically defining `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION` + * Enables Link Time Optimization (LTO) when compiling the keyboard. This makes the process take longer, but it can significantly reduce the compiled size (and since the firmware is small, the added time is not noticeable). +However, this will automatically disable the legacy TMK Macros and Functions features, as these break when LTO is enabled. It does this by automatically defining `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION`. (Note: This does not affect QMK [Macros](feature_macros.md) and [Layers](feature_layers.md).) * `LTO_ENABLE` - * It has the same meaning as LINK_TIME_OPTIMIZATION_ENABLE. You can use `LTO_ENABLE` instead of `LINK_TIME_OPTIMIZATION_ENABLE`. + * Has the same meaning as `LINK_TIME_OPTIMIZATION_ENABLE`. You can use `LTO_ENABLE` instead of `LINK_TIME_OPTIMIZATION_ENABLE`. ## AVR MCU Options * `MCU = atmega32u4` diff --git a/quantum/template/avr/config.h b/quantum/template/avr/config.h index 7e4a014495e47e3579b50ffbcb9aa93eaff82a44..88402fbdd065fa57d95245c0b244eff60d61c814 100644 --- a/quantum/template/avr/config.h +++ b/quantum/template/avr/config.h @@ -192,10 +192,9 @@ along with this program. If not, see . //#define NO_ACTION_ONESHOT /* disable these deprecated features by default */ -#ifndef LINK_TIME_OPTIMIZATION_ENABLE - #define NO_ACTION_MACRO - #define NO_ACTION_FUNCTION -#endif +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION + /* * MIDI options */ diff --git a/quantum/template/ps2avrgb/config.h b/quantum/template/ps2avrgb/config.h index 2eb4844226fb7996a3cdfa2df9dd3ce040dc39a2..3f3fd5fd7676b3cc0f09ba6010eec3d322b33a51 100644 --- a/quantum/template/ps2avrgb/config.h +++ b/quantum/template/ps2avrgb/config.h @@ -43,10 +43,8 @@ along with this program. If not, see . #define RGBLIGHT_ANIMATIONS /* disable these deprecated features by default */ -#ifndef LINK_TIME_OPTIMIZATION_ENABLE - #define NO_ACTION_MACRO - #define NO_ACTION_FUNCTION -#endif +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION /* key combination for magic key command */ /* defined by default; to change, uncomment and set to the combination you want */ diff --git a/tmk_core/common.mk b/tmk_core/common.mk index 4d4272d26ec643ee32faa121182df724d4462fb5..3d0b83a01c9449be21159c63bd9bd9c74acb7520 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -162,8 +162,6 @@ ifeq ($(strip $(LINK_TIME_OPTIMIZATION_ENABLE)), yes) endif EXTRAFLAGS += -flto TMK_COMMON_DEFS += -DLINK_TIME_OPTIMIZATION_ENABLE - TMK_COMMON_DEFS += -DNO_ACTION_MACRO - TMK_COMMON_DEFS += -DNO_ACTION_FUNCTION endif # Search Path diff --git a/tmk_core/common/action.h b/tmk_core/common/action.h index dd22023f9bb20d72de34bd9a509169f382b3ba24..c82c9c81be4d047c06e134896fd8875a1ad19a58 100644 --- a/tmk_core/common/action.h +++ b/tmk_core/common/action.h @@ -28,6 +28,16 @@ along with this program. If not, see . extern "C" { #endif +/* Disable macro and function features when LTO is enabled, since they break */ +#ifdef LINK_TIME_OPTIMIZATION_ENABLE +# ifndef NO_ACTION_MACRO +# define NO_ACTION_MACRO +# endif +# ifndef NO_ACTION_FUNCTION +# define NO_ACTION_FUNCTION +# endif +#endif + /* tapping count and state */ typedef struct { bool interrupted : 1;