Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix build failures with OPT = 0 due to inline functions #19767

Merged
merged 5 commits into from
Feb 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions platforms/common.mk
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ PLATFORM_COMMON_DIR = $(PLATFORM_PATH)/$(PLATFORM_KEY)

TMK_COMMON_SRC += \
$(PLATFORM_PATH)/suspend.c \
$(PLATFORM_PATH)/synchronization_util.c \
$(PLATFORM_PATH)/timer.c \
$(PLATFORM_COMMON_DIR)/hardware_id.c \
$(PLATFORM_COMMON_DIR)/platform.c \
$(PLATFORM_COMMON_DIR)/suspend.c \
Expand Down
17 changes: 17 additions & 0 deletions platforms/synchronization_util.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// Copyright 2023 Sergey Vlasov (@sigprof)
// SPDX-License-Identifier: GPL-2.0-or-later

#include "synchronization_util.h"

// Generate out-of-line copies for inline functions defined in synchronization_util.h.

#if !defined(PLATFORM_SUPPORTS_SYNCHRONIZATION)
# if defined(SPLIT_KEYBOARD)
extern inline void split_shared_memory_lock(void);
extern inline void split_shared_memory_unlock(void);
# endif
#endif

#if defined(SPLIT_KEYBOARD)
QMK_IMPLEMENT_AUTOUNLOCK_HELPERS(split_shared_memory)
#endif
6 changes: 6 additions & 0 deletions platforms/synchronization_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,12 @@ inline void split_shared_memory_unlock(void){};
prefix##_unlock(); \
}

/* Generate an out-of-line implementation in case the inline functions defined
* by the above macro don't actually get inlined. */
#define QMK_IMPLEMENT_AUTOUNLOCK_HELPERS(prefix) \
extern inline unsigned prefix##_autounlock_lock_helper(void); \
extern inline void prefix##_autounlock_unlock_helper(unsigned* unused_guard);

/* Convinience macro the automatically generate the correct RAII-style
* lock_autounlock function macro */
#define QMK_DECLARE_AUTOUNLOCK_CALL(prefix) unsigned prefix##_guard __attribute__((unused, cleanup(prefix##_autounlock_unlock_helper))) = prefix##_autounlock_lock_helper
Expand Down
8 changes: 8 additions & 0 deletions platforms/timer.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// Copyright 2023 Sergey Vlasov (@sigprof)
// SPDX-License-Identifier: GPL-2.0-or-later

#include "timer.h"

// Generate out-of-line copies for inline functions defined in timer.h.
extern inline fast_timer_t timer_read_fast(void);
extern inline fast_timer_t timer_elapsed_fast(fast_timer_t last);
2 changes: 1 addition & 1 deletion quantum/mousekey.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#include "debug.h"
#include "mousekey.h"

inline int8_t times_inv_sqrt2(int8_t x) {
static inline int8_t times_inv_sqrt2(int8_t x) {
// 181/256 is pretty close to 1/sqrt(2)
// 0.70703125 0.707106781
// 1 too small for x=99 and x=198
Expand Down