diff --git a/lib/font_renderer/libstdcpp-replace.cpp b/lib/font_renderer/libstdcpp-replace.cpp new file mode 100644 index 00000000..fcb38e7c --- /dev/null +++ b/lib/font_renderer/libstdcpp-replace.cpp @@ -0,0 +1,26 @@ +#include +#include + +extern "C" void* emulate_cc_new(unsigned len) { \ + void *p = malloc(len); + if (p == 0) { + /* Don't use stdio (e.g. fputs), because that may want to allocate more + * memory. + */ + (void)!write(2, "out of memory\n", 14); + abort(); + } + return p; +} + +extern "C" void emulate_cc_delete(void* p) { + if (p != 0) + free(p); +} + +void* operator new (unsigned len) __attribute__((alias("emulate_cc_new"))); +void* operator new[](unsigned len) __attribute__((alias("emulate_cc_new"))); +void operator delete (void* p) __attribute__((alias("emulate_cc_delete"))); +void operator delete[](void* p) __attribute__((alias("emulate_cc_delete"))); +void* __cxa_pure_virtual = 0; +void* __gxx_personality_sj0 = 0; diff --git a/lib/font_renderer/meson.build b/lib/font_renderer/meson.build index 7724d584..76351f2d 100644 --- a/lib/font_renderer/meson.build +++ b/lib/font_renderer/meson.build @@ -9,6 +9,7 @@ endif font_renderer_sources = [ 'agg_font_freetype.cpp', 'font_renderer.cpp', + 'libstdcpp-replace.cpp', ] font_renderer_cdefs = ['-DFONT_RENDERER_HEIGHT_HACK'] diff --git a/meson.build b/meson.build index 57921eac..d136d326 100644 --- a/meson.build +++ b/meson.build @@ -8,9 +8,10 @@ lua_dep = dependency('lua5.2', required : false) lite_link_args = [] if get_option('buildtype') == 'release' if cc.get_id() == 'gcc' - lite_link_args += ['-static-libgcc', '-static-libstdc++'] + lite_link_args += ['-static-libgcc'] #, '-static-libstdc++'] endif add_global_arguments('-fdata-sections', '-ffunction-sections', language : ['c', 'cpp']) + add_global_arguments('-fno-rtti', '-fno-exceptions', language : 'cpp') add_global_link_arguments('-Wl,--gc-sections', language : ['c', 'cpp']) endif