64 lines
2.3 KiB
Makefile
64 lines
2.3 KiB
Makefile
#
|
|
# Copyright (C) 2023 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
# Interprets APP_STL to configure default cflags/ldflags and install rules for
|
|
# libc++ runtime libraries as necessary.
|
|
|
|
ifneq (,$(call module_needs_clangxx,$(LOCAL_MODULE)))
|
|
|
|
ifeq ($(APP_STL),none)
|
|
LOCAL_CPPFLAGS += -nostdinc++
|
|
LOCAL_LDFLAGS += -nostdlib++
|
|
else ifeq ($(APP_STL),system)
|
|
# TODO: Actually use the system STL headers for that mode or remove.
|
|
#
|
|
# I'm not sure how long this has been broken, but released NDKs do not use the
|
|
# bionic C++ headers when APP_STL=system, they use the libc++ headers. That's
|
|
# almost certainly unintentional.
|
|
#
|
|
# There may not actually be any compatibility issues with this because bionic's
|
|
# libstdc++ only provides new and delete anyway (the rest of the behavior is
|
|
# just headers that re-expose C APIs in the std namespace). We could choose to
|
|
# delete bionic's headers and keep this "bug" instead.
|
|
|
|
# LOCAL_CPPFLAGS += -stdlib=libstdc++
|
|
# LOCAL_LDFLAGS += -stdlib=libstdc++
|
|
|
|
# TODO: Remove when https://reviews.llvm.org/D55856 is merged.
|
|
#
|
|
# The system STL Android.mk will export -lstdc++, but the Clang driver will
|
|
# helpfully rewrite -lstdc++ to whatever the default C++ stdlib linker
|
|
# arguments are, except in the presence of -nostdlib and -nodefaultlibs.
|
|
# That part of the driver does not account for -nostdlib++. We can fix the
|
|
# behavior by using -stdlib=libstdc++ so it rewrites -lstdc++ to -lstdc++
|
|
# instead of -lc++.
|
|
LOCAL_LDFLAGS += -stdlib=libstdc++
|
|
|
|
ifneq (,$(call module-has-c++-features,$(LOCAL_MODULE),rtti exceptions))
|
|
LOCAL_LDLIBS += -lc++abi
|
|
endif
|
|
|
|
else ifeq ($(APP_STL),c++_static)
|
|
LOCAL_LDFLAGS += -static-libstdc++
|
|
endif
|
|
|
|
# Else c++_shared, and no flags are needed. Shared libc++ is the default
|
|
# behavior for Android targets in Clang.
|
|
#
|
|
# Invalid values will be checked by ndk-stl-check.
|
|
|
|
endif
|