Commit graph

42 commits

Author SHA1 Message Date
Peter Collingbourne
86cdf9c2f4 Update make build system for dynamic unwinder.
Change the unwinder linking logic to match soong.

Bug: 144430859
Change-Id: I739980e479d14707b7a3afd6e9d2c817c9b43f81
2020-01-10 11:09:52 -08:00
Ryan Prichard
acf8b0ff00 Stop linking libdl.a into static bins
libdl.a has a no-op dlopen, which breaks static libraries that need a real
dlopen. Instead of automatically linking libdl.a into static executables,
make it optional.

Until recently, the libunwind_llvm.a unwinder, used on arm32, needed the
no-op dladdr, but it's now built using -D_LIBUNWIND_USE_DLADDR=0.

The HWASan run-time uses dlsym and dladdr, so add a libdl dependency for
HWASan-built static binaries. We could also remove the dependency from
libclang_rt.hwasan_static-*.a, but this is also easy to do.

Bug: http://b/141485154
Test: bionic unit tests, device boots, verify that static and dynamic
   executables can throw/catch an exception
Test: verify that a static executable using dlopen doesn't link (unless it
   adds an explicit dependency on libdl)

Change-Id: Id26741f79dca50256a2dc23453af3026a6c88dca
2019-10-24 18:15:05 -07:00
Colin Cross
84783a776e Use -nostdlib++ instead of -nodefaultlibs
Host builds using libc++ used -nodefaultlibs to turn off the default
C++ runtime, and then added back all the other necessary libraries.
Clang supports -nostdlib++ since https://reviews.llvm.org/D47115
that removes the C++ runtime without affecting the other default
libraries.  Use -nostdlib++, and remove the lists of default
libraries.

Test: m checkbuild
Change-Id: Ib8b761534f64fd7f881e14598e514783678e0b35
2019-10-03 16:04:52 -07:00
Tom Cherry
04eacb384b Merge "Remove setting _USING_LIBCXX" 2019-08-27 15:10:27 +00:00
Dan Albert
d892b63a1d Link libc++demangle with libc++ for the device.
libc++demangle provides __cxa_demangle, which used to be a part of
libc++.so but is being moved out to save on resources since very few
libraries need it.

Test: make checkbuild
Bug: http://b/138245375
Change-Id: I677006dbbe87ccf2dd4df182114d2a6b985e3c00
2019-08-13 13:15:04 -07:00
Tom Cherry
65d3bc3f08 Remove setting _USING_LIBCXX
aosp/1086558 deprecated the need for this.

Test: build
Change-Id: I161258a8883a60dc46ba10fbd78be8f9413fa28b
2019-08-07 13:20:04 -07:00
Dan Willemsen
f264690860 Remove support for building Windows modules in Make
These now must be defined in Android.bp files.

Bug: 122618577
Test: compare build-aosp_arm.ninja before/after
Test: codesearch for LOCAL_MODULE_HOST_OS.*windows
Change-Id: I14451c7753299692940e026f85687b4c3331bb07
2019-02-05 00:19:41 -08:00
Pirama Arumuga Nainar
132f959e5e Use libucrt instead of libmsvcr110
Bug: http://b/117796718

ucrt is either preinstalled in newer Windows or can be installed in
older Windows, whereas a dependence on msvcr110 doesn't work on Windows
without additional dependencies.

Test: Run generated binaries on Windows VM (7, 8, and 10) without
installing any extra dependencies.

Change-Id: If5a5ffaa9d822ca05b4b54896937f224103f33d7
2018-11-29 17:22:32 -08:00
Pirama Arumuga Nainar
80ba345f0e Change STL for Windows to libc++.
- Link libgcc_eh, which needs pthread, which in turn depends on
kernel32.  Wrap the libraries with --start-group and --end-group and
remove duplicates.
- Use SjLj exceptions for 32-bit.  libgcc_eh implements SjLj exception
model for 32-bit.
- Disable visibility annotations for libcxx and libcxxabi since we are
only going to support these as static libraries.
- Use Win32 threads.  MinGW pthreads throws an error when building
libcxx since it's pthread_mutex_initializer is not constant (needs a
cast).

Test: Build and test Windows binaries under Wine.

Change-Id: I594fa7673282ff5c1b7b80d49f48b7618960a148
2018-09-25 21:11:23 -07:00
Dan Albert
9262b6fead Disable availability macros in libc++ on Darwin.
libc++'s headers are annotated with availability macros that indicate
which version of Mac OS was the first to ship with a libc++ feature
available in its *system's* libc++.dylib. We do not use the system's
library, but rather ship our own. As such, these availability
attributes are meaningless for us but cause build breaks when we try
to use code that would not be available in the system's dylib.

Test: removed the darwin check and checked showcommands on linux
Bug: None
Change-Id: I5f69f337baa29fcdf84b5e2fe46bf4f85904d1cd
2018-01-11 13:24:32 -08:00
Dan Willemsen
a3a06feeed Add -lm to the default libs for Linux & Darwin
libm is a default library for device builds, so default it for host
builds as well.

