aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Đorđević <vomindoraan@gmail.com>2020-04-09 01:18:30 +0200
committerGitHub <noreply@github.com>2020-04-09 00:18:30 +0100
commitbe2f5816b6cf6513591f825df1d0438729b83388 (patch)
tree86d00fbf766521955ab50706b8d109d800e4b052
parentff213d5fe1a74f345dd2263c6fb4bc9280f74e0f (diff)
downloadqmk_firmware-be2f5816b6cf6513591f825df1d0438729b83388.tar.gz
qmk_firmware-be2f5816b6cf6513591f825df1d0438729b83388.zip
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
-rw-r--r--docs/config_options.md10
-rw-r--r--quantum/template/avr/config.h7
-rw-r--r--quantum/template/ps2avrgb/config.h6
-rw-r--r--tmk_core/common.mk2
-rw-r--r--tmk_core/common/action.h10
5 files changed, 20 insertions, 15 deletions
diff --git a/docs/config_options.md b/docs/config_options.md
index 661cfccce..16fea83a3 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
115* `#define NO_ACTION_ONESHOT` 115* `#define NO_ACTION_ONESHOT`
116 * disable one-shot modifiers 116 * disable one-shot modifiers
117* `#define NO_ACTION_MACRO` 117* `#define NO_ACTION_MACRO`
118 * disable old style macro handling: MACRO() & action_get_macro 118 * disable old-style macro handling using `MACRO()`, `action_get_macro()` _(deprecated)_
119* `#define NO_ACTION_FUNCTION` 119* `#define NO_ACTION_FUNCTION`
120 * disable calling of action_function() from the fn_actions array (deprecated) 120 * disable old-style function handling using `fn_actions`, `action_function()` _(deprecated)_
121 121
122## Features That Can Be Enabled 122## Features That Can Be Enabled
123 123
@@ -317,10 +317,10 @@ This is a [make](https://www.gnu.org/software/make/manual/make.html) file that i
317* `LAYOUTS` 317* `LAYOUTS`
318 * A list of [layouts](feature_layouts.md) this keyboard supports. 318 * A list of [layouts](feature_layouts.md) this keyboard supports.
319* `LINK_TIME_OPTIMIZATION_ENABLE` 319* `LINK_TIME_OPTIMIZATION_ENABLE`
320 * 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. 320 * 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).
321 It does this by automatically defining `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION` 321However, 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).)
322* `LTO_ENABLE` 322* `LTO_ENABLE`
323 * It has the same meaning as LINK_TIME_OPTIMIZATION_ENABLE. You can use `LTO_ENABLE` instead of `LINK_TIME_OPTIMIZATION_ENABLE`. 323 * Has the same meaning as `LINK_TIME_OPTIMIZATION_ENABLE`. You can use `LTO_ENABLE` instead of `LINK_TIME_OPTIMIZATION_ENABLE`.
324 324
325## AVR MCU Options 325## AVR MCU Options
326* `MCU = atmega32u4` 326* `MCU = atmega32u4`
diff --git a/quantum/template/avr/config.h b/quantum/template/avr/config.h
index 7e4a01449..88402fbdd 100644
--- a/quantum/template/avr/config.h
+++ b/quantum/template/avr/config.h
@@ -192,10 +192,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
192//#define NO_ACTION_ONESHOT 192//#define NO_ACTION_ONESHOT
193 193
194/* disable these deprecated features by default */ 194/* disable these deprecated features by default */
195#ifndef LINK_TIME_OPTIMIZATION_ENABLE 195#define NO_ACTION_MACRO
196 #define NO_ACTION_MACRO 196#define NO_ACTION_FUNCTION
197 #define NO_ACTION_FUNCTION 197
198#endif
199/* 198/*
200 * MIDI options 199 * MIDI options
201 */ 200 */
diff --git a/quantum/template/ps2avrgb/config.h b/quantum/template/ps2avrgb/config.h
index 2eb484422..3f3fd5fd7 100644
--- a/quantum/template/ps2avrgb/config.h
+++ b/quantum/template/ps2avrgb/config.h
@@ -43,10 +43,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
43#define RGBLIGHT_ANIMATIONS 43#define RGBLIGHT_ANIMATIONS
44 44
45/* disable these deprecated features by default */ 45/* disable these deprecated features by default */
46#ifndef LINK_TIME_OPTIMIZATION_ENABLE 46#define NO_ACTION_MACRO
47 #define NO_ACTION_MACRO 47#define NO_ACTION_FUNCTION
48 #define NO_ACTION_FUNCTION
49#endif
50 48
51/* key combination for magic key command */ 49/* key combination for magic key command */
52/* defined by default; to change, uncomment and set to the combination you want */ 50/* 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 4d4272d26..3d0b83a01 100644
--- a/tmk_core/common.mk
+++ b/tmk_core/common.mk
@@ -162,8 +162,6 @@ ifeq ($(strip $(LINK_TIME_OPTIMIZATION_ENABLE)), yes)
162 endif 162 endif
163 EXTRAFLAGS += -flto 163 EXTRAFLAGS += -flto
164 TMK_COMMON_DEFS += -DLINK_TIME_OPTIMIZATION_ENABLE 164 TMK_COMMON_DEFS += -DLINK_TIME_OPTIMIZATION_ENABLE
165 TMK_COMMON_DEFS += -DNO_ACTION_MACRO
166 TMK_COMMON_DEFS += -DNO_ACTION_FUNCTION
167endif 165endif
168 166
169# Search Path 167# Search Path
diff --git a/tmk_core/common/action.h b/tmk_core/common/action.h
index dd22023f9..c82c9c81b 100644
--- a/tmk_core/common/action.h
+++ b/tmk_core/common/action.h
@@ -28,6 +28,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
28extern "C" { 28extern "C" {
29#endif 29#endif
30 30
31/* Disable macro and function features when LTO is enabled, since they break */
32#ifdef LINK_TIME_OPTIMIZATION_ENABLE
33# ifndef NO_ACTION_MACRO
34# define NO_ACTION_MACRO
35# endif
36# ifndef NO_ACTION_FUNCTION
37# define NO_ACTION_FUNCTION
38# endif
39#endif
40
31/* tapping count and state */ 41/* tapping count and state */
32typedef struct { 42typedef struct {
33 bool interrupted : 1; 43 bool interrupted : 1;