LOCAL_DIR := $(GET_LOCAL_DIR) MODULE := $(LOCAL_DIR) LIBCXX_DIR = external/libcxx MODULE_LICENSES += $(LIBCXX_DIR)/LICENSE.TXT MODULE_EXPORT_INCLUDES += $(LIBCXX_DIR)/include MODULE_EXPORT_INCLUDES += $(LOCAL_DIR)/include MODULE_SDK_HEADER_INSTALL_DIR := c++/v1 # The header files change if they're being used to build the library. # For example, adding "public" methods that are only used internally. MODULE_CPPFLAGS += -D_LIBCPP_BUILDING_LIBRARY # libcxx defines fallback functions unless it knows they'll be found in libcxxabi. MODULE_CPPFLAGS += -DLIBCXX_BUILDING_LIBCXXABI # Unfortunately these must be global because they change the contents of the header files. # _LIBCPP_BUILD_STATIC is obviously an issue because it can eliminate a virtual # function and lead to a missing vtable entry. The others are made global out of # caution. MODULE_EXPORT_CPPFLAGS += -D_LIBCPP_BUILD_STATIC -D_LIBCPP_HAS_MUSL_LIBC # Use features supported by musl and Trusty MODULE_EXPORT_CPPFLAGS += \ -D_LIBCPP_HAS_QUICK_EXIT \ -D_LIBCPP_HAS_TIMESPEC_GET \ -D_LIBCPP_HAS_C11_FEATURES \ # We need to pick a threading backend otherwise libcxx doesn't # export some C++ headers, e.g., . musl supports pthreads # so we pick the pthreads backend, enabling those headers. # For now, any code that tries to use std::thread will fail to link # until Trusty implements the syscalls used by musl's pthreads. MODULE_EXPORT_CPPFLAGS += \ -D_LIBCPP_HAS_THREAD_API_PTHREAD \ MODULE_SRCS := \ $(LIBCXX_DIR)/src/algorithm.cpp \ $(LIBCXX_DIR)/src/any.cpp \ $(LIBCXX_DIR)/src/bind.cpp \ $(LIBCXX_DIR)/src/charconv.cpp \ $(LIBCXX_DIR)/src/chrono.cpp \ $(LIBCXX_DIR)/src/condition_variable.cpp \ $(LIBCXX_DIR)/src/debug.cpp \ $(LIBCXX_DIR)/src/exception.cpp \ $(LIBCXX_DIR)/src/future.cpp \ $(LIBCXX_DIR)/src/hash.cpp \ $(LIBCXX_DIR)/src/ios.cpp \ $(LIBCXX_DIR)/src/iostream.cpp \ $(LIBCXX_DIR)/src/locale.cpp \ $(LIBCXX_DIR)/src/memory.cpp \ $(LIBCXX_DIR)/src/mutex.cpp \ $(LIBCXX_DIR)/src/new.cpp \ $(LIBCXX_DIR)/src/optional.cpp \ $(LIBCXX_DIR)/src/regex.cpp \ $(LIBCXX_DIR)/src/shared_mutex.cpp \ $(LIBCXX_DIR)/src/stdexcept.cpp \ $(LIBCXX_DIR)/src/string.cpp \ $(LIBCXX_DIR)/src/strstream.cpp \ $(LIBCXX_DIR)/src/system_error.cpp \ $(LIBCXX_DIR)/src/thread.cpp \ $(LIBCXX_DIR)/src/typeinfo.cpp \ $(LIBCXX_DIR)/src/utility.cpp \ $(LIBCXX_DIR)/src/valarray.cpp \ $(LIBCXX_DIR)/src/variant.cpp \ $(LIBCXX_DIR)/src/vector.cpp \ # TODO add src/random.cpp when there is support for getting entropy. MODULE_LIBRARY_DEPS += \ trusty/user/base/lib/libcxxabi-trusty \ trusty/user/base/lib/libc-trusty \ include make/library.mk