Also removes duplicate additions of -ldl, -lpthread, -lm and -lrt.

Test: m host
Change-Id: I6a07e12053090eb6997b79d4091c28ac9a9022de
2017-09-26 20:26:11 -07:00
Dimitry Ivanov
cdf3927ec4 Add libdl.so to the list of system shared libs
Note that libdl is already (always) implicitly loaded
because libc.so has a dependency on it.

Also make sure that libc.so always preceding libdl.so
in dt_needed list.

Bug: http://b/62815515
Test: make
Change-Id: I94c9d676b7fa98438b452d24f6c3bbf93166c6a9
2017-06-27 16:05:13 -07:00
Dan Willemsen
c9aa6fca41 Fix building static linux binaries
BUILD_HOST_static has been broken because I was stripping
-Wl,--start-group/-Wl,--end-group into a separate set of ldflags instead
of keeping them wrapped around some of the ldlibs. So don't pass some of
the build system flags through the ldlibs checker.

Bug: 30898128
Change-Id: I332b42679695cdc5da3cb0036290b6a3544699c0
2016-09-13 17:48:07 +00:00
Dan Willemsen
327fa9c411 Forbid libstdc++ on Linux and Darwin
The last user has been removed, forbid any modules from selecting this.

Change-Id: Idd9ef6ca4b6c6754935d59c4a09c7d213ae481c1
2016-06-15 13:41:45 -07:00
Colin Cross
50a8120f02 Remove support for device libstdc++ as stl
Prevent platform modules from linking against libstdc++ as their STL
implementation.  NDK modules may still use libstdc++.

Change-Id: I317c9bb90ca7d2e0c1f5770bbdff8075dfe3cc83
2016-03-17 13:10:56 -07:00
Dan Willemsen
441d646c6f Fix C++ on Darwin
We've been including the system libc++ headers even if we're building
against our version of libc++. Stop doing that, and only add the headers
to our path if we're using the system libraries.

If nothing is specified, on recent OSX versions, libc++ is the default
c++ library instead of libstdc++. We've been explicitly including the
libc++ headers on all versions, but that breaks old versions. Force us
over to libc++, since the system libstdc++ does not support C++11, and
libc++ is still supported on our oldest version (10.8).

Change-Id: I1fccee8da0f425e10ccc9d3247ed40664eb6ada0
2016-03-08 20:15:21 -08:00
Dan Albert
0e2e71dc2e Add support for LOCAL_NDK_STL_VARIANT := none.
Sometimes we don't want any STL.

Change-Id: I08b4389b7882702c0e483a1456f7775fe4da1c75
2015-12-09 15:59:17 -08:00
Dan Albert
eb3e3fa5da Use exported includes for libc++.
Change-Id: Ia5d9c857a43975448a8c2b489cc29be0fa67ddf6
2015-09-24 14:09:09 -07:00
Dan Albert
d1d68b19ac Fix LOCAL_CXX_STL := none for Windows.
We still need to link the various MSVC libraries even if we aren't
using the STL.

Bug: http://b/22953515
Change-Id: I73c35710a6162408e99480a4840eedd291adf7ab
2015-09-11 13:37:51 -07:00
Dan Willemsen
057aaea54a Add HOST_CROSS_OS
Instead of using recursive make to change the HOST_OS when building the
windows SDK under linux, add the concept of cross-building to another
host os.

Bug: 23566667
Change-Id: I6dc525b601b6251d458d197c30bf4660d7485502
2015-09-09 18:12:29 +00:00
Dan Willemsen
1ca3b70f84 Blacklist libc++ from windows host builds
It's not ready, and instead of each Android.mk doing this, do it in the
core build.

Change-Id: Ie80b17ffcde64e72c98d310ca986d4cf775c099e
2015-08-18 19:08:45 -07:00
Dan Albert
ef3e7cfa5d Disallow LOCAL_CXX_STL with LOCAL_SDK_VERSION.
Change-Id: I2cd97b453ad24cc4e5d59b4035e861df41b8cbb9
2015-07-27 14:14:56 -07:00
Dan Albert
686a557689 Revert "Revert "Hide unwinder symbols in each binary.""
Bug: 18471342
Bug: 19958712
This reverts commit 61f675bb53.

Change-Id: I87d3655d1238a9cf26d96dcb0665ba5110931800
2015-06-23 13:33:10 -07:00
Bart Sears
61f675bb53 Revert "Hide unwinder symbols in each binary."
This reverts commit dc30a16ba2.

Change-Id: Ib6af148bcaa3041b3040e525442a39b493852794
2015-06-23 19:23:13 +00:00
Dan Albert
dc30a16ba2 Hide unwinder symbols in each binary.
These symbols need to always be resolved for each binary. Making these
symbols hidden means that we will get a build breakage if this doesn't
happen, and should also prevent the situation where one unwinder's
symbols are visible to the other.

Bug: 18471342
Bug: 19958712
Change-Id: Ieff1f10dab254b60ed120410f45998cf75bb5b9b
2015-06-22 15:54:57 -07:00
Dan Albert
2a4a023a54 Fix using libc++_static in dynamic binaries.
Change-Id: I89bacfbf270d2d1bc1b9b2fa6951b355a67b808c
2015-05-12 14:07:18 -07:00
Dan Albert
5ee74388b1 Merge "Disallow using stlport." 2015-05-06 19:53:43 +00:00
Dan Albert
3a360a7353 Disallow using stlport.
The only remaining users of stlport are vendor blobs. Prevent any new
users from using it.

Bug: http://b/15193147
Change-Id: I577a16c8c52e2c7d939c3b5026e18ad90e4b9f26
2015-05-06 10:10:30 -07:00
Dan Albert
0ad5bd22c8 Cleanup libc++ configuration.
Change-Id: I2162f2a19c7f13cfbd4a2530a783a4e671d7cdb1
2015-05-06 10:09:50 -07:00
Dan Albert
88a8ce6946 Select the correct target STL with USE_MINGW.
The previous check tested against USE_MINGW even for target builds.
Hadn't been a problem because people don't typically set USE_MINGW
directly.

Change-Id: I90fe0ea890c44917eb29dd02d7c7f76c19e7fbd6
2015-05-04 16:34:19 -07:00
Dan Albert
3e99e66213 Don't use libunwindbacktrace for non-ARM.
After fixing the link order here, it seems libunwindbacktrace no
longer works for exception unwinding, but libgcc now does.

Change-Id: Ice79af4b8f234ed6a053ee818b6dec3aa9706c8a
2015-04-14 14:42:45 -07:00
Dan Albert
5036729c41 Add unwinder linking to STL setup.
Previously we were bundling this into libc++ and having each binary
resolve its symbols from there. This means that the unwinder that gets
used for a given binary is sensitive to the order in which its
libraries are linked. Making this a static library dependency of each
binary means the right unwinder will always be used.

Bug: 18471342
Bug: 19958712
Change-Id: I782d212784dbf85355b5d9146d7460d675259a0e
2015-03-31 18:29:23 -07:00
Dan Albert
7955bf0fd6 Static binaries with libc++ need libs c, m and dl.
Can't be done on the user's end because these libraries all need to be
linked after libc++_static.

Change-Id: Ib21364e6f43689cf59da31d6f561919731ef8272
2015-03-19 13:05:13 -07:00
Dan Albert
d666bb1009 Fix the mac build.
Bug: 19567451
Change-Id: I6d15259520c9813df1a44d9244c99482f713d114
2015-03-03 21:47:04 -08:00
Dan Albert
b5eb905729 Catch more cases of static host executables.
Bug: 19567451
Change-Id: Ie1de436db74b727421449b43b192e9599ca8fca6
2015-03-03 18:30:27 -08:00
Dan Albert
4f2afde252 (Hopefully) fix the Mac build.
The Mac linker doesn't understand --start-group, which is needed for
properly linking libgcc/libc statically. It isn't needed for dynamic
executables though, so use that driver behavior where appropriate.

Bug: 19567451
Change-Id: Ifeb03bea55bc87561c64ddafdb99f664fef0f00e
2015-03-03 17:42:28 -08:00
Dan Albert
8bf4cc97c2 Fix building static host executables.
BUILD_HOST_static=1 forces all host binaries to be statically linked.
Since -nodefaultlibs was passed (to disable libstdc++), libgcc wasn't
being passed. This change emulates the driver's behavior.

Also fix default STL selection for BUILD_HOST_static.

Bug: 19567451
Change-Id: I617aab782d40ac76ca5a7d9dddf0f202a4e3a69b
2015-03-03 15:08:11 -08:00
Dan Albert
93766b28ce Make libc++ the default STL.
Previously, code defaulted to using libstdc++ (which was GNU libstdc++
on the host, or Bionic's "libstdc++" on the target). Now we default to
libc++. The exception for this is when using mingw, because we cannot
build libc++ for mingw.

Change-Id: I68726fa26cdcb6263f17c838d3e859debd57fae1
2014-11-07 13:24:56 -08:00
Dan Albert
5cab04ffd2 Missed a dependency on pthreads.
Change-Id: I060c9c65b07efe89a308fccf71a1096424a7de39
2014-11-06 17:32:25 -08:00
Dan Albert
93e8cf71fc Use libstc++ for the name of bionic's STL.
It is libstdc++.so, after all, and the naming makes sense for the host
this way (since it also uses libstdc++).

Change-Id: If37ffa015f7967a928ea47a290363d7696c4ce35
2014-10-16 21:18:15 -07:00
Dan Albert
b49987e2f8 Never use stlport on the host.
LOCAL_CXX_STL := stlport should just use the default STL on the host.

Change-Id: Iede1b2d8884e237a10e000e5835addb768c8f78d
2014-10-16 09:53:51 -07:00
Ying Wang
75e8fcbb6c Apply LOCAL_CXX_STL to also prebuilts.
Because LOCAL_CXX_STL modifies a module's required shared libaries,
we need this for also prebuilt shared libraries and executables.

Change-Id: I418c26143999a613c40aadf990f131b123e0ac3d
2014-10-07 13:07:00 -07:00