From 7ec087183b4d79d998fca72d6a5d6aefea32c0d6 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 --- quantum/template/avr/config.h | 4 ++++ quantum/template/ps2avrgb/config.h | 4 +++- tmk_core/common.mk | 2 -- tmk_core/common/action.h | 10 ++++++++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/quantum/template/avr/config.h b/quantum/template/avr/config.h index eb9651cc0e..010a78896c 100644 --- a/quantum/template/avr/config.h +++ b/quantum/template/avr/config.h @@ -195,6 +195,10 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION +/* disable these deprecated features by default */ +#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 3cceadb319..ac1b3c8abd 100644 --- a/quantum/template/ps2avrgb/config.h +++ b/quantum/template/ps2avrgb/config.h @@ -46,7 +46,9 @@ along with this program. If not, see . #define BACKLIGHT_LEVELS 1 #define RGBLIGHT_ANIMATIONS -#define NO_UART 1 +/* disable these deprecated features by default */ +#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 a998a8a02d..ae3f111f7b 100644 --- a/tmk_core/common.mk +++ b/tmk_core/common.mk @@ -167,8 +167,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 dd22023f9b..c82c9c81be 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;