From d2b8741e1bc49788aad3352c41f822066957a204 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 4 Mar 2015 16:20:44 -0800 Subject: [PATCH] Initial bionic Blueprints files Change-Id: Iafe8e84e0dc62e7d7c830e2c272ec92abdf6a801 --- libc/Blueprints | 1628 ++++++++++++++++++++++++++++++++++++++++++++++ libdl/Blueprints | 46 ++ libm/Blueprints | 345 ++++++++++ 3 files changed, 2019 insertions(+) create mode 100644 libc/Blueprints create mode 100644 libdl/Blueprints create mode 100644 libm/Blueprints diff --git a/libc/Blueprints b/libc/Blueprints new file mode 100644 index 000000000..9f6da2b8b --- /dev/null +++ b/libc/Blueprints @@ -0,0 +1,1628 @@ +// TODO: remove these +PLATFORM_SDK_VERSION = "22" +USE_CLANG_PLATFORM_BUILD = false + +bionic_coverage = false + +// Define the common source files for all the libc instances +// ========================================================= +libc_common_src_files = [ + "bionic/bindresvport.c", + "bionic/ether_aton.c", + "bionic/ether_ntoa.c", + "bionic/fts.c", + "bionic/getpriority.c", + "bionic/if_indextoname.c", + "bionic/if_nametoindex.c", + "bionic/initgroups.c", + "bionic/ioctl.c", + "bionic/isatty.c", + "bionic/memmem.c", + "bionic/pututline.c", + "bionic/sched_cpualloc.c", + "bionic/sched_cpucount.c", + "bionic/sigblock.c", + "bionic/siginterrupt.c", + "bionic/sigsetmask.c", + "bionic/system_properties_compat.c", + "stdio/findfp.c", + "stdio/fread.c", + "stdio/snprintf.c", + "stdio/sprintf.c", + "stdio/stdio.c", + "stdio/stdio_ext.cpp", +] + +// Fortify implementations of libc functions. +libc_common_src_files += [ + "bionic/__FD_chk.cpp", + "bionic/__fgets_chk.cpp", + "bionic/__memmove_chk.cpp", + "bionic/__poll_chk.cpp", + "bionic/__read_chk.cpp", + "bionic/__recvfrom_chk.cpp", + "bionic/__stpcpy_chk.cpp", + "bionic/__stpncpy_chk.cpp", + "bionic/__strchr_chk.cpp", + "bionic/__strlcat_chk.cpp", + "bionic/__strlcpy_chk.cpp", + "bionic/__strlen_chk.cpp", + "bionic/__strncat_chk.cpp", + "bionic/__strncpy_chk.cpp", + "bionic/__strrchr_chk.cpp", + "bionic/__umask_chk.cpp", + "bionic/__vsnprintf_chk.cpp", + "bionic/__vsprintf_chk.cpp", +] + +libc_bionic_src_files = [ + "bionic/abort.cpp", + "bionic/accept.cpp", + "bionic/accept4.cpp", + "bionic/access.cpp", + "bionic/assert.cpp", + "bionic/atof.cpp", + "bionic/bionic_systrace.cpp", + "bionic/bionic_time_conversions.cpp", + "bionic/brk.cpp", + "bionic/c16rtomb.cpp", + "bionic/c32rtomb.cpp", + "bionic/chmod.cpp", + "bionic/chown.cpp", + "bionic/clearenv.cpp", + "bionic/clock.cpp", + "bionic/clock_getcpuclockid.cpp", + "bionic/clock_nanosleep.cpp", + "bionic/clone.cpp", + "bionic/__cmsg_nxthdr.cpp", + "bionic/connect.cpp", + "bionic/ctype.cpp", + "bionic/dirent.cpp", + "bionic/dup2.cpp", + "bionic/epoll_create.cpp", + "bionic/epoll_pwait.cpp", + "bionic/epoll_wait.cpp", + "bionic/__errno.cpp", + "bionic/error.cpp", + "bionic/eventfd_read.cpp", + "bionic/eventfd_write.cpp", + "bionic/fchmod.cpp", + "bionic/fchmodat.cpp", + "bionic/ffs.cpp", + "bionic/flockfile.cpp", + "bionic/fork.cpp", + "bionic/fpclassify.cpp", + "bionic/futimens.cpp", + "bionic/getauxval.cpp", + "bionic/getcwd.cpp", + "bionic/getentropy_linux.c", + "bionic/gethostname.cpp", + "bionic/getpgrp.cpp", + "bionic/getpid.cpp", + "bionic/gettid.cpp", + "bionic/__gnu_basename.cpp", + "bionic/inotify_init.cpp", + "bionic/lchown.cpp", + "bionic/lfs64_support.cpp", + "bionic/__libc_current_sigrtmax.cpp", + "bionic/__libc_current_sigrtmin.cpp", + "bionic/libc_init_common.cpp", + "bionic/libc_logging.cpp", + "bionic/libgen.cpp", + "bionic/link.cpp", + "bionic/locale.cpp", + "bionic/lstat.cpp", + "bionic/malloc_info.cpp", + "bionic/mbrtoc16.cpp", + "bionic/mbrtoc32.cpp", + "bionic/mbstate.cpp", + "bionic/mkdir.cpp", + "bionic/mkfifo.cpp", + "bionic/mknod.cpp", + "bionic/mntent.cpp", + "bionic/NetdClientDispatch.cpp", + "bionic/open.cpp", + "bionic/pathconf.cpp", + "bionic/pause.cpp", + "bionic/pipe.cpp", + "bionic/poll.cpp", + "bionic/posix_fadvise.cpp", + "bionic/posix_fallocate.cpp", + "bionic/posix_madvise.cpp", + "bionic/posix_timers.cpp", + "bionic/pthread_atfork.cpp", + "bionic/pthread_attr.cpp", + "bionic/pthread_cond.cpp", + "bionic/pthread_create.cpp", + "bionic/pthread_detach.cpp", + "bionic/pthread_equal.cpp", + "bionic/pthread_exit.cpp", + "bionic/pthread_getcpuclockid.cpp", + "bionic/pthread_getschedparam.cpp", + "bionic/pthread_gettid_np.cpp", + "bionic/pthread_internals.cpp", + "bionic/pthread_join.cpp", + "bionic/pthread_key.cpp", + "bionic/pthread_kill.cpp", + "bionic/pthread_mutex.cpp", + "bionic/pthread_once.cpp", + "bionic/pthread_rwlock.cpp", + "bionic/pthread_self.cpp", + "bionic/pthread_setname_np.cpp", + "bionic/pthread_setschedparam.cpp", + "bionic/pthread_sigmask.cpp", + "bionic/ptrace.cpp", + "bionic/pty.cpp", + "bionic/raise.cpp", + "bionic/rand.cpp", + "bionic/readlink.cpp", + "bionic/reboot.cpp", + "bionic/recv.cpp", + "bionic/rename.cpp", + "bionic/rmdir.cpp", + "bionic/scandir.cpp", + "bionic/sched_getaffinity.cpp", + "bionic/sched_getcpu.cpp", + "bionic/semaphore.cpp", + "bionic/send.cpp", + "bionic/setegid.cpp", + "bionic/__set_errno.cpp", + "bionic/seteuid.cpp", + "bionic/setpgrp.cpp", + "bionic/sigaction.cpp", + "bionic/sigaddset.cpp", + "bionic/sigdelset.cpp", + "bionic/sigemptyset.cpp", + "bionic/sigfillset.cpp", + "bionic/sigismember.cpp", + "bionic/signal.cpp", + "bionic/signalfd.cpp", + "bionic/sigpending.cpp", + "bionic/sigprocmask.cpp", + "bionic/sigqueue.cpp", + "bionic/sigsuspend.cpp", + "bionic/sigtimedwait.cpp", + "bionic/sigwait.cpp", + "bionic/sigwaitinfo.cpp", + "bionic/socket.cpp", + "bionic/stat.cpp", + "bionic/statvfs.cpp", + "bionic/strerror.cpp", + "bionic/strerror_r.cpp", + "bionic/strsignal.cpp", + "bionic/strtold.cpp", + "bionic/stubs.cpp", + "bionic/symlink.cpp", + "bionic/sysconf.cpp", + "bionic/sysinfo.cpp", + "bionic/syslog.cpp", + "bionic/sys_siglist.c", + "bionic/sys_signame.c", + "bionic/system_properties.cpp", + "bionic/tdestroy.cpp", + "bionic/termios.cpp", + "bionic/thread_private.cpp", + "bionic/tmpfile.cpp", + "bionic/umount.cpp", + "bionic/unlink.cpp", + "bionic/utimes.cpp", + "bionic/vdso.cpp", + "bionic/wait.cpp", + "bionic/wchar.cpp", + "bionic/wctype.cpp", + + // May be overriden by per-arch optimized versions + "bionic/__memcpy_chk.cpp", + "bionic/__memset_chk.cpp", + "bionic/__strcat_chk.cpp", + "bionic/__strcpy_chk.cpp", + "bionic/memchr.c", + "bionic/memrchr.c", + "bionic/strchr.cpp", + "bionic/strnlen.c", + "bionic/strrchr.cpp", +] + +libc_cxa_src_files = [ + "bionic/__cxa_guard.cpp", + "bionic/__cxa_pure_virtual.cpp", + "bionic/new.cpp", +] + +libc_upstream_freebsd_src_files = [ + "upstream-freebsd/lib/libc/gen/ldexp.c", + "upstream-freebsd/lib/libc/gen/sleep.c", + "upstream-freebsd/lib/libc/gen/usleep.c", + "upstream-freebsd/lib/libc/stdlib/abs.c", + "upstream-freebsd/lib/libc/stdlib/getopt_long.c", + "upstream-freebsd/lib/libc/stdlib/imaxabs.c", + "upstream-freebsd/lib/libc/stdlib/imaxdiv.c", + "upstream-freebsd/lib/libc/stdlib/labs.c", + "upstream-freebsd/lib/libc/stdlib/llabs.c", + "upstream-freebsd/lib/libc/stdlib/qsort.c", + "upstream-freebsd/lib/libc/stdlib/quick_exit.c", + "upstream-freebsd/lib/libc/stdlib/realpath.c", + "upstream-freebsd/lib/libc/string/wcpcpy.c", + "upstream-freebsd/lib/libc/string/wcpncpy.c", + "upstream-freebsd/lib/libc/string/wcscasecmp.c", + "upstream-freebsd/lib/libc/string/wcscspn.c", + "upstream-freebsd/lib/libc/string/wcsdup.c", + "upstream-freebsd/lib/libc/string/wcslcat.c", + "upstream-freebsd/lib/libc/string/wcsncasecmp.c", + "upstream-freebsd/lib/libc/string/wcsncat.c", + "upstream-freebsd/lib/libc/string/wcsncmp.c", + "upstream-freebsd/lib/libc/string/wcsncpy.c", + "upstream-freebsd/lib/libc/string/wcsnlen.c", + "upstream-freebsd/lib/libc/string/wcspbrk.c", + "upstream-freebsd/lib/libc/string/wcsspn.c", + "upstream-freebsd/lib/libc/string/wcstok.c", + "upstream-freebsd/lib/libc/string/wmemchr.c", + "upstream-freebsd/lib/libc/string/wmemset.c", + + // May be overriden by per-arch optimized versions + "upstream-freebsd/lib/libc/string/wcscat.c", + "upstream-freebsd/lib/libc/string/wcschr.c", + "upstream-freebsd/lib/libc/string/wcscmp.c", + "upstream-freebsd/lib/libc/string/wcscpy.c", + "upstream-freebsd/lib/libc/string/wcslen.c", + "upstream-freebsd/lib/libc/string/wcsrchr.c", + "upstream-freebsd/lib/libc/string/wmemcmp.c", + "upstream-freebsd/lib/libc/string/wmemmove.c", +] + +libc_upstream_netbsd_src_files = [ + "upstream-netbsd/common/lib/libc/stdlib/random.c", + "upstream-netbsd/lib/libc/gen/ftw.c", + "upstream-netbsd/lib/libc/gen/nftw.c", + "upstream-netbsd/lib/libc/gen/nice.c", + "upstream-netbsd/lib/libc/gen/popen.c", + "upstream-netbsd/lib/libc/gen/psignal.c", + "upstream-netbsd/lib/libc/gen/utime.c", + "upstream-netbsd/lib/libc/gen/utmp.c", + "upstream-netbsd/lib/libc/inet/nsap_addr.c", + "upstream-netbsd/lib/libc/regex/regcomp.c", + "upstream-netbsd/lib/libc/regex/regerror.c", + "upstream-netbsd/lib/libc/regex/regexec.c", + "upstream-netbsd/lib/libc/regex/regfree.c", + "upstream-netbsd/lib/libc/stdlib/bsearch.c", + "upstream-netbsd/lib/libc/stdlib/div.c", + "upstream-netbsd/lib/libc/stdlib/drand48.c", + "upstream-netbsd/lib/libc/stdlib/erand48.c", + "upstream-netbsd/lib/libc/stdlib/jrand48.c", + "upstream-netbsd/lib/libc/stdlib/lcong48.c", + "upstream-netbsd/lib/libc/stdlib/ldiv.c", + "upstream-netbsd/lib/libc/stdlib/lldiv.c", + "upstream-netbsd/lib/libc/stdlib/lrand48.c", + "upstream-netbsd/lib/libc/stdlib/mrand48.c", + "upstream-netbsd/lib/libc/stdlib/nrand48.c", + "upstream-netbsd/lib/libc/stdlib/_rand48.c", + "upstream-netbsd/lib/libc/stdlib/rand_r.c", + "upstream-netbsd/lib/libc/stdlib/seed48.c", + "upstream-netbsd/lib/libc/stdlib/srand48.c", + "upstream-netbsd/lib/libc/string/memccpy.c", + "upstream-netbsd/lib/libc/string/strcasestr.c", + "upstream-netbsd/lib/libc/string/strcoll.c", + "upstream-netbsd/lib/libc/string/strxfrm.c", +] + +libc_upstream_openbsd_gdtoa_src_files = [ + "upstream-openbsd/android/gdtoa_support.cpp", + "upstream-openbsd/lib/libc/gdtoa/dmisc.c", + "upstream-openbsd/lib/libc/gdtoa/dtoa.c", + "upstream-openbsd/lib/libc/gdtoa/gdtoa.c", + "upstream-openbsd/lib/libc/gdtoa/gethex.c", + "upstream-openbsd/lib/libc/gdtoa/gmisc.c", + "upstream-openbsd/lib/libc/gdtoa/hd_init.c", + "upstream-openbsd/lib/libc/gdtoa/hdtoa.c", + "upstream-openbsd/lib/libc/gdtoa/hexnan.c", + "upstream-openbsd/lib/libc/gdtoa/ldtoa.c", + "upstream-openbsd/lib/libc/gdtoa/misc.c", + "upstream-openbsd/lib/libc/gdtoa/smisc.c", + "upstream-openbsd/lib/libc/gdtoa/strtod.c", + "upstream-openbsd/lib/libc/gdtoa/strtodg.c", + "upstream-openbsd/lib/libc/gdtoa/strtof.c", + "upstream-openbsd/lib/libc/gdtoa/strtord.c", + "upstream-openbsd/lib/libc/gdtoa/sum.c", + "upstream-openbsd/lib/libc/gdtoa/ulp.c", +] + +libc_upstream_openbsd_gdtoa_src_files_32 = libc_upstream_openbsd_gdtoa_src_files + +libc_upstream_openbsd_gdtoa_src_files_64 = libc_upstream_openbsd_gdtoa_src_files + ["upstream-openbsd/lib/libc/gdtoa/strtorQ.c"] + +libc_upstream_openbsd_src_files = [ + "upstream-openbsd/lib/libc/compat-43/killpg.c", + "upstream-openbsd/lib/libc/crypt/arc4random.c", + "upstream-openbsd/lib/libc/crypt/arc4random_uniform.c", + "upstream-openbsd/lib/libc/gen/alarm.c", + "upstream-openbsd/lib/libc/gen/ctype_.c", + "upstream-openbsd/lib/libc/gen/daemon.c", + "upstream-openbsd/lib/libc/gen/err.c", + "upstream-openbsd/lib/libc/gen/errx.c", + "upstream-openbsd/lib/libc/gen/exec.c", + "upstream-openbsd/lib/libc/gen/fnmatch.c", + "upstream-openbsd/lib/libc/gen/ftok.c", + "upstream-openbsd/lib/libc/gen/getprogname.c", + "upstream-openbsd/lib/libc/gen/isctype.c", + "upstream-openbsd/lib/libc/gen/setprogname.c", + "upstream-openbsd/lib/libc/gen/time.c", + "upstream-openbsd/lib/libc/gen/tolower_.c", + "upstream-openbsd/lib/libc/gen/toupper_.c", + "upstream-openbsd/lib/libc/gen/verr.c", + "upstream-openbsd/lib/libc/gen/verrx.c", + "upstream-openbsd/lib/libc/gen/vwarn.c", + "upstream-openbsd/lib/libc/gen/vwarnx.c", + "upstream-openbsd/lib/libc/gen/warn.c", + "upstream-openbsd/lib/libc/gen/warnx.c", + "upstream-openbsd/lib/libc/locale/btowc.c", + "upstream-openbsd/lib/libc/locale/mbrlen.c", + "upstream-openbsd/lib/libc/locale/mbstowcs.c", + "upstream-openbsd/lib/libc/locale/mbtowc.c", + "upstream-openbsd/lib/libc/locale/wcscoll.c", + "upstream-openbsd/lib/libc/locale/wcstod.c", + "upstream-openbsd/lib/libc/locale/wcstof.c", + "upstream-openbsd/lib/libc/locale/wcstoimax.c", + "upstream-openbsd/lib/libc/locale/wcstol.c", + "upstream-openbsd/lib/libc/locale/wcstold.c", + "upstream-openbsd/lib/libc/locale/wcstoll.c", + "upstream-openbsd/lib/libc/locale/wcstombs.c", + "upstream-openbsd/lib/libc/locale/wcstoul.c", + "upstream-openbsd/lib/libc/locale/wcstoull.c", + "upstream-openbsd/lib/libc/locale/wcstoumax.c", + "upstream-openbsd/lib/libc/locale/wcsxfrm.c", + "upstream-openbsd/lib/libc/locale/wctob.c", + "upstream-openbsd/lib/libc/locale/wctomb.c", + "upstream-openbsd/lib/libc/net/htonl.c", + "upstream-openbsd/lib/libc/net/htons.c", + "upstream-openbsd/lib/libc/net/inet_addr.c", + "upstream-openbsd/lib/libc/net/inet_lnaof.c", + "upstream-openbsd/lib/libc/net/inet_makeaddr.c", + "upstream-openbsd/lib/libc/net/inet_netof.c", + "upstream-openbsd/lib/libc/net/inet_network.c", + "upstream-openbsd/lib/libc/net/inet_ntoa.c", + "upstream-openbsd/lib/libc/net/inet_ntop.c", + "upstream-openbsd/lib/libc/net/inet_pton.c", + "upstream-openbsd/lib/libc/net/ntohl.c", + "upstream-openbsd/lib/libc/net/ntohs.c", + "upstream-openbsd/lib/libc/stdio/asprintf.c", + "upstream-openbsd/lib/libc/stdio/clrerr.c", + "upstream-openbsd/lib/libc/stdio/dprintf.c", + "upstream-openbsd/lib/libc/stdio/fclose.c", + "upstream-openbsd/lib/libc/stdio/fdopen.c", + "upstream-openbsd/lib/libc/stdio/feof.c", + "upstream-openbsd/lib/libc/stdio/ferror.c", + "upstream-openbsd/lib/libc/stdio/fflush.c", + "upstream-openbsd/lib/libc/stdio/fgetc.c", + "upstream-openbsd/lib/libc/stdio/fgetln.c", + "upstream-openbsd/lib/libc/stdio/fgetpos.c", + "upstream-openbsd/lib/libc/stdio/fgets.c", + "upstream-openbsd/lib/libc/stdio/fgetwc.c", + "upstream-openbsd/lib/libc/stdio/fgetws.c", + "upstream-openbsd/lib/libc/stdio/fileno.c", + "upstream-openbsd/lib/libc/stdio/flags.c", + "upstream-openbsd/lib/libc/stdio/fmemopen.c", + "upstream-openbsd/lib/libc/stdio/fopen.c", + "upstream-openbsd/lib/libc/stdio/fprintf.c", + "upstream-openbsd/lib/libc/stdio/fpurge.c", + "upstream-openbsd/lib/libc/stdio/fputc.c", + "upstream-openbsd/lib/libc/stdio/fputs.c", + "upstream-openbsd/lib/libc/stdio/fputwc.c", + "upstream-openbsd/lib/libc/stdio/fputws.c", + "upstream-openbsd/lib/libc/stdio/freopen.c", + "upstream-openbsd/lib/libc/stdio/fscanf.c", + "upstream-openbsd/lib/libc/stdio/fseek.c", + "upstream-openbsd/lib/libc/stdio/fsetpos.c", + "upstream-openbsd/lib/libc/stdio/ftell.c", + "upstream-openbsd/lib/libc/stdio/funopen.c", + "upstream-openbsd/lib/libc/stdio/fvwrite.c", + "upstream-openbsd/lib/libc/stdio/fwalk.c", + "upstream-openbsd/lib/libc/stdio/fwide.c", + "upstream-openbsd/lib/libc/stdio/fwprintf.c", + "upstream-openbsd/lib/libc/stdio/fwrite.c", + "upstream-openbsd/lib/libc/stdio/fwscanf.c", + "upstream-openbsd/lib/libc/stdio/getc.c", + "upstream-openbsd/lib/libc/stdio/getchar.c", + "upstream-openbsd/lib/libc/stdio/getdelim.c", + "upstream-openbsd/lib/libc/stdio/getline.c", + "upstream-openbsd/lib/libc/stdio/gets.c", + "upstream-openbsd/lib/libc/stdio/getwc.c", + "upstream-openbsd/lib/libc/stdio/getwchar.c", + "upstream-openbsd/lib/libc/stdio/makebuf.c", + "upstream-openbsd/lib/libc/stdio/mktemp.c", + "upstream-openbsd/lib/libc/stdio/open_memstream.c", + "upstream-openbsd/lib/libc/stdio/open_wmemstream.c", + "upstream-openbsd/lib/libc/stdio/perror.c", + "upstream-openbsd/lib/libc/stdio/printf.c", + "upstream-openbsd/lib/libc/stdio/putc.c", + "upstream-openbsd/lib/libc/stdio/putchar.c", + "upstream-openbsd/lib/libc/stdio/puts.c", + "upstream-openbsd/lib/libc/stdio/putwc.c", + "upstream-openbsd/lib/libc/stdio/putwchar.c", + "upstream-openbsd/lib/libc/stdio/refill.c", + "upstream-openbsd/lib/libc/stdio/remove.c", + "upstream-openbsd/lib/libc/stdio/rewind.c", + "upstream-openbsd/lib/libc/stdio/rget.c", + "upstream-openbsd/lib/libc/stdio/scanf.c", + "upstream-openbsd/lib/libc/stdio/setbuf.c", + "upstream-openbsd/lib/libc/stdio/setbuffer.c", + "upstream-openbsd/lib/libc/stdio/setvbuf.c", + "upstream-openbsd/lib/libc/stdio/sscanf.c", + "upstream-openbsd/lib/libc/stdio/swprintf.c", + "upstream-openbsd/lib/libc/stdio/swscanf.c", + "upstream-openbsd/lib/libc/stdio/tempnam.c", + "upstream-openbsd/lib/libc/stdio/tmpnam.c", + "upstream-openbsd/lib/libc/stdio/ungetc.c", + "upstream-openbsd/lib/libc/stdio/ungetwc.c", + "upstream-openbsd/lib/libc/stdio/vasprintf.c", + "upstream-openbsd/lib/libc/stdio/vdprintf.c", + "upstream-openbsd/lib/libc/stdio/vfprintf.c", + "upstream-openbsd/lib/libc/stdio/vfscanf.c", + "upstream-openbsd/lib/libc/stdio/vfwprintf.c", + "upstream-openbsd/lib/libc/stdio/vfwscanf.c", + "upstream-openbsd/lib/libc/stdio/vprintf.c", + "upstream-openbsd/lib/libc/stdio/vscanf.c", + "upstream-openbsd/lib/libc/stdio/vsnprintf.c", + "upstream-openbsd/lib/libc/stdio/vsprintf.c", + "upstream-openbsd/lib/libc/stdio/vsscanf.c", + "upstream-openbsd/lib/libc/stdio/vswprintf.c", + "upstream-openbsd/lib/libc/stdio/vswscanf.c", + "upstream-openbsd/lib/libc/stdio/vwprintf.c", + "upstream-openbsd/lib/libc/stdio/vwscanf.c", + "upstream-openbsd/lib/libc/stdio/wbuf.c", + "upstream-openbsd/lib/libc/stdio/wprintf.c", + "upstream-openbsd/lib/libc/stdio/wscanf.c", + "upstream-openbsd/lib/libc/stdio/wsetup.c", + "upstream-openbsd/lib/libc/stdlib/atexit.c", + "upstream-openbsd/lib/libc/stdlib/atoi.c", + "upstream-openbsd/lib/libc/stdlib/atol.c", + "upstream-openbsd/lib/libc/stdlib/atoll.c", + "upstream-openbsd/lib/libc/stdlib/exit.c", + "upstream-openbsd/lib/libc/stdlib/getenv.c", + "upstream-openbsd/lib/libc/stdlib/insque.c", + "upstream-openbsd/lib/libc/stdlib/lsearch.c", + "upstream-openbsd/lib/libc/stdlib/reallocarray.c", + "upstream-openbsd/lib/libc/stdlib/remque.c", + "upstream-openbsd/lib/libc/stdlib/setenv.c", + "upstream-openbsd/lib/libc/stdlib/strtoimax.c", + "upstream-openbsd/lib/libc/stdlib/strtol.c", + "upstream-openbsd/lib/libc/stdlib/strtoll.c", + "upstream-openbsd/lib/libc/stdlib/strtoul.c", + "upstream-openbsd/lib/libc/stdlib/strtoull.c", + "upstream-openbsd/lib/libc/stdlib/strtoumax.c", + "upstream-openbsd/lib/libc/stdlib/system.c", + "upstream-openbsd/lib/libc/stdlib/tfind.c", + "upstream-openbsd/lib/libc/stdlib/tsearch.c", + "upstream-openbsd/lib/libc/string/strcasecmp.c", + "upstream-openbsd/lib/libc/string/strcspn.c", + "upstream-openbsd/lib/libc/string/strdup.c", + "upstream-openbsd/lib/libc/string/strndup.c", + "upstream-openbsd/lib/libc/string/strpbrk.c", + "upstream-openbsd/lib/libc/string/strsep.c", + "upstream-openbsd/lib/libc/string/strspn.c", + "upstream-openbsd/lib/libc/string/strstr.c", + "upstream-openbsd/lib/libc/string/strtok.c", + "upstream-openbsd/lib/libc/string/wmemcpy.c", + "upstream-openbsd/lib/libc/string/wcslcpy.c", + "upstream-openbsd/lib/libc/string/wcsstr.c", + "upstream-openbsd/lib/libc/string/wcswidth.c", + + // May be overriden by per-arch optimized versions + "upstream-openbsd/lib/libc/string/memmove.c", + "upstream-openbsd/lib/libc/string/stpcpy.c", + "upstream-openbsd/lib/libc/string/stpncpy.c", + "upstream-openbsd/lib/libc/string/strcat.c", + "upstream-openbsd/lib/libc/string/strcmp.c", + "upstream-openbsd/lib/libc/string/strcpy.c", + "upstream-openbsd/lib/libc/string/strlcat.c", + "upstream-openbsd/lib/libc/string/strlcpy.c", + "upstream-openbsd/lib/libc/string/strncat.c", + "upstream-openbsd/lib/libc/string/strncmp.c", + "upstream-openbsd/lib/libc/string/strncpy.c", +] + +// Various kinds of LP32 cruft. +// ======================================================== +libc_bionic_src_files_32 = ["bionic/mmap.cpp"] + +libc_common_src_files_32 = [ + "bionic/legacy_32_bit_support.cpp", + "bionic/ndk_cruft.cpp", + "bionic/time64.c", +] + +libc_netbsd_src_files_32 = ["upstream-netbsd/common/lib/libc/hash/sha1/sha1.c"] + +libc_openbsd_src_files_32 = ["upstream-openbsd/lib/libc/stdio/putw.c"] + +// Define some common cflags +// ======================================================== +libc_common_cflags = [ + "-D_LIBC=1", + "-Wall", + "-Wextra", + "-Wunused", +] + +// ANDROIDMK TRANSLATION ERROR: unsupported directive +// ifneq ($(TARGET_USES_LOGD),false) +libc_common_cflags += ["-DTARGET_USES_LOGD"] +// ANDROIDMK TRANSLATION ERROR: unsupported directive +// endif +use_clang = USE_CLANG_PLATFORM_BUILD +// ANDROIDMK TRANSLATION ERROR: unsupported directive +// ifeq ($(use_clang),) +//use_clang = ["false"] +// ANDROIDMK TRANSLATION ERROR: unsupported directive +// endif +// Try to catch typical 32-bit assumptions that break with 64-bit pointers. +libc_common_cflags += [ + "-Werror=pointer-to-int-cast", + "-Werror=int-to-pointer-cast", + "-Werror=type-limits", + "-Werror", +] + +// ANDROIDMK TRANSLATION ERROR: unsupported directive +// ifeq ($(strip $(DEBUG_BIONIC_LIBC)),true) +//libc_common_cflags += ["-DDEBUG"] +// ANDROIDMK TRANSLATION ERROR: unsupported directive +// endif +// ANDROIDMK TRANSLATION ERROR: unsupported directive +// ifeq ($(MALLOC_IMPL),dlmalloc) +//libc_common_cflags += ["-DUSE_DLMALLOC"] +//libc_malloc_src = ["bionic/dlmalloc.c"] +// ANDROIDMK TRANSLATION ERROR: unsupported directive +// else +libc_common_cflags += ["-DUSE_JEMALLOC"] +libc_malloc_src = ["bionic/jemalloc_wrapper.cpp"] +libc_common_c_includes = ["external/jemalloc/include"] +// ANDROIDMK TRANSLATION ERROR: unsupported directive +// endif +// To customize dlmalloc's alignment, set BOARD_MALLOC_ALIGNMENT in +// the appropriate BoardConfig.mk file. +// +// ANDROIDMK TRANSLATION ERROR: unsupported directive +// ifneq ($(BOARD_MALLOC_ALIGNMENT),) +//libc_common_cflags += ["-DMALLOC_ALIGNMENT=" + BOARD_MALLOC_ALIGNMENT] +// ANDROIDMK TRANSLATION ERROR: unsupported directive +// endif +// Define some common conlyflags +libc_common_conlyflags = ["-std=gnu99"] + +// Define some common cppflags +libc_common_cppflags = ["-std=gnu++11"] + +// Define some common includes +// ======================================================== +libc_common_c_includes += ["bionic/libc/stdio"] + +// ======================================================== +// Add in the arch-specific flags. +// Must be called with $(eval). +// $(1): the LOCAL_ variable name +// $(2): the bionic variable name to pull in +// ANDROIDMK TRANSLATION ERROR: unsupported directive +// define patch-up-arch-specific-flags +//$(1)_$(TARGET_ARCH) += $($(2)_$(TARGET_ARCH)) +//$(1)_32 += $($(2)_32) +//ifdef TARGET_2ND_ARCH +//$(1)_$(TARGET_2ND_ARCH) += $($(2)_$(TARGET_2ND_ARCH)) +//endif +// ======================================================== +// libc_stack_protector.a - stack protector code +// ======================================================== +// +// The stack protector code needs to be compiled +// with -fno-stack-protector, since it modifies the +// stack canary. + +cc_library_static { + + srcs: ["bionic/__stack_chk_fail.cpp"], + cflags: libc_common_cflags + ["-fno-stack-protector"], + conlyflags: libc_common_conlyflags, + cppflags: libc_common_cppflags, + include_dirs: libc_common_c_includes, + name: "libc_stack_protector", + clang: use_clang, + + stl: "none", + system_shared_libs: [], + asan: false, + native_coverage: bionic_coverage, + +} + +// ======================================================== +// libc_tzcode.a - upstream 'tzcode' code +// ======================================================== + +cc_library_static { + + srcs: [ + "tzcode/asctime.c", + "tzcode/difftime.c", + "tzcode/localtime.c", + "tzcode/strftime.c", + "tzcode/strptime.c", + "upstream-openbsd/lib/libc/time/wcsftime.c" // tzcode doesn't include wcsftime, so we use the OpenBSD one. + ], + + cflags: libc_common_cflags + [ + "-fvisibility=hidden", + // Don't use ridiculous amounts of stack. + "-DALL_STATE", + // Include tzsetwall, timelocal, timegm, time2posix, and posix2time. + "-DSTD_INSPIRED", + // The name of the tm_gmtoff field in our struct tm. + "-DTM_GMTOFF=tm_gmtoff", + // Where we store our tzdata. + "-DTZDIR=\\\"/system/usr/share/zoneinfo\\\"", + // Include timezone and daylight globals. + "-DUSG_COMPAT=1", + "-DNO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU", + "-Dlint", + ], + + conlyflags: libc_common_conlyflags, + cppflags: libc_common_cppflags, + include_dirs: libc_common_c_includes, + local_include_dirs: ["tzcode/"], + name: "libc_tzcode", + clang: use_clang, + + stl: "none", + system_shared_libs: [], + asan: false, + native_coverage: bionic_coverage, + +} + +// ======================================================== +// libc_dns.a - modified NetBSD DNS code +// ======================================================== + +cc_library_static { + + srcs: [ + "dns/net/gethnamaddr.c", + "dns/net/getservbyname.c", + "dns/net/getservbyport.c", + "dns/net/getaddrinfo.c", + "dns/net/getnameinfo.c", + "dns/net/sethostent.c", + "dns/net/getservent.c", + "dns/net/nsdispatch.c", + "dns/net/base64.c", + "dns/resolv/res_state.c", + "dns/resolv/res_init.c", + "dns/resolv/res_mkquery.c", + "dns/resolv/res_data.c", + "dns/resolv/res_debug.c", + "dns/resolv/herror.c", + "dns/resolv/res_cache.c", + "dns/resolv/res_query.c", + "dns/resolv/res_comp.c", + "dns/resolv/res_send.c", + "dns/nameser/ns_name.c", + "dns/nameser/ns_print.c", + "dns/nameser/ns_parse.c", + "dns/nameser/ns_ttl.c", + "dns/nameser/ns_netint.c", + "dns/nameser/ns_samedomain.c", + + "upstream-netbsd/lib/libc/isc/ev_streams.c", + "upstream-netbsd/lib/libc/isc/ev_timers.c", + "upstream-netbsd/lib/libc/resolv/mtctxres.c", + // We use the OpenBSD res_random. + "upstream-openbsd/lib/libc/net/res_random.c", + ], + + cflags: ["-Dres_randomid=__res_randomid"] + libc_common_cflags + [ + "-DANDROID_CHANGES", + "-DINET6", + "-fvisibility=hidden", + "-Wno-unused-parameter", + "-include netbsd-compat.h", + ], + + conlyflags: libc_common_conlyflags, + cppflags: libc_common_cppflags, + include_dirs: libc_common_c_includes, + local_include_dirs: [ + "dns/include", + "private", + "upstream-netbsd/lib/libc/include", + "upstream-netbsd/android/include", + ], + + name: "libc_dns", + clang: use_clang, + + stl: "none", + system_shared_libs: [], + asan: false, + native_coverage: bionic_coverage, + +} + +// ======================================================== +// libc_freebsd.a - upstream FreeBSD C library code +// ======================================================== +// +// These files are built with the freebsd-compat.h header file +// automatically included. + +cc_library_static { + + srcs: libc_upstream_freebsd_src_files, + arch: { + arm64: { + srcs: [ + "-upstream-freebsd/lib/libc/string/wmemmove.c", + ], + }, + arm: { + srcs: [ + ], + }, + }, + + cflags: libc_common_cflags + [ + "-Wno-sign-compare", + "-Wno-uninitialized", + "-include freebsd-compat.h", + ], + + conlyflags: libc_common_conlyflags, + cppflags: libc_common_cppflags, + include_dirs: libc_common_c_includes, + local_include_dirs: [ + "upstream-freebsd/android/include", + "upstream-freebsd/lib/libc/include", + ], + + name: "libc_freebsd", + clang: use_clang, + + stl: "none", + system_shared_libs: [], + asan: false, + native_coverage: bionic_coverage, + +} + +// ======================================================== +// libc_netbsd.a - upstream NetBSD C library code +// ======================================================== +// +// These files are built with the netbsd-compat.h header file +// automatically included. + +cc_library_static { + + srcs: libc_upstream_netbsd_src_files, + multilib: { + lib32: { + srcs: libc_netbsd_src_files_32, + }, + }, + cflags: libc_common_cflags + [ + "-Wno-sign-compare", + "-Wno-uninitialized", + "-DPOSIX_MISTAKE", + "-include netbsd-compat.h", + ], + + conlyflags: libc_common_conlyflags, + cppflags: libc_common_cppflags, + include_dirs: libc_common_c_includes, + local_include_dirs: [ + "upstream-netbsd/android/include", + "upstream-netbsd/lib/libc/include", + ], + + name: "libc_netbsd", + clang: use_clang, + + stl: "none", + system_shared_libs: [], + asan: false, + native_coverage: bionic_coverage, + +} + +// ======================================================== +// libc_openbsd.a - upstream OpenBSD C library code +// ======================================================== +// +// These files are built with the openbsd-compat.h header file +// automatically included. + +cc_library_static { + + srcs: libc_upstream_openbsd_src_files, + multilib: { + lib32: { + srcs: libc_openbsd_src_files_32, + }, + }, + + arch: { + arm64: { + srcs: [ + "-upstream-openbsd/lib/libc/string/memmove.c", + "-upstream-openbsd/lib/libc/string/stpcpy.c", + "-upstream-openbsd/lib/libc/string/strcmp.c", + "-upstream-openbsd/lib/libc/string/strcpy.c", + "-upstream-openbsd/lib/libc/string/strncmp.c", + ], + }, + arm: { + srcs: [ + "-upstream-openbsd/lib/libc/string/stpcpy.c", + "-upstream-openbsd/lib/libc/string/strcat.c", + "-upstream-openbsd/lib/libc/string/strcmp.c", + "-upstream-openbsd/lib/libc/string/strcpy.c", + ], + }, + }, + + // ANDROIDMK TRANSLATION ERROR: unsupported directive + // ifneq (,$(filter $(TARGET_ARCH),x86 x86_64)) + // Clang has wrong long double size or LDBL_MANT_DIG, http://b/17163651. + clang: false, + // ANDROIDMK TRANSLATION ERROR: unsupported directive + // else + //clang = use_clang, + // ANDROIDMK TRANSLATION ERROR: unsupported directive + // endif + cflags: libc_common_cflags + [ + "-Wno-sign-compare", + "-Wno-uninitialized", + "-Wno-unused-parameter", + "-include openbsd-compat.h", + ], + + conlyflags: libc_common_conlyflags, + cppflags: libc_common_cppflags, + include_dirs: libc_common_c_includes, + local_include_dirs: [ + "private", + "upstream-openbsd/android/include", + "upstream-openbsd/lib/libc/include", + "upstream-openbsd/lib/libc/gdtoa/", + ], + + name: "libc_openbsd", + + stl: "none", + system_shared_libs: [], + asan: false, + native_coverage: bionic_coverage, + +} + +// ======================================================== +// libc_gdtoa.a - upstream OpenBSD C library gdtoa code +// ======================================================== +// +// These files are built with the openbsd-compat.h header file +// automatically included. + +cc_library_static { + + multilib: { + lib32: { + srcs: libc_upstream_openbsd_gdtoa_src_files_32, + }, + lib64: { + srcs: libc_upstream_openbsd_gdtoa_src_files_64, + }, + }, + // ANDROIDMK TRANSLATION ERROR: unsupported directive + // ifneq (,$(filter $(TARGET_ARCH),x86 x86_64)) + // Clang has wrong long double size or LDBL_MANT_DIG, http://b/17163651. + //clang = false, + // ANDROIDMK TRANSLATION ERROR: unsupported directive + // else + clang: use_clang, + // ANDROIDMK TRANSLATION ERROR: unsupported directive + // endif + cflags: libc_common_cflags + [ + "-Wno-sign-compare", + "-Wno-uninitialized", + "-fvisibility=hidden", + "-include openbsd-compat.h", + ], + + conlyflags: libc_common_conlyflags, + cppflags: libc_common_cppflags, + include_dirs: libc_common_c_includes, + local_include_dirs: [ + "private", + "upstream-openbsd/android/include", + "upstream-openbsd/lib/libc/include", + ], + + name: "libc_gdtoa", + + stl: "none", + system_shared_libs: [], + asan: false, + native_coverage: bionic_coverage, + +} + +// ======================================================== +// libc_bionic.a - home-grown C library code +// ======================================================== + +cc_library_static { + srcs: libc_bionic_src_files, + cflags: libc_common_cflags + ["-Wframe-larger-than=2048"], + + // ssse3-strcmp-slm.S does not compile with Clang. + arch: { + arm64: { + srcs: [ + "arch-arm64/bionic/__bionic_clone.S", + "arch-arm64/bionic/_exit_with_stack_teardown.S", + "arch-arm64/bionic/setjmp.S", + "arch-arm64/bionic/__set_tls.c", + "arch-arm64/bionic/syscall.S", + "arch-arm64/bionic/vfork.S", + + "-bionic/__memcpy_chk.cpp", + "-bionic/memchr.c", + "-bionic/strchr.cpp", + "-bionic/strnlen.c", + "arch-arm64/generic/bionic/memchr.S", + "arch-arm64/generic/bionic/memcmp.S", + "arch-arm64/generic/bionic/memcpy.S", + "arch-arm64/generic/bionic/memmove.S", + "arch-arm64/generic/bionic/memset.S", + "arch-arm64/generic/bionic/stpcpy.S", + "arch-arm64/generic/bionic/strchr.S", + "arch-arm64/generic/bionic/strcmp.S", + "arch-arm64/generic/bionic/strcpy.S", + "arch-arm64/generic/bionic/strlen.S", + "arch-arm64/generic/bionic/strncmp.S", + "arch-arm64/generic/bionic/strnlen.S", + "arch-arm64/generic/bionic/wmemmove.S", + ], + }, + arm: { + srcs: [ + "-bionic/__memcpy_chk.cpp", + "-bionic/__memset_chk.cpp", + "-bionic/__strcat_chk.cpp", + "-bionic/__strcpy_chk.cpp", + "arch-arm/bionic/abort_arm.S", + "arch-arm/bionic/atomics_arm.c", + "arch-arm/bionic/__bionic_clone.S", + "arch-arm/bionic/_exit_with_stack_teardown.S", + "arch-arm/bionic/libgcc_compat.c", + "arch-arm/bionic/__restore.S", + "arch-arm/bionic/setjmp.S", + "arch-arm/bionic/syscall.S", + "arch-arm/generic/bionic/memcmp.S", + "arch-arm/cortex-a15/bionic/memcpy.S", + "arch-arm/cortex-a15/bionic/memset.S", + "arch-arm/cortex-a15/bionic/stpcpy.S", + "arch-arm/cortex-a15/bionic/strcat.S", + "arch-arm/cortex-a15/bionic/__strcat_chk.S", + "arch-arm/cortex-a15/bionic/strcmp.S", + "arch-arm/cortex-a15/bionic/strcpy.S", + "arch-arm/cortex-a15/bionic/__strcpy_chk.S", + "arch-arm/cortex-a15/bionic/strlen.S", + ], + }, + + /*x86_64: { + asflags: ["-no-integrated-as"], + }, + // memcpy.S, memchr.S, etc. do not compile with Clang. + arm: { + asflags: ["-no-integrated-as"], + }, + arm64: { + asflags: ["-no-integrated-as"], + },*/ + }, + multilib: { + lib32: { + srcs: libc_bionic_src_files_32, + }, + }, + + conlyflags: libc_common_conlyflags, + cppflags: libc_common_cppflags + ["-Wold-style-cast"], + include_dirs: libc_common_c_includes + ["bionic/libstdc++/include"], + name: "libc_bionic", + clang: use_clang, + + stl: "none", + system_shared_libs: [], + asan: false, + native_coverage: bionic_coverage, + +} + +// ======================================================== +// libc_cxa.a - Things traditionally in libstdc++ +// ======================================================== + +cc_library_static { + srcs: libc_cxa_src_files, + cflags: libc_common_cflags + ["-fvisibility=hidden"], + + conlyflags: libc_common_conlyflags, + cppflags: libc_common_cppflags, + include_dirs: libc_common_c_includes + ["bionic/libstdc++/include"], + name: "libc_cxa", + clang: true, + // GCC refuses to hide new/delete + + stl: "none", + system_shared_libs: [], + asan: false, + // b/17574078: Need to disable coverage until we have a prebuilt libprofile_rt. + // Since this is a static library built with clang, it needs to link + // libprofile_rt when it is linked into the final binary. Since the final binary + // is built with GCC, it won't link libprofile_rt. We can't very easily just add + // libprofile_rt to all link lines the way we've done for libgcov because + // libprofile_rt isn't prebuilt, and it would be tricky to write a rule that + // would make sure libprofile_rt is built. + native_coverage: false, +} + +// ======================================================== +// libc_syscalls.a +// ======================================================== + +cc_library_static { + arch: { + arm64: { + srcs: ["arch-arm64/syscalls/**/*.S"], + }, + arm: { + srcs: ["arch-arm/syscalls/**/*.S"], + }, + // TODO: mips, mips64, x86, x86_64 + }, + name: "libc_syscalls", + clang: use_clang, + + stl: "none", + system_shared_libs: [], + asan: false, + native_coverage: bionic_coverage, +} + +// ======================================================== +// libc_aeabi.a +// This is an LP32 ARM-only library that needs to be built with -fno-builtin +// to avoid infinite recursion. For the other architectures we just build an +// empty library to keep this makefile simple. +// ======================================================== + +cc_library_static { + arch: { + arm: { + srcs: ["arch-arm/bionic/__aeabi.c"], + }, + }, + name: "libc_aeabi", + clang: use_clang, + cflags: libc_common_cflags + ["-fno-builtin"], + + stl: "none", + system_shared_libs: [], + asan: false, + native_coverage: bionic_coverage, +} + +// ======================================================== +// libc_ndk.a +// Compatibility library for the NDK. This library contains +// all the parts of libc that are safe to statically link. +// We can't safely statically link things that can only run +// on a certain version of the OS. Examples include +// anything that talks to netd (a large portion of the DNS +// code) and anything that is dependent on the layout of a +// data structure that has changed across releases (such as +// pthread_t). +// ======================================================== + +cc_library_static { + name: "libc_ndk", + whole_static_libs: [ + "libc_syscalls", + "libm", + ], + + arch: { + arm: { + srcs: ["arch-arm/bionic/exidx_dynamic.c"], + }, + }, +} + +// ======================================================== +// libc_common.a +// ======================================================== + +cc_library_static { + srcs: libc_common_src_files, + multilib: { + lib32: { + srcs: libc_common_src_files_32, + }, + }, + cflags: libc_common_cflags, + conlyflags: libc_common_conlyflags, + cppflags: libc_common_cppflags, + include_dirs: libc_common_c_includes, + name: "libc_common", + clang: use_clang, + + whole_static_libs: [ + "libc_bionic", + "libc_cxa", + "libc_dns", + "libc_freebsd", + "libc_gdtoa", + "libc_malloc", + "libc_netbsd", + "libc_openbsd", + "libc_stack_protector", + "libc_syscalls", + "libc_tzcode", + ] + // ANDROIDMK TRANSLATION ERROR: unsupported directive + // ifneq ($(MALLOC_IMPL),dlmalloc) + ["libjemalloc"], + // ANDROIDMK TRANSLATION ERROR: unsupported directive + // endif + + arch: { + arm: { + whole_static_libs: ["libc_aeabi"], + }, + }, + + stl: "none", + system_shared_libs: [], + + // TODO: split out the asflags. + asflags: libc_common_cflags, + asan: false, + native_coverage: bionic_coverage, +} + +// ======================================================== +// libc_nomalloc.a +// ======================================================== +// +// This is a version of the static C library that does not +// include malloc. It's useful in situations when the user wants +// to provide their own malloc implementation, or wants to +// explicitly disallow the use of malloc, such as in the +// dynamic linker. + +cc_library_static { + srcs: [ + "bionic/dl_iterate_phdr_static.cpp", + "bionic/libc_init_static.cpp", + ], + + arch: { + arm: { + srcs: ["arch-arm/bionic/exidx_static.c"], + }, + }, + + include_dirs: libc_common_c_includes, + cflags: libc_common_cflags + ["-DLIBC_STATIC"], + + conlyflags: libc_common_conlyflags, + cppflags: libc_common_cppflags, + + name: "libc_nomalloc", + clang: use_clang, + + whole_static_libs: ["libc_common"], + stl: "none", + system_shared_libs: [], + asan: false, + native_coverage: bionic_coverage, + +} + +// ======================================================== +// libc_malloc.a: the _prefixed_ malloc functions (like dlcalloc). +// ======================================================== + +cc_library_static { + srcs: libc_malloc_src, + cflags: libc_common_cflags + ["-fvisibility=hidden"], + + conlyflags: libc_common_conlyflags, + cppflags: libc_common_cppflags, + include_dirs: libc_common_c_includes, + name: "libc_malloc", + clang: use_clang, + stl: "none", + asan: false, + native_coverage: bionic_coverage, +} + +// ======================================================== +// libc.a + libc.so +// ======================================================== +cc_library { + name: "libc", + cflags: libc_common_cflags, + conlyflags: libc_common_conlyflags, + cppflags: libc_common_cppflags, + include_dirs: libc_common_c_includes, + static: { + srcs: [ + "bionic/dl_iterate_phdr_static.cpp", + "bionic/malloc_debug_common.cpp", + "bionic/libc_init_static.cpp", + ], + }, + shared: { + srcs: [ + "bionic/malloc_debug_common.cpp", + "bionic/libc_init_dynamic.cpp", + "bionic/NetdClient.cpp", + ], + }, + + clang: use_clang, + + required: ["tzdata"], + + // Leave the symbols in the shared library so that stack unwinders can produce + // meaningful name resolution. + strip: "keep_symbols", + + // WARNING: The only library libc.so should depend on is libdl.so! If you add other libraries, + // make sure to add -Wl,--exclude-libs=libgcc.a to the LOCAL_LDFLAGS for those libraries. This + // ensures that symbols that are pulled into those new libraries from libgcc.a are not declared + // external; if that were the case, then libc would not pull those symbols from libgcc.a as it + // should, instead relying on the external symbols from the dependent libraries. That would + // create a "cloaked" dependency on libgcc.a in libc though the libraries, which is not what + // you wanted! + + shared_libs: ["libdl"], + whole_static_libs: ["libc_common"], + stl: "none", + system_shared_libs: [], + + // We'd really like to do this for all architectures, but since this wasn't done + // before, these symbols must continue to be exported on LP32 for binary + // compatibility. + multilib: { + lib64: { + ldflags: ["-Wl,--exclude-libs,libgcc.a"], + }, + }, + + // special for arm + arch: { + arm: { + shared: { + srcs: ["arch-arm/bionic/exidx_dynamic.c"], + }, + static: { + srcs: ["arch-arm/bionic/exidx_static.c"], + }, + nocrt: true, + cflags: ["-DCRT_LEGACY_WORKAROUND"], + srcs: [ + "arch-common/bionic/crtbegin_so.c", + "arch-arm/bionic/atexit_legacy.c", + "arch-common/bionic/crtend_so.S", + ], + }, + }, + asan: false, + native_coverage: bionic_coverage, +} + +// For all builds, except for the -user build we will enable memory +// allocation checking (including memory leaks, buffer overwrites, etc.) +// Note that all these checks are also controlled by env. settings +// that can enable, or disable specific checks. Note also that some of +// the checks are available only in emulator and are implemeted in +// libc_malloc_qemu_instrumented.so. +// ANDROIDMK TRANSLATION ERROR: unsupported directive +// ifneq ($(TARGET_BUILD_VARIANT),user) +// ======================================================== +// libc_malloc_debug_leak.so +// ======================================================== +cc_library_shared { + cflags: libc_common_cflags, + conlyflags: libc_common_conlyflags, + cppflags: libc_common_cppflags, + + // Make sure that unwind.h comes from libunwind. + include_dirs: libc_common_c_includes, + + srcs: [ + "bionic/debug_mapinfo.cpp", + "bionic/debug_stacktrace.cpp", + "bionic/libc_logging.cpp", + "bionic/malloc_debug_leak.cpp", + "bionic/malloc_debug_check.cpp", + ], + + name: "libc_malloc_debug_leak", + clang: use_clang, + + shared_libs: [ + "libc", + "libdl", + ], + stl: "none", + system_shared_libs: [], + // Only need this for arm since libc++ uses its own unwind code that + // doesn't mix with the other default unwind code. + arch: { + arm: { + static_libs: [ + "libunwind_llvm", + "libc++abi", + ], + }, + }, + allow_undefined_symbols: true, + + // Don't install on release build + tags: [ + "eng", + "debug", + ], + asan: false, + native_coverage: bionic_coverage, +} + +// ======================================================== +// libc_malloc_debug_qemu.so +// ======================================================== +cc_library_shared { + cflags: libc_common_cflags + ["-DMALLOC_QEMU_INSTRUMENT"], + + conlyflags: libc_common_conlyflags, + cppflags: libc_common_cppflags, + + include_dirs: libc_common_c_includes, + + srcs: [ + "bionic/libc_logging.cpp", + "bionic/malloc_debug_qemu.cpp", + ], + + name: "libc_malloc_debug_qemu", + clang: use_clang, + + shared_libs: [ + "libc", + "libdl", + ], + stl: "none", + system_shared_libs: [], + + // Don't install on release build + tags: [ + "eng", + "debug", + ], + asan: false, + native_coverage: bionic_coverage, +} + +// ANDROIDMK TRANSLATION ERROR: unsupported directive +// endif +//!user + +// ======================================================== +// libstdc++.so + libstdc++.a +// ======================================================== +libstdcxx_common_src_files = [ + "bionic/__cxa_guard.cpp", + "bionic/__cxa_pure_virtual.cpp", + "bionic/new.cpp", + "bionic/libc_logging.cpp", +] + +cc_library { + include_dirs: libc_common_c_includes + ["bionic/libstdc++/include"], + cflags: libc_common_cflags, + cppflags: libc_common_cppflags, + srcs: libstdcxx_common_src_files, + name: "libstdc++", + + stl: "none", + system_shared_libs: ["libc"], + asan: false, + native_coverage: bionic_coverage, +} + +// ======================================================== +// ANDROIDMK TRANSLATION ERROR: unsupported include +// include $(call all-makefiles-under,$(LOCAL_PATH)) + +crt_arch_flags = { + arm: { + local_include_dirs: ["arch-arm/include"], + cflags: ["-mthumb-interwork"], + }, + arm64: { + local_include_dirs: ["arch-arm64/include"], + }, + mips: { + local_include_dirs: ["arch-mips/include"], + ldflags: ["-melf32ltsmip"], + }, + mips64: { + local_include_dirs: ["arch-mips64/include"], + ldflags: ["-melf64ltsmip"], + }, + x86: { + cflags: ["-m32"], + ldflags: ["-melf_i386"], + local_include_dirs: ["arch-x86/include"], + }, + x86_64: { + cflags: ["-m64"], + ldflags: ["-melf_x86_64"], + local_include_dirs: ["arch-x86_64/include"], + }, +} + +crt_arch_so_flags = crt_arch_flags + { + mips: { + cflags: ["-fPIC"], + }, + mips64: { + cflags: ["-fPIC"], + }, + x86: { + cflags: ["-fPIC"], + }, + x86_64: { + cflags: ["-fPIC"], + }, +} + +cc_object { + name: "crtbrand", + local_include_dirs: ["include"], + asflags: ["-DPLATFORM_SDK_VERSION=" + PLATFORM_SDK_VERSION], + srcs: ["arch-common/bionic/crtbrand.S"], + no_default_compiler_flags: true, + + arch: crt_arch_so_flags, +} + +cc_object { + name: "crtbegin_so1", + local_include_dirs: ["include"], + srcs: ["arch-common/bionic/crtbegin_so.c"], + no_default_compiler_flags: true, + + arch: crt_arch_so_flags, +} + +cc_object { + name: "crtbegin_so", + no_default_compiler_flags: true, + + arch: crt_arch_so_flags, + deps: [ + "crtbegin_so1", + "crtbrand", + ], +} + +cc_object { + name: "crtend_so", + local_include_dirs: ["include"], + srcs: ["arch-common/bionic/crtend_so.S"], + no_default_compiler_flags: true, + + arch: crt_arch_so_flags, +} + +cc_object { + name: "crtbegin_static1", + local_include_dirs: ["include"], + srcs: ["arch-common/bionic/crtbegin.c"], + no_default_compiler_flags: true, + + arch: crt_arch_flags + { + arm64: { + srcs: [ + "-arch-common/bionic/crtbegin.c", + "arch-arm64/bionic/crtbegin.c", + ], + }, + mips: { + srcs: [ + "-arch-common/bionic/crtbegin.c", + "arch-mips/bionic/crtbegin.c", + ], + }, + mips64: { + srcs: [ + "-arch-common/bionic/crtbegin.c", + "arch-mips64/bionic/crtbegin.c", + ], + }, + }, +} + +cc_object { + name: "crtbegin_static", + no_default_compiler_flags: true, + + arch: crt_arch_flags, + deps: [ + "crtbegin_static1", + "crtbrand", + ], +} + +cc_object { + name: "crtbegin_dynamic1", + local_include_dirs: ["include"], + srcs: ["arch-common/bionic/crtbegin.c"], + no_default_compiler_flags: true, + + arch: crt_arch_flags + { + arm64: { + srcs: [ + "-arch-common/bionic/crtbegin.c", + "arch-arm64/bionic/crtbegin.c", + ], + }, + mips: { + srcs: [ + "-arch-common/bionic/crtbegin.c", + "arch-mips/bionic/crtbegin.c", + ], + }, + mips64: { + srcs: [ + "-arch-common/bionic/crtbegin.c", + "arch-mips64/bionic/crtbegin.c", + ], + }, + }, +} + +cc_object { + name: "crtbegin_dynamic", + no_default_compiler_flags: true, + + arch: crt_arch_flags, + deps: [ + "crtbegin_dynamic1", + "crtbrand", + ], +} + +cc_object { + // We rename crtend.o to crtend_android.o to avoid a + // name clash between gcc and bionic. + name: "crtend_android", + local_include_dirs: ["include"], + srcs: ["arch-common/bionic/crtend.S"], + no_default_compiler_flags: true, + + arch: crt_arch_flags, +} diff --git a/libdl/Blueprints b/libdl/Blueprints new file mode 100644 index 000000000..99363471a --- /dev/null +++ b/libdl/Blueprints @@ -0,0 +1,46 @@ +// +// libdl +// +cc_library { + + // NOTE: --exclude-libs=libgcc.a makes sure that any symbols libdl.so pulls from + // libgcc.a are made static to libdl.so. This in turn ensures that libraries that + // a) pull symbols from libgcc.a and b) depend on libdl.so will not rely on libdl.so + // to provide those symbols, but will instead pull them from libgcc.a. Specifically, + // we use this property to make sure libc.so has its own copy of the code from + // libgcc.a it uses. + // + // DO NOT REMOVE --exclude-libs! + + ldflags: ["-Wl,--exclude-libs=libgcc.a"], + + // for x86, exclude libgcc_eh.a for the same reasons as above + arch: { + x86: { + ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"], + }, + x86_64: { + ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"], + }, + }, + srcs: ["libdl.c"], + cflags: [ + "-Wall", + "-Wextra", + "-Wunused", + "-Werror", + ], + stl: "none", + + name: "libdl", + + // NOTE: libdl needs __aeabi_unwind_cpp_pr0 from libgcc.a but libgcc.a needs a + // few symbols from libc. Using --no-undefined here results in having to link + // against libc creating a circular dependency which is removed and we end up + // with missing symbols. Since this library is just a bunch of stubs, we set + // LOCAL_ALLOW_UNDEFINED_SYMBOLS to remove --no-undefined from the linker flags. + allow_undefined_symbols: true, + system_shared_libs: [], + + asan: false, +} diff --git a/libm/Blueprints b/libm/Blueprints new file mode 100644 index 000000000..035cfff91 --- /dev/null +++ b/libm/Blueprints @@ -0,0 +1,345 @@ +// ANDROIDMK TRANSLATION ERROR: unsupported directive +// ifneq ($(TARGET_USE_PRIVATE_LIBM),true) + +bionic_coverage = false + +// TODO: this comes from from upstream's libc, not libm, but it's an +// implementation detail that should have hidden visibility, so it needs +// to be in whatever library the math code is in. +libm_common_src_files = ["digittoint.c"] + +// TODO: this is not in the BSDs. +libm_common_src_files += [ + "significandl.c", + "sincos.c", +] + +libm_common_src_files += [ + "upstream-freebsd/lib/msun/bsdsrc/b_exp.c", + "upstream-freebsd/lib/msun/bsdsrc/b_log.c", + "upstream-freebsd/lib/msun/bsdsrc/b_tgamma.c", + "upstream-freebsd/lib/msun/src/catrig.c", + "upstream-freebsd/lib/msun/src/catrigf.c", + "upstream-freebsd/lib/msun/src/e_acos.c", + "upstream-freebsd/lib/msun/src/e_acosf.c", + "upstream-freebsd/lib/msun/src/e_acosh.c", + "upstream-freebsd/lib/msun/src/e_acoshf.c", + "upstream-freebsd/lib/msun/src/e_asin.c", + "upstream-freebsd/lib/msun/src/e_asinf.c", + "upstream-freebsd/lib/msun/src/e_atan2.c", + "upstream-freebsd/lib/msun/src/e_atan2f.c", + "upstream-freebsd/lib/msun/src/e_atanh.c", + "upstream-freebsd/lib/msun/src/e_atanhf.c", + "upstream-freebsd/lib/msun/src/e_cosh.c", + "upstream-freebsd/lib/msun/src/e_coshf.c", + "upstream-freebsd/lib/msun/src/e_exp.c", + "upstream-freebsd/lib/msun/src/e_expf.c", + "upstream-freebsd/lib/msun/src/e_fmod.c", + "upstream-freebsd/lib/msun/src/e_fmodf.c", + "upstream-freebsd/lib/msun/src/e_gamma.c", + "upstream-freebsd/lib/msun/src/e_gammaf.c", + "upstream-freebsd/lib/msun/src/e_gammaf_r.c", + "upstream-freebsd/lib/msun/src/e_gamma_r.c", + "upstream-freebsd/lib/msun/src/e_hypot.c", + "upstream-freebsd/lib/msun/src/e_hypotf.c", + "upstream-freebsd/lib/msun/src/e_j0.c", + "upstream-freebsd/lib/msun/src/e_j0f.c", + "upstream-freebsd/lib/msun/src/e_j1.c", + "upstream-freebsd/lib/msun/src/e_j1f.c", + "upstream-freebsd/lib/msun/src/e_jn.c", + "upstream-freebsd/lib/msun/src/e_jnf.c", + "upstream-freebsd/lib/msun/src/e_lgamma.c", + "upstream-freebsd/lib/msun/src/e_lgammaf.c", + "upstream-freebsd/lib/msun/src/e_lgammaf_r.c", + "upstream-freebsd/lib/msun/src/e_lgamma_r.c", + "upstream-freebsd/lib/msun/src/e_log10.c", + "upstream-freebsd/lib/msun/src/e_log10f.c", + "upstream-freebsd/lib/msun/src/e_log2.c", + "upstream-freebsd/lib/msun/src/e_log2f.c", + "upstream-freebsd/lib/msun/src/e_log.c", + "upstream-freebsd/lib/msun/src/e_logf.c", + "upstream-freebsd/lib/msun/src/e_pow.c", + "upstream-freebsd/lib/msun/src/e_powf.c", + "upstream-freebsd/lib/msun/src/e_remainder.c", + "upstream-freebsd/lib/msun/src/e_remainderf.c", + "upstream-freebsd/lib/msun/src/e_rem_pio2.c", + "upstream-freebsd/lib/msun/src/e_rem_pio2f.c", + "upstream-freebsd/lib/msun/src/e_scalb.c", + "upstream-freebsd/lib/msun/src/e_scalbf.c", + "upstream-freebsd/lib/msun/src/e_sinh.c", + "upstream-freebsd/lib/msun/src/e_sinhf.c", + "upstream-freebsd/lib/msun/src/e_sqrt.c", + "upstream-freebsd/lib/msun/src/e_sqrtf.c", + "upstream-freebsd/lib/msun/src/imprecise.c", + "upstream-freebsd/lib/msun/src/k_cos.c", + "upstream-freebsd/lib/msun/src/k_cosf.c", + "upstream-freebsd/lib/msun/src/k_exp.c", + "upstream-freebsd/lib/msun/src/k_expf.c", + "upstream-freebsd/lib/msun/src/k_rem_pio2.c", + "upstream-freebsd/lib/msun/src/k_sin.c", + "upstream-freebsd/lib/msun/src/k_sinf.c", + "upstream-freebsd/lib/msun/src/k_tan.c", + "upstream-freebsd/lib/msun/src/k_tanf.c", + "upstream-freebsd/lib/msun/src/s_asinh.c", + "upstream-freebsd/lib/msun/src/s_asinhf.c", + "upstream-freebsd/lib/msun/src/s_atan.c", + "upstream-freebsd/lib/msun/src/s_atanf.c", + "upstream-freebsd/lib/msun/src/s_carg.c", + "upstream-freebsd/lib/msun/src/s_cargf.c", + "upstream-freebsd/lib/msun/src/s_cargl.c", + "upstream-freebsd/lib/msun/src/s_cbrt.c", + "upstream-freebsd/lib/msun/src/s_cbrtf.c", + "upstream-freebsd/lib/msun/src/s_ccosh.c", + "upstream-freebsd/lib/msun/src/s_ccoshf.c", + "upstream-freebsd/lib/msun/src/s_ceil.c", + "upstream-freebsd/lib/msun/src/s_ceilf.c", + "upstream-freebsd/lib/msun/src/s_cexp.c", + "upstream-freebsd/lib/msun/src/s_cexpf.c", + "upstream-freebsd/lib/msun/src/s_cimag.c", + "upstream-freebsd/lib/msun/src/s_cimagf.c", + "upstream-freebsd/lib/msun/src/s_cimagl.c", + "upstream-freebsd/lib/msun/src/s_conj.c", + "upstream-freebsd/lib/msun/src/s_conjf.c", + "upstream-freebsd/lib/msun/src/s_conjl.c", + "upstream-freebsd/lib/msun/src/s_copysign.c", + "upstream-freebsd/lib/msun/src/s_copysignf.c", + "upstream-freebsd/lib/msun/src/s_cos.c", + "upstream-freebsd/lib/msun/src/s_cosf.c", + "upstream-freebsd/lib/msun/src/s_cproj.c", + "upstream-freebsd/lib/msun/src/s_cprojf.c", + "upstream-freebsd/lib/msun/src/s_cprojl.c", + "upstream-freebsd/lib/msun/src/s_creal.c", + "upstream-freebsd/lib/msun/src/s_crealf.c", + "upstream-freebsd/lib/msun/src/s_creall.c", + "upstream-freebsd/lib/msun/src/s_csinh.c", + "upstream-freebsd/lib/msun/src/s_csinhf.c", + "upstream-freebsd/lib/msun/src/s_csqrt.c", + "upstream-freebsd/lib/msun/src/s_csqrtf.c", + "upstream-freebsd/lib/msun/src/s_csqrtl.c", + "upstream-freebsd/lib/msun/src/s_ctanh.c", + "upstream-freebsd/lib/msun/src/s_ctanhf.c", + "upstream-freebsd/lib/msun/src/s_erf.c", + "upstream-freebsd/lib/msun/src/s_erff.c", + "upstream-freebsd/lib/msun/src/s_exp2.c", + "upstream-freebsd/lib/msun/src/s_exp2f.c", + "upstream-freebsd/lib/msun/src/s_expm1.c", + "upstream-freebsd/lib/msun/src/s_expm1f.c", + "upstream-freebsd/lib/msun/src/s_fabs.c", + "upstream-freebsd/lib/msun/src/s_fabsf.c", + "upstream-freebsd/lib/msun/src/s_fdim.c", + "upstream-freebsd/lib/msun/src/s_finite.c", + "upstream-freebsd/lib/msun/src/s_finitef.c", + "upstream-freebsd/lib/msun/src/s_floor.c", + "upstream-freebsd/lib/msun/src/s_floorf.c", + "upstream-freebsd/lib/msun/src/s_fma.c", + "upstream-freebsd/lib/msun/src/s_fmaf.c", + "upstream-freebsd/lib/msun/src/s_fmax.c", + "upstream-freebsd/lib/msun/src/s_fmaxf.c", + "upstream-freebsd/lib/msun/src/s_fmin.c", + "upstream-freebsd/lib/msun/src/s_fminf.c", + "upstream-freebsd/lib/msun/src/s_frexp.c", + "upstream-freebsd/lib/msun/src/s_frexpf.c", + "upstream-freebsd/lib/msun/src/s_ilogb.c", + "upstream-freebsd/lib/msun/src/s_ilogbf.c", + "upstream-freebsd/lib/msun/src/s_llrint.c", + "upstream-freebsd/lib/msun/src/s_llrintf.c", + "upstream-freebsd/lib/msun/src/s_llround.c", + "upstream-freebsd/lib/msun/src/s_llroundf.c", + "upstream-freebsd/lib/msun/src/s_log1p.c", + "upstream-freebsd/lib/msun/src/s_log1pf.c", + "upstream-freebsd/lib/msun/src/s_logb.c", + "upstream-freebsd/lib/msun/src/s_logbf.c", + "upstream-freebsd/lib/msun/src/s_lrint.c", + "upstream-freebsd/lib/msun/src/s_lrintf.c", + "upstream-freebsd/lib/msun/src/s_lround.c", + "upstream-freebsd/lib/msun/src/s_lroundf.c", + "upstream-freebsd/lib/msun/src/s_modf.c", + "upstream-freebsd/lib/msun/src/s_modff.c", + "upstream-freebsd/lib/msun/src/s_nan.c", + "upstream-freebsd/lib/msun/src/s_nearbyint.c", + "upstream-freebsd/lib/msun/src/s_nextafter.c", + "upstream-freebsd/lib/msun/src/s_nextafterf.c", + "upstream-freebsd/lib/msun/src/s_remquo.c", + "upstream-freebsd/lib/msun/src/s_remquof.c", + "upstream-freebsd/lib/msun/src/s_rint.c", + "upstream-freebsd/lib/msun/src/s_rintf.c", + "upstream-freebsd/lib/msun/src/s_round.c", + "upstream-freebsd/lib/msun/src/s_roundf.c", + "upstream-freebsd/lib/msun/src/s_scalbln.c", + "upstream-freebsd/lib/msun/src/s_scalbn.c", + "upstream-freebsd/lib/msun/src/s_scalbnf.c", + "upstream-freebsd/lib/msun/src/s_signgam.c", + "upstream-freebsd/lib/msun/src/s_significand.c", + "upstream-freebsd/lib/msun/src/s_significandf.c", + "upstream-freebsd/lib/msun/src/s_sin.c", + "upstream-freebsd/lib/msun/src/s_sinf.c", + "upstream-freebsd/lib/msun/src/s_tan.c", + "upstream-freebsd/lib/msun/src/s_tanf.c", + "upstream-freebsd/lib/msun/src/s_tanh.c", + "upstream-freebsd/lib/msun/src/s_tanhf.c", + "upstream-freebsd/lib/msun/src/s_tgammaf.c", + "upstream-freebsd/lib/msun/src/s_trunc.c", + "upstream-freebsd/lib/msun/src/s_truncf.c", + "upstream-freebsd/lib/msun/src/w_cabs.c", + "upstream-freebsd/lib/msun/src/w_cabsf.c", + "upstream-freebsd/lib/msun/src/w_cabsl.c", + "upstream-freebsd/lib/msun/src/w_drem.c", + "upstream-freebsd/lib/msun/src/w_dremf.c", +] + +libm_common_src_files += [ + "fake_long_double.c", + "signbit.c", +] + +libm_ld128_src_files = [ + "upstream-freebsd/lib/msun/src/e_acosl.c", + "upstream-freebsd/lib/msun/src/e_acoshl.c", + "upstream-freebsd/lib/msun/src/e_asinl.c", + "upstream-freebsd/lib/msun/src/e_atan2l.c", + "upstream-freebsd/lib/msun/src/e_atanhl.c", + "upstream-freebsd/lib/msun/src/e_fmodl.c", + "upstream-freebsd/lib/msun/src/e_hypotl.c", + "upstream-freebsd/lib/msun/src/e_lgammal.c", + "upstream-freebsd/lib/msun/src/e_remainderl.c", + "upstream-freebsd/lib/msun/src/e_sqrtl.c", + "upstream-freebsd/lib/msun/src/s_asinhl.c", + "upstream-freebsd/lib/msun/src/s_atanl.c", + "upstream-freebsd/lib/msun/src/s_cbrtl.c", + "upstream-freebsd/lib/msun/src/s_ceill.c", + "upstream-freebsd/lib/msun/src/s_copysignl.c", + "upstream-freebsd/lib/msun/src/e_coshl.c", + "upstream-freebsd/lib/msun/src/s_cosl.c", + "upstream-freebsd/lib/msun/src/s_fabsl.c", + "upstream-freebsd/lib/msun/src/s_floorl.c", + "upstream-freebsd/lib/msun/src/s_fmal.c", + "upstream-freebsd/lib/msun/src/s_fmaxl.c", + "upstream-freebsd/lib/msun/src/s_fminl.c", + "upstream-freebsd/lib/msun/src/s_modfl.c", + "upstream-freebsd/lib/msun/src/s_frexpl.c", + "upstream-freebsd/lib/msun/src/s_ilogbl.c", + "upstream-freebsd/lib/msun/src/s_llrintl.c", + "upstream-freebsd/lib/msun/src/s_llroundl.c", + "upstream-freebsd/lib/msun/src/s_logbl.c", + "upstream-freebsd/lib/msun/src/s_lrintl.c", + "upstream-freebsd/lib/msun/src/s_lroundl.c", + "upstream-freebsd/lib/msun/src/s_nextafterl.c", + "upstream-freebsd/lib/msun/src/s_nexttoward.c", + "upstream-freebsd/lib/msun/src/s_nexttowardf.c", + "upstream-freebsd/lib/msun/src/s_remquol.c", + "upstream-freebsd/lib/msun/src/s_rintl.c", + "upstream-freebsd/lib/msun/src/s_roundl.c", + "upstream-freebsd/lib/msun/src/s_scalbnl.c", + "upstream-freebsd/lib/msun/src/e_sinhl.c", + "upstream-freebsd/lib/msun/src/s_sinl.c", + "upstream-freebsd/lib/msun/src/s_tanhl.c", + "upstream-freebsd/lib/msun/src/s_tanl.c", + "upstream-freebsd/lib/msun/src/s_truncl.c", +] + +libm_ld128_src_files += [ + "upstream-freebsd/lib/msun/ld128/invtrig.c", + "upstream-freebsd/lib/msun/ld128/e_lgammal_r.c", + "upstream-freebsd/lib/msun/ld128/k_cosl.c", + "upstream-freebsd/lib/msun/ld128/k_sinl.c", + "upstream-freebsd/lib/msun/ld128/k_tanl.c", + "upstream-freebsd/lib/msun/ld128/s_erfl.c", + "upstream-freebsd/lib/msun/ld128/s_exp2l.c", + "upstream-freebsd/lib/msun/ld128/s_expl.c", + "upstream-freebsd/lib/msun/ld128/s_logl.c", + "upstream-freebsd/lib/msun/ld128/s_nanl.c", +] + +// TODO: re-enable i387/e_sqrtf.S for x86, and maybe others. + +libm_common_cflags = [ + "-DFLT_EVAL_METHOD=0", + "-std=c99", + "-include freebsd-compat.h", + "-Wno-missing-braces", + "-Wno-parentheses", + "-Wno-sign-compare", + "-Wno-uninitialized", + "-Wno-unknown-pragmas", + "-fvisibility=hidden", +] + +// Workaround the GCC "(long)fn -> lfn" optimization bug which will result in +// self recursions for lrint, lrintf, and lrintl. +// BUG: 14225968 +libm_common_cflags += [ + "-fno-builtin-rint", + "-fno-builtin-rintf", + "-fno-builtin-rintl", +] + +libm_common_local_includes = ["upstream-freebsd/lib/msun/src/"] + +libm_ld_local_includes = ["upstream-freebsd/lib/msun/ld128/"] + +// +// libm.so and libm.a for target. +// +cc_library { + name: "libm", + + // ANDROIDMK TRANSLATION ERROR: unsupported assignment to LOCAL_ARM_MODE + // LOCAL_ARM_MODE:=arm + cflags: libm_common_cflags, + local_include_dirs: libm_common_local_includes, + srcs: libm_common_src_files, + system_shared_libs: ["libc"], + + native_coverage: bionic_coverage, + asan: false, + + // arch-specific settings + arch: { + arm: { + local_include_dirs: ["arm"], + srcs: ["arm/fenv.c"], + }, + + arm64: { + local_include_dirs: libm_ld_local_includes, + srcs: ["arm64/fenv.c"] + libm_ld128_src_files, + }, + + x86: { + local_include_dirs: ["i387"], + srcs: ["i387/fenv.c"], + // Clang has wrong long double sizes for x86. + clang: false, + }, + + x86_64: { + local_include_dirs: libm_ld_local_includes, + srcs: ["amd64/fenv.c"] + libm_ld128_src_files, + // Clang has wrong long double sizes for x86. + clang: false, + }, + + mips: { + srcs: ["mips/fenv.c"], + }, + + mips64: { + local_include_dirs: libm_ld_local_includes, + srcs: ["mips/fenv.c"] + libm_ld128_src_files, + }, + }, + + // We'd really like to do this for all architectures, but since this wasn't done + // before, these symbols must continue to be exported on LP32 for binary + // compatibility. + multilib: { + lib64: { + ldflags: ["-Wl,--exclude-libs,libgcc.a"], + }, + }, + + stl: "none", +} + +// ANDROIDMK TRANSLATION ERROR: unsupported directive +// endif