mirror of
https://github.com/wiiu-env/WiiUPluginSystem.git
synced 2024-12-23 16:42:00 +01:00
Enable LTO build (#77)
* fix(Makefile): Don't double up on optimisation flags This is already provided by BUILD_CFLAGS later on * feat(common): Mark explicitly-placed things as used If we put something in a given section, we should be able to expect it to actually turn up in that section! Doing this will prevent LTO from slurping all the hooks away as "unused". * feat: Enable LTO This uses "fat" binaries, so normal builds won't break, but also includes the LTO data for builds that wish to use it
This commit is contained in:
parent
1ac579aebb
commit
276d923569
3
Makefile
3
Makefile
@ -23,8 +23,9 @@ INCLUDES := include
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# options for code generation
|
# options for code generation
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
CFLAGS := -g -O2 -Wall -Werror -save-temps \
|
CFLAGS := -g -Wall -Werror -save-temps \
|
||||||
-ffunction-sections -fdata-sections \
|
-ffunction-sections -fdata-sections \
|
||||||
|
-flto -ffat-lto-objects \
|
||||||
$(MACHDEP) \
|
$(MACHDEP) \
|
||||||
$(BUILD_CFLAGS)
|
$(BUILD_CFLAGS)
|
||||||
|
|
||||||
|
@ -38,11 +38,16 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define WUPS_SECTION(x) __attribute__((__section__(".wups." x)))
|
#ifdef __cplusplus
|
||||||
|
#define WUPS_EXTERN_C extern "C"
|
||||||
|
#else
|
||||||
|
#define WUPS_EXTERN_C
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define WUPS_SECTION(x) WUPS_EXTERN_C __attribute__((__section__(".wups." x), used))
|
||||||
|
|
||||||
#define WUPS_META(id, value) \
|
#define WUPS_META(id, value) \
|
||||||
extern const char wups_meta_##id[] WUPS_SECTION("meta"); \
|
WUPS_SECTION("meta") const char wups_meta_##id[] = #id "=" value
|
||||||
const char wups_meta_##id[] = #id "=" value
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -148,9 +148,7 @@ typedef struct wups_loader_entry_t {
|
|||||||
#define WUPS_MUST_REPLACE_FOR_PROCESS(x, lib, function_name, targetProcess) WUPS_MUST_REPLACE_EX(NULL, NULL, real_##x, lib, my_##x, function_name, targetProcess)
|
#define WUPS_MUST_REPLACE_FOR_PROCESS(x, lib, function_name, targetProcess) WUPS_MUST_REPLACE_EX(NULL, NULL, real_##x, lib, my_##x, function_name, targetProcess)
|
||||||
|
|
||||||
#define WUPS_MUST_REPLACE_EX(pAddress, vAddress, original_func, rpl_type, replace_func, replace_function_name, process) \
|
#define WUPS_MUST_REPLACE_EX(pAddress, vAddress, original_func, rpl_type, replace_func, replace_function_name, process) \
|
||||||
extern const wups_loader_entry_t wups_load_##replace_func \
|
WUPS_SECTION("load") const wups_loader_entry_t wups_load_##replace_func = { \
|
||||||
WUPS_SECTION("load"); \
|
|
||||||
const wups_loader_entry_t wups_load_##replace_func = { \
|
|
||||||
.type = WUPS_LOADER_ENTRY_FUNCTION_MANDATORY, \
|
.type = WUPS_LOADER_ENTRY_FUNCTION_MANDATORY, \
|
||||||
._function = { \
|
._function = { \
|
||||||
.physical_address = (const void *) pAddress, \
|
.physical_address = (const void *) pAddress, \
|
||||||
|
@ -23,8 +23,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define WUPS_HOOK_EX(type_def, original_func) \
|
#define WUPS_HOOK_EX(type_def, original_func) \
|
||||||
extern const wups_loader_hook_t wups_hooks_##original_func WUPS_SECTION("hooks"); \
|
WUPS_SECTION("hooks") const wups_loader_hook_t wups_hooks_##original_func = { \
|
||||||
const wups_loader_hook_t wups_hooks_##original_func = { \
|
|
||||||
.type = type_def, \
|
.type = type_def, \
|
||||||
.target = (const void *) &(original_func)}
|
.target = (const void *) &(original_func)}
|
||||||
|
|
||||||
|
@ -50,14 +50,11 @@ extern "C" {
|
|||||||
WUPS___FINI_WRAPPER(); \
|
WUPS___FINI_WRAPPER(); \
|
||||||
WUPS_INIT_CONFIG_FUNCTIONS(); \
|
WUPS_INIT_CONFIG_FUNCTIONS(); \
|
||||||
WUPS_META(buildtimestamp, __DATE__ " " __TIME__); \
|
WUPS_META(buildtimestamp, __DATE__ " " __TIME__); \
|
||||||
extern const char wups_meta_plugin_name[] WUPS_SECTION("meta"); \
|
WUPS_SECTION("meta") const char wups_meta_plugin_name[] = __plugin_name; \
|
||||||
const char wups_meta_plugin_name[] = __plugin_name; \
|
WUPS_SECTION("meta") const char wups_meta_info_dump[] = "(plugin: " __plugin_name ";" \
|
||||||
extern const char wups_meta_info_dump[] WUPS_SECTION("meta"); \
|
|
||||||
const char wups_meta_info_dump[] = "(plugin: " __plugin_name ";" \
|
|
||||||
"wups " WUPS_VERSION_STR ";" \
|
"wups " WUPS_VERSION_STR ";" \
|
||||||
"buildtime: " __DATE__ " " __TIME__ ")"; \
|
"buildtime: " __DATE__ " " __TIME__ ")"; \
|
||||||
extern const char wups_meta_info_linking_order[] WUPS_SECTION("meta"); \
|
WUPS_SECTION("meta") const char wups_meta_info_linking_order[] = "Loading \"" __plugin_name "\" failed.\n" \
|
||||||
const char wups_meta_info_linking_order[] = "Loading \"" __plugin_name "\" failed.\n" \
|
|
||||||
"Function \"wut_get_thread_specific\" returned unexpected value.\n" \
|
"Function \"wut_get_thread_specific\" returned unexpected value.\n" \
|
||||||
"Please check linking order (expected \"-lwups -lwut\")";
|
"Please check linking order (expected \"-lwups -lwut\")";
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user