ifndef LIBCXX error LIBCXX not configured endif ifndef LIBCXXABI error LIBCXXABI not configured endif ifndef LIBUNWIND_BAREMETAL error LIBUNWIND_BAREMETAL not configured endif ifndef LIBUNWIND error LIBUNWIND not configured endif include_rules COMMON_FLAGS = -ffunction-sections -fno-strict-aliasing CFLAGS += $(COMMON_FLAGS) CXXFLAGS += $(COMMON_FLAGS) CPPFLAGS += -I@(LIBCXX)/include/c++/v1 CPPFLAGS += -I@(LIBCXXABI)/include LLVM_LIBS += @(LIBCXXABI)/lib/libc++abi.a : foreach *.cc |> !cxx |> {obj} # # Prevent symbols of the gcc support libs from being discarded during 'ld -r' # KEEP_SYMBOLS = \ -u __cxa_guard_acquire \ -u __dynamic_cast \ -u __cxa_throw_bad_array_new_length \ -u __cxa_current_exception_type \ -u _ZTVN10__cxxabiv116__enum_type_infoE \ -u _ZN10__cxxabiv121__vmi_class_type_infoD0Ev \ -u _ZTVN10__cxxabiv119__pointer_type_infoE \ -u _ZTSN10__cxxabiv120__function_type_infoE \ # Here we define all symbols we want to hide in libsupc++ and libgcc_eh # LOCAL_SYMBOLS = \ --localize-symbol=__stderrp --localize-symbol=abort \ --localize-symbol=calloc \ --localize-symbol=fflush \ --localize-symbol=fprintf \ --localize-symbol=fputc \ --localize-symbol=fputs \ --localize-symbol=free \ --localize-symbol=fwrite \ --localize-symbol=islower \ --localize-symbol=isxdigit \ --localize-symbol=malloc \ --localize-symbol=memcmp \ --localize-symbol=memcpy \ --localize-symbol=memmove \ --localize-symbol=memset \ --localize-symbol=posix_memalign \ --localize-symbol=realloc \ --localize-symbol=snprintf \ --localize-symbol=sprintf \ --localize-symbol=stderr \ --localize-symbol=strcat \ --localize-symbol=strcmp \ --localize-symbol=strcpy \ --localize-symbol=strlen \ --localize-symbol=strncmp \ --localize-symbol=vfprintf \ # # Symbols we wrap (see unwind.c) # EH_SYMBOLS = \ _Unwind_Complete \ _Unwind_DeleteException \ # # Additional functions for ARM # EH_SYMBOLS += \ __aeabi_unwind_cpp_pr0 \ __aeabi_unwind_cpp_pr1 \ REDEF_SYMBOLS = `echo $(EH_SYMBOLS) | awk -v RS=' ' '{ print "--redefine-sym "$1"=_cxx_"$1 }'` : {obj} |> \ $(LD) $(LD_MARCH) $(KEEP_SYMBOLS) -r %f $(LLVM_LIBS) @(LIBUNWIND)/lib/libunwind.a -o %o |> supc++.tmp : {obj} |> \ $(LD) $(LD_MARCH) $(KEEP_SYMBOLS) -r %f $(LLVM_LIBS) @(LIBUNWIND_BAREMETAL)/lib/libunwind.a -o %o |> supc++-baremetal.tmp : foreach *.c |> !cc |> {obj} export OBJCOPY : supc++.tmp |> $OBJCOPY $(LOCAL_SYMBOLS) $(REDEF_SYMBOLS) %f %o |> supc++.o : supc++-baremetal.tmp |> $OBJCOPY $(LOCAL_SYMBOLS) $(REDEF_SYMBOLS) %f %o |> supc++-baremetal.o # : supc++.o |> !ar |> cxx.a {bin} : supc++-baremetal.o |> !ar |> cxx-baremetal.a {bin} : foreach {bin} |> !collect_static |> : |> !emit_lib_pkg_config |>