Fix: suppress Javelin test compilation via template dead-code elimination
This commit is contained in:
parent
13e873414b
commit
4f1a402240
2 changed files with 41 additions and 0 deletions
|
|
@ -220,6 +220,10 @@ if(CONFIG_ZMK_JAVELIN_STENO)
|
|||
JAVELIN_BOARD_CONFIG=<stddef.h>
|
||||
M_PI=3.14159265358979323846
|
||||
)
|
||||
# Suppress test compilation: Javelin's TEST_BEGIN/TEST_END macros
|
||||
# compile test bodies even without RUN_TESTS. Some tests reference
|
||||
# RUN_TESTS-only APIs. Override macros via include to dead-code them.
|
||||
zephyr_library_compile_options(-include ${CMAKE_CURRENT_LIST_DIR}/include/zmk_javelin_steno/suppress_tests.h)
|
||||
|
||||
target_sources(app PRIVATE
|
||||
${ZMK_BEHAVIOR_SRC}
|
||||
|
|
|
|||
37
include/zmk_javelin_steno/suppress_tests.h
Normal file
37
include/zmk_javelin_steno/suppress_tests.h
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
// Force-included before all Javelin sources to suppress test compilation.
|
||||
// Redefine TEST macros to produce no function body, avoiding compilation
|
||||
// of test code that references RUN_TESTS-only APIs.
|
||||
|
||||
#ifndef JAVELIN_SUPPRESS_TESTS_H
|
||||
#define JAVELIN_SUPPRESS_TESTS_H
|
||||
|
||||
// Override the test macros from unit_test.h.
|
||||
// Original (without RUN_TESTS):
|
||||
// TEST_BEGIN → namespace UnitTestNNN { static void Test() {
|
||||
// TEST_END → } }
|
||||
//
|
||||
// Our override makes Test() an empty function, then opens a dead namespace
|
||||
// that swallows the original test body code until TEST_END closes it.
|
||||
// The swallowed code goes into a struct with an unused template, so it
|
||||
// never gets instantiated or compiled.
|
||||
|
||||
#undef TEST_BEGIN__
|
||||
#undef TEST_BEGIN_
|
||||
#undef TEST_BEGIN
|
||||
#undef TEST_END
|
||||
|
||||
#define TEST_BEGIN__(text, file, line) \
|
||||
namespace UnitTest##line { \
|
||||
static inline void Test() {} \
|
||||
template<bool=false> struct Unused { \
|
||||
static void Swallowed() {
|
||||
|
||||
#define TEST_END \
|
||||
} \
|
||||
}; \
|
||||
}
|
||||
|
||||
#define TEST_BEGIN_(desc, file, line) TEST_BEGIN__(desc, file, line)
|
||||
#define TEST_BEGIN(desc) TEST_BEGIN_(desc, __FILE__, __LINE__)
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue