genode/repos/base/src/lib/cxx/Tupfile

132 lines
3.1 KiB
Plaintext

include_rules
COMMON_FLAGS = -ffunction-sections -fno-strict-aliasing
CFLAGS += $(COMMON_FLAGS)
CXXFLAGS += $(COMMON_FLAGS)
#
# 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 \
ifdef IS_LLVM
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
CPPFLAGS += -I@(LIBCXX)/include/c++/v1
CPPFLAGS += -I@(LIBCXXABI)/include
LLVM_LIBS += @(LIBCXXABI)/lib/libc++abi.a
endif
CPPFLAGS += -I`$(CC) -print-file-name=include`
: foreach *.cc |> !cxx |> {obj}
REDEF_SYMBOLS = `echo $(EH_SYMBOLS) | awk -v RS=' ' '{ print "--redefine-sym "$1"=_cxx_"$1 }'`
: foreach *.c |> !cc |> {obj}
ifdef IS_LLVM
: {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
: 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 |>
endif
ifdef IS_GCC
LIBCXX_GCC += `$(CXX) $(CC_MARCH) -print-file-name=libsupc++.a`
#LIBCXX_GCC += `$(CXX) $(CC_MARCH) -print-file-name=libgcc_eh.a || true`
: {obj} |> \
$(LD) $(LD_MARCH) $(KEEP_SYMBOLS) -r %f $(LIBCXX_GCC) -o %o |> supc++.tmp
: supc++.tmp |> $OBJCOPY $(LOCAL_SYMBOLS) $(REDEF_SYMBOLS) %f %o |> supc++.o
: supc++.o |> !ar |> cxx.a {bin}
: foreach {bin} |> !collect_static |>
: |> !emit_lib_pkg_config |>
endif