blob: 35d9cdc90a0be5293d2477fd181f5970d6dee97f [file] [log] [blame]
LOCAL_DIR := $(GET_LOCAL_DIR)
MODULE := $(LOCAL_DIR)
# Musl plays tricks with weak symbols to assist dead code elimination.
# By default this build system will "partially link" modules, however, and this
# reduces the effectiveness of weak symbols. Specifically, the linker will see
# the strong symbol in the .o files and references will always resolve to that
# strong symbol. By turning libc into a static library, the strong symbols will
# be pulled into the link only if they are explicitly referenced. This allows
# a weak symbol to provide a dummy implementation unless there is an explicit
# dependancy on the symbol somewhere else in the binary.
MODULE_STATIC_LIB := true
MUSL_DIR := external/trusty/musl
# This eliminate /usr/local/include and /usr/include from includepaths.
# Note that this does NOT eliminate the compiler's builtin include directory,
# which includes header files for vector intrinsics and similar.
# -nostdinc would eliminate all these directories, but we want to keep access
# to the intrinsics for now.
# Also note that the builtin directory will shadow the contents of sysroot.
# To be 100% correct, the libc headers should be in a real sysroot.
GLOBAL_COMPILEFLAGS += --sysroot=fake_sysroot
# Using -isystem instead of -I has two effects. First, these paths will be
# searched after -I. Second, warnings for these header files will be
# suppressed. Musl's header files are not designed to be warning clean,
# particularly when -Wall is enabled enabled. Because we're using -Werror,
# we must either patch the header files or use -isystem.
GLOBAL_COMPILEFLAGS += \
-isystem $(MUSL_DIR)/arch/$(STANDARD_ARCH_NAME) \
-isystem $(MUSL_DIR)/arch/generic \
-isystem $(MUSL_DIR)/include \
# Internal includes. Should mask public includes - but -isystem guarentees this.
MODULE_INCLUDES += \
$(MUSL_DIR)/src/internal \
$(MUSL_DIR)/src/include \
# Musl is scrupulous about exposing prototypes and defines based on what
# standard is requested. When compiling C++ code, however, Clang defines
# _GNU_SOURCE because libcxx's header files depend on prototypes that are only
# available with _GNU_SOURCE specified. To avoid skew where prototypes are
# defined for C++ but not C, turn everything on always.
GLOBAL_COMPILEFLAGS += -D_ALL_SOURCE
# Musl declares global variables with names like "index" that can conflict with
# function names when _ALL_SOURCE is turned on. Compile Musl as it expects to be
# compiled.
MODULE_COMPILEFLAGS += -U_ALL_SOURCE -D_XOPEN_SOURCE=700
# libc should be freestanding, but the rest of the app should not be.
MODULE_COMPILEFLAGS += -ffreestanding
# Musl's source is not warning clean. Suppress warnings we know about.
MODULE_COMPILEFLAGS += \
-Wno-parentheses \
-Wno-sign-compare \
-Wno-incompatible-pointer-types-discards-qualifiers \
-Wno-string-plus-int \
-Wno-missing-braces \
# Musl is generally not strict about its function prototypes.
# This could be fixed, except for "main". The prototype for main is deliberately
# ill-defined.
MODULE_CFLAGS += -Wno-strict-prototypes
# Musl's math code uses pragma STDC FENV_ACCESS ON.
# Neither Clang nor GCC support this pragma.
# https://wiki.musl-libc.org/mathematical-library.html
MODULE_COMPILEFLAGS += \
-Wno-unknown-pragmas \
# Musl will do something like this:
# weak_alias(a, b); weak_alias(b, c);
# But it appears the second statement will get eagerly evaluated to:
# weak_alias(a, c);
# and overriding b will not affect c. This is likely not intended behavior, but
# it does not matter for us so ignore it.
MODULE_COMPILEFLAGS += \
-Wno-ignored-attributes \
# The are compares that make sense in 64-bit but do not make sense in 32-bit.
MODULE_COMPILEFLAGS += \
-Wno-tautological-constant-compare
# NOTE eabi_unwind_stubs.c because libgcc pulls in unwinding stuff.
# NOTE using dlmalloc because it's difficult to guarentee Musl's malloc will
# work without mmap.
MODULE_SRCS := \
external/lk/lib/libc/eabi_unwind_stubs.c \
$(LOCAL_DIR)/__dso_handle.c \
$(LOCAL_DIR)/__set_thread_area.c \
$(LOCAL_DIR)/file_stubs.c \
$(LOCAL_DIR)/locale_stubs.c \
$(LOCAL_DIR)/malloc.c \
$(LOCAL_DIR)/time_stubs.c \
# Trusty-specific syscalls
MODULE_SRCS += \
$(LOCAL_DIR)/ipc.c \
$(LOCAL_DIR)/mman.c \
$(LOCAL_DIR)/time.c \
$(LOCAL_DIR)/trusty_app_mgmt.c \
ifeq ($(ASLR),false)
MODULE_SRCS += $(MUSL_DIR)/crt/crt1.c
else
MODULE_SRCS += $(MUSL_DIR)/crt/rcrt1.c
endif
# Musl
MODULE_SRCS += \
$(MUSL_DIR)/src/env/__environ.c \
$(MUSL_DIR)/src/env/__init_tls.c \
$(MUSL_DIR)/src/env/__libc_start_main.c \
$(MUSL_DIR)/src/env/getenv.c \
$(MUSL_DIR)/src/internal/defsysinfo.c \
$(MUSL_DIR)/src/internal/floatscan.c \
$(MUSL_DIR)/src/internal/intscan.c \
$(MUSL_DIR)/src/internal/libc.c \
$(MUSL_DIR)/src/internal/shgetc.c \
$(MUSL_DIR)/src/ctype/__ctype_b_loc.c \
$(MUSL_DIR)/src/ctype/__ctype_get_mb_cur_max.c \
$(MUSL_DIR)/src/ctype/__ctype_tolower_loc.c \
$(MUSL_DIR)/src/ctype/__ctype_toupper_loc.c \
$(MUSL_DIR)/src/ctype/isalnum.c \
$(MUSL_DIR)/src/ctype/isalpha.c \
$(MUSL_DIR)/src/ctype/isascii.c \
$(MUSL_DIR)/src/ctype/isblank.c \
$(MUSL_DIR)/src/ctype/iscntrl.c \
$(MUSL_DIR)/src/ctype/isdigit.c \
$(MUSL_DIR)/src/ctype/isgraph.c \
$(MUSL_DIR)/src/ctype/islower.c \
$(MUSL_DIR)/src/ctype/isprint.c \
$(MUSL_DIR)/src/ctype/ispunct.c \
$(MUSL_DIR)/src/ctype/isspace.c \
$(MUSL_DIR)/src/ctype/isupper.c \
$(MUSL_DIR)/src/ctype/iswalnum.c \
$(MUSL_DIR)/src/ctype/iswalpha.c \
$(MUSL_DIR)/src/ctype/iswblank.c \
$(MUSL_DIR)/src/ctype/iswcntrl.c \
$(MUSL_DIR)/src/ctype/iswctype.c \
$(MUSL_DIR)/src/ctype/iswdigit.c \
$(MUSL_DIR)/src/ctype/iswgraph.c \
$(MUSL_DIR)/src/ctype/iswlower.c \
$(MUSL_DIR)/src/ctype/iswprint.c \
$(MUSL_DIR)/src/ctype/iswpunct.c \
$(MUSL_DIR)/src/ctype/iswspace.c \
$(MUSL_DIR)/src/ctype/iswupper.c \
$(MUSL_DIR)/src/ctype/iswxdigit.c \
$(MUSL_DIR)/src/ctype/isxdigit.c \
$(MUSL_DIR)/src/ctype/toascii.c \
$(MUSL_DIR)/src/ctype/tolower.c \
$(MUSL_DIR)/src/ctype/toupper.c \
$(MUSL_DIR)/src/ctype/towctrans.c \
$(MUSL_DIR)/src/ctype/wcswidth.c \
$(MUSL_DIR)/src/ctype/wctrans.c \
$(MUSL_DIR)/src/ctype/wcwidth.c \
$(MUSL_DIR)/src/errno/strerror.c \
$(MUSL_DIR)/src/errno/__errno_location.c \
$(MUSL_DIR)/src/exit/abort.c \
$(MUSL_DIR)/src/exit/assert.c \
$(MUSL_DIR)/src/exit/atexit.c \
$(MUSL_DIR)/src/exit/exit.c \
$(MUSL_DIR)/src/exit/_Exit.c \
$(MUSL_DIR)/src/multibyte/btowc.c \
$(MUSL_DIR)/src/multibyte/c16rtomb.c \
$(MUSL_DIR)/src/multibyte/c32rtomb.c \
$(MUSL_DIR)/src/multibyte/internal.c \
$(MUSL_DIR)/src/multibyte/mblen.c \
$(MUSL_DIR)/src/multibyte/mbrlen.c \
$(MUSL_DIR)/src/multibyte/mbrtoc16.c \
$(MUSL_DIR)/src/multibyte/mbrtoc32.c \
$(MUSL_DIR)/src/multibyte/mbrtowc.c \
$(MUSL_DIR)/src/multibyte/mbsinit.c \
$(MUSL_DIR)/src/multibyte/mbsnrtowcs.c \
$(MUSL_DIR)/src/multibyte/mbsrtowcs.c \
$(MUSL_DIR)/src/multibyte/mbstowcs.c \
$(MUSL_DIR)/src/multibyte/mbtowc.c \
$(MUSL_DIR)/src/multibyte/wcrtomb.c \
$(MUSL_DIR)/src/multibyte/wcsnrtombs.c \
$(MUSL_DIR)/src/multibyte/wcsrtombs.c \
$(MUSL_DIR)/src/multibyte/wcstombs.c \
$(MUSL_DIR)/src/multibyte/wctob.c \
$(MUSL_DIR)/src/multibyte/wctomb.c \
$(MUSL_DIR)/src/network/htonl.c \
$(MUSL_DIR)/src/network/htons.c \
$(MUSL_DIR)/src/network/ntohl.c \
$(MUSL_DIR)/src/network/ntohs.c \
$(MUSL_DIR)/src/prng/rand.c \
$(MUSL_DIR)/src/stdlib/abs.c \
$(MUSL_DIR)/src/stdlib/atof.c \
$(MUSL_DIR)/src/stdlib/atoi.c \
$(MUSL_DIR)/src/stdlib/atol.c \
$(MUSL_DIR)/src/stdlib/atoll.c \
$(MUSL_DIR)/src/stdlib/bsearch.c \
$(MUSL_DIR)/src/stdlib/div.c \
$(MUSL_DIR)/src/stdlib/ecvt.c \
$(MUSL_DIR)/src/stdlib/fcvt.c \
$(MUSL_DIR)/src/stdlib/gcvt.c \
$(MUSL_DIR)/src/stdlib/imaxabs.c \
$(MUSL_DIR)/src/stdlib/imaxdiv.c \
$(MUSL_DIR)/src/stdlib/labs.c \
$(MUSL_DIR)/src/stdlib/ldiv.c \
$(MUSL_DIR)/src/stdlib/llabs.c \
$(MUSL_DIR)/src/stdlib/lldiv.c \
$(MUSL_DIR)/src/stdlib/qsort.c \
$(MUSL_DIR)/src/stdlib/strtod.c \
$(MUSL_DIR)/src/stdlib/strtol.c \
$(MUSL_DIR)/src/stdlib/wcstod.c \
$(MUSL_DIR)/src/stdlib/wcstol.c \
$(MUSL_DIR)/src/string/bcmp.c \
$(MUSL_DIR)/src/string/memccpy.c \
$(MUSL_DIR)/src/string/memchr.c \
$(MUSL_DIR)/src/string/memcmp.c \
$(MUSL_DIR)/src/string/memcpy.c \
$(MUSL_DIR)/src/string/memmem.c \
$(MUSL_DIR)/src/string/memmove.c \
$(MUSL_DIR)/src/string/mempcpy.c \
$(MUSL_DIR)/src/string/memrchr.c \
$(MUSL_DIR)/src/string/memset.c \
$(MUSL_DIR)/src/string/stpcpy.c \
$(MUSL_DIR)/src/string/stpncpy.c \
$(MUSL_DIR)/src/string/strcasecmp.c \
$(MUSL_DIR)/src/string/strcasestr.c \
$(MUSL_DIR)/src/string/strcat.c \
$(MUSL_DIR)/src/string/strchr.c \
$(MUSL_DIR)/src/string/strchrnul.c \
$(MUSL_DIR)/src/string/strcmp.c \
$(MUSL_DIR)/src/string/strcpy.c \
$(MUSL_DIR)/src/string/strcspn.c \
$(MUSL_DIR)/src/string/strdup.c \
$(MUSL_DIR)/src/string/strerror_r.c \
$(MUSL_DIR)/src/string/strlen.c \
$(MUSL_DIR)/src/string/strncasecmp.c \
$(MUSL_DIR)/src/string/strncat.c \
$(MUSL_DIR)/src/string/strncmp.c \
$(MUSL_DIR)/src/string/strncpy.c \
$(MUSL_DIR)/src/string/strndup.c \
$(MUSL_DIR)/src/string/strnlen.c \
$(MUSL_DIR)/src/string/strpbrk.c \
$(MUSL_DIR)/src/string/strrchr.c \
$(MUSL_DIR)/src/string/strsep.c \
$(MUSL_DIR)/src/string/strsignal.c \
$(MUSL_DIR)/src/string/strspn.c \
$(MUSL_DIR)/src/string/strstr.c \
$(MUSL_DIR)/src/string/strtok.c \
$(MUSL_DIR)/src/string/strtok_r.c \
$(MUSL_DIR)/src/string/strverscmp.c \
$(MUSL_DIR)/src/string/swab.c \
$(MUSL_DIR)/src/string/wcpcpy.c \
$(MUSL_DIR)/src/string/wcpncpy.c \
$(MUSL_DIR)/src/string/wcscasecmp.c \
$(MUSL_DIR)/src/string/wcscasecmp_l.c \
$(MUSL_DIR)/src/string/wcscat.c \
$(MUSL_DIR)/src/string/wcschr.c \
$(MUSL_DIR)/src/string/wcscmp.c \
$(MUSL_DIR)/src/string/wcscpy.c \
$(MUSL_DIR)/src/string/wcscspn.c \
$(MUSL_DIR)/src/string/wcsdup.c \
$(MUSL_DIR)/src/string/wcslen.c \
$(MUSL_DIR)/src/string/wcsncasecmp.c \
$(MUSL_DIR)/src/string/wcsncasecmp_l.c \
$(MUSL_DIR)/src/string/wcsncat.c \
$(MUSL_DIR)/src/string/wcsncmp.c \
$(MUSL_DIR)/src/string/wcsncpy.c \
$(MUSL_DIR)/src/string/wcsnlen.c \
$(MUSL_DIR)/src/string/wcspbrk.c \
$(MUSL_DIR)/src/string/wcsrchr.c \
$(MUSL_DIR)/src/string/wcsspn.c \
$(MUSL_DIR)/src/string/wcsstr.c \
$(MUSL_DIR)/src/string/wcstok.c \
$(MUSL_DIR)/src/string/wcswcs.c \
$(MUSL_DIR)/src/string/wmemchr.c \
$(MUSL_DIR)/src/string/wmemcmp.c \
$(MUSL_DIR)/src/string/wmemcpy.c \
$(MUSL_DIR)/src/string/wmemmove.c \
$(MUSL_DIR)/src/string/wmemset.c \
$(MUSL_DIR)/src/stdio/asprintf.c \
$(MUSL_DIR)/src/stdio/fclose.c \
$(MUSL_DIR)/src/stdio/fflush.c \
$(MUSL_DIR)/src/stdio/fileno.c \
$(MUSL_DIR)/src/stdio/fputc.c \
$(MUSL_DIR)/src/stdio/fputs.c \
$(MUSL_DIR)/src/stdio/fprintf.c \
$(MUSL_DIR)/src/stdio/fread.c \
$(MUSL_DIR)/src/stdio/fseek.c \
$(MUSL_DIR)/src/stdio/ftell.c \
$(MUSL_DIR)/src/stdio/fwrite.c \
$(MUSL_DIR)/src/stdio/getc.c \
$(MUSL_DIR)/src/stdio/ofl.c \
$(MUSL_DIR)/src/stdio/printf.c \
$(MUSL_DIR)/src/stdio/putc_unlocked.c \
$(MUSL_DIR)/src/stdio/putchar.c \
$(MUSL_DIR)/src/stdio/puts.c \
$(MUSL_DIR)/src/stdio/sscanf.c \
$(MUSL_DIR)/src/stdio/snprintf.c \
$(MUSL_DIR)/src/stdio/sprintf.c \
$(MUSL_DIR)/src/stdio/stderr.c \
$(MUSL_DIR)/src/stdio/stdin.c \
$(MUSL_DIR)/src/stdio/stdout.c \
$(MUSL_DIR)/src/stdio/ungetc.c \
$(MUSL_DIR)/src/stdio/vasprintf.c \
$(MUSL_DIR)/src/stdio/vprintf.c \
$(MUSL_DIR)/src/stdio/vfprintf.c \
$(MUSL_DIR)/src/stdio/vsnprintf.c \
$(MUSL_DIR)/src/stdio/vsprintf.c \
$(MUSL_DIR)/src/stdio/vfscanf.c \
$(MUSL_DIR)/src/stdio/vsscanf.c \
$(MUSL_DIR)/src/stdio/__lockfile.c \
$(MUSL_DIR)/src/stdio/__overflow.c \
$(MUSL_DIR)/src/stdio/__stdio_close.c \
$(MUSL_DIR)/src/stdio/__stdio_exit.c \
$(MUSL_DIR)/src/stdio/__stdio_read.c \
$(MUSL_DIR)/src/stdio/__stdio_write.c \
$(MUSL_DIR)/src/stdio/__stdio_seek.c \
$(MUSL_DIR)/src/stdio/__string_read.c \
$(MUSL_DIR)/src/stdio/__toread.c \
$(MUSL_DIR)/src/stdio/__towrite.c \
$(MUSL_DIR)/src/stdio/__uflow.c \
$(MUSL_DIR)/src/thread/__lock.c \
$(MUSL_DIR)/src/thread/__wait.c \
$(MUSL_DIR)/src/thread/default_attr.c \
$(MUSL_DIR)/src/thread/pthread_once.c \
$(MUSL_DIR)/src/thread/pthread_cleanup_push.c \
$(MUSL_DIR)/src/time/gettimeofday.c \
$(MUSL_DIR)/src/time/localtime.c \
$(MUSL_DIR)/src/time/localtime_r.c \
$(MUSL_DIR)/src/time/gmtime.c \
$(MUSL_DIR)/src/time/gmtime_r.c \
$(MUSL_DIR)/src/time/time.c \
$(MUSL_DIR)/src/time/__secs_to_tm.c \
$(MUSL_DIR)/src/unistd/sleep.c \
$(MUSL_DIR)/src/unistd/usleep.c \
# Math
MODULE_SRCS += \
$(MUSL_DIR)/src/math/acos.c \
$(MUSL_DIR)/src/math/acosf.c \
$(MUSL_DIR)/src/math/acosh.c \
$(MUSL_DIR)/src/math/acoshf.c \
$(MUSL_DIR)/src/math/acoshl.c \
$(MUSL_DIR)/src/math/acosl.c \
$(MUSL_DIR)/src/math/asin.c \
$(MUSL_DIR)/src/math/asinf.c \
$(MUSL_DIR)/src/math/asinh.c \
$(MUSL_DIR)/src/math/asinhf.c \
$(MUSL_DIR)/src/math/asinhl.c \
$(MUSL_DIR)/src/math/asinl.c \
$(MUSL_DIR)/src/math/atan2.c \
$(MUSL_DIR)/src/math/atan2f.c \
$(MUSL_DIR)/src/math/atan2l.c \
$(MUSL_DIR)/src/math/atan.c \
$(MUSL_DIR)/src/math/atanf.c \
$(MUSL_DIR)/src/math/atanh.c \
$(MUSL_DIR)/src/math/atanhf.c \
$(MUSL_DIR)/src/math/atanhl.c \
$(MUSL_DIR)/src/math/atanl.c \
$(MUSL_DIR)/src/math/cbrt.c \
$(MUSL_DIR)/src/math/cbrtf.c \
$(MUSL_DIR)/src/math/cbrtl.c \
$(MUSL_DIR)/src/math/ceil.c \
$(MUSL_DIR)/src/math/ceilf.c \
$(MUSL_DIR)/src/math/ceill.c \
$(MUSL_DIR)/src/math/copysign.c \
$(MUSL_DIR)/src/math/copysignf.c \
$(MUSL_DIR)/src/math/copysignl.c \
$(MUSL_DIR)/src/math/__cos.c \
$(MUSL_DIR)/src/math/cos.c \
$(MUSL_DIR)/src/math/__cosdf.c \
$(MUSL_DIR)/src/math/cosf.c \
$(MUSL_DIR)/src/math/cosh.c \
$(MUSL_DIR)/src/math/coshf.c \
$(MUSL_DIR)/src/math/coshl.c \
$(MUSL_DIR)/src/math/__cosl.c \
$(MUSL_DIR)/src/math/cosl.c \
$(MUSL_DIR)/src/math/erf.c \
$(MUSL_DIR)/src/math/erff.c \
$(MUSL_DIR)/src/math/erfl.c \
$(MUSL_DIR)/src/math/exp10.c \
$(MUSL_DIR)/src/math/exp10f.c \
$(MUSL_DIR)/src/math/exp10l.c \
$(MUSL_DIR)/src/math/exp2.c \
$(MUSL_DIR)/src/math/exp2f.c \
$(MUSL_DIR)/src/math/exp2f_data.c \
$(MUSL_DIR)/src/math/exp2l.c \
$(MUSL_DIR)/src/math/exp.c \
$(MUSL_DIR)/src/math/exp_data.c \
$(MUSL_DIR)/src/math/expf.c \
$(MUSL_DIR)/src/math/expl.c \
$(MUSL_DIR)/src/math/expm1.c \
$(MUSL_DIR)/src/math/expm1f.c \
$(MUSL_DIR)/src/math/expm1l.c \
$(MUSL_DIR)/src/math/__expo2.c \
$(MUSL_DIR)/src/math/__expo2f.c \
$(MUSL_DIR)/src/math/fabs.c \
$(MUSL_DIR)/src/math/fabsf.c \
$(MUSL_DIR)/src/math/fabsl.c \
$(MUSL_DIR)/src/math/fdim.c \
$(MUSL_DIR)/src/math/fdimf.c \
$(MUSL_DIR)/src/math/fdiml.c \
$(MUSL_DIR)/src/math/finite.c \
$(MUSL_DIR)/src/math/finitef.c \
$(MUSL_DIR)/src/math/floor.c \
$(MUSL_DIR)/src/math/floorf.c \
$(MUSL_DIR)/src/math/floorl.c \
$(MUSL_DIR)/src/math/fma.c \
$(MUSL_DIR)/src/math/fmaf.c \
$(MUSL_DIR)/src/math/fmal.c \
$(MUSL_DIR)/src/math/fmax.c \
$(MUSL_DIR)/src/math/fmaxf.c \
$(MUSL_DIR)/src/math/fmaxl.c \
$(MUSL_DIR)/src/math/fmin.c \
$(MUSL_DIR)/src/math/fminf.c \
$(MUSL_DIR)/src/math/fminl.c \
$(MUSL_DIR)/src/math/fmod.c \
$(MUSL_DIR)/src/math/fmodf.c \
$(MUSL_DIR)/src/math/fmodl.c \
$(MUSL_DIR)/src/math/__fpclassify.c \
$(MUSL_DIR)/src/math/__fpclassifyf.c \
$(MUSL_DIR)/src/math/__fpclassifyl.c \
$(MUSL_DIR)/src/math/frexp.c \
$(MUSL_DIR)/src/math/frexpf.c \
$(MUSL_DIR)/src/math/frexpl.c \
$(MUSL_DIR)/src/math/hypot.c \
$(MUSL_DIR)/src/math/hypotf.c \
$(MUSL_DIR)/src/math/hypotl.c \
$(MUSL_DIR)/src/math/ilogb.c \
$(MUSL_DIR)/src/math/ilogbf.c \
$(MUSL_DIR)/src/math/ilogbl.c \
$(MUSL_DIR)/src/math/__invtrigl.c \
$(MUSL_DIR)/src/math/j0.c \
$(MUSL_DIR)/src/math/j0f.c \
$(MUSL_DIR)/src/math/j1.c \
$(MUSL_DIR)/src/math/j1f.c \
$(MUSL_DIR)/src/math/jn.c \
$(MUSL_DIR)/src/math/jnf.c \
$(MUSL_DIR)/src/math/ldexp.c \
$(MUSL_DIR)/src/math/ldexpf.c \
$(MUSL_DIR)/src/math/ldexpl.c \
$(MUSL_DIR)/src/math/lgamma.c \
$(MUSL_DIR)/src/math/lgammaf.c \
$(MUSL_DIR)/src/math/lgammaf_r.c \
$(MUSL_DIR)/src/math/lgammal.c \
$(MUSL_DIR)/src/math/lgamma_r.c \
$(MUSL_DIR)/src/math/llrint.c \
$(MUSL_DIR)/src/math/llrintf.c \
$(MUSL_DIR)/src/math/llrintl.c \
$(MUSL_DIR)/src/math/llround.c \
$(MUSL_DIR)/src/math/llroundf.c \
$(MUSL_DIR)/src/math/llroundl.c \
$(MUSL_DIR)/src/math/log10.c \
$(MUSL_DIR)/src/math/log10f.c \
$(MUSL_DIR)/src/math/log10l.c \
$(MUSL_DIR)/src/math/log1p.c \
$(MUSL_DIR)/src/math/log1pf.c \
$(MUSL_DIR)/src/math/log1pl.c \
$(MUSL_DIR)/src/math/log2.c \
$(MUSL_DIR)/src/math/log2_data.c \
$(MUSL_DIR)/src/math/log2f.c \
$(MUSL_DIR)/src/math/log2f_data.c \
$(MUSL_DIR)/src/math/log2l.c \
$(MUSL_DIR)/src/math/logb.c \
$(MUSL_DIR)/src/math/logbf.c \
$(MUSL_DIR)/src/math/logbl.c \
$(MUSL_DIR)/src/math/log.c \
$(MUSL_DIR)/src/math/log_data.c \
$(MUSL_DIR)/src/math/logf.c \
$(MUSL_DIR)/src/math/logf_data.c \
$(MUSL_DIR)/src/math/logl.c \
$(MUSL_DIR)/src/math/lrint.c \
$(MUSL_DIR)/src/math/lrintf.c \
$(MUSL_DIR)/src/math/lrintl.c \
$(MUSL_DIR)/src/math/lround.c \
$(MUSL_DIR)/src/math/lroundf.c \
$(MUSL_DIR)/src/math/lroundl.c \
$(MUSL_DIR)/src/math/__math_divzero.c \
$(MUSL_DIR)/src/math/__math_divzerof.c \
$(MUSL_DIR)/src/math/__math_invalid.c \
$(MUSL_DIR)/src/math/__math_invalidf.c \
$(MUSL_DIR)/src/math/__math_oflow.c \
$(MUSL_DIR)/src/math/__math_oflowf.c \
$(MUSL_DIR)/src/math/__math_uflow.c \
$(MUSL_DIR)/src/math/__math_uflowf.c \
$(MUSL_DIR)/src/math/__math_xflow.c \
$(MUSL_DIR)/src/math/__math_xflowf.c \
$(MUSL_DIR)/src/math/modf.c \
$(MUSL_DIR)/src/math/modff.c \
$(MUSL_DIR)/src/math/modfl.c \
$(MUSL_DIR)/src/math/nan.c \
$(MUSL_DIR)/src/math/nanf.c \
$(MUSL_DIR)/src/math/nanl.c \
$(MUSL_DIR)/src/math/nearbyint.c \
$(MUSL_DIR)/src/math/nearbyintf.c \
$(MUSL_DIR)/src/math/nearbyintl.c \
$(MUSL_DIR)/src/math/nextafter.c \
$(MUSL_DIR)/src/math/nextafterf.c \
$(MUSL_DIR)/src/math/nextafterl.c \
$(MUSL_DIR)/src/math/nexttoward.c \
$(MUSL_DIR)/src/math/nexttowardf.c \
$(MUSL_DIR)/src/math/nexttowardl.c \
$(MUSL_DIR)/src/math/__polevll.c \
$(MUSL_DIR)/src/math/pow.c \
$(MUSL_DIR)/src/math/pow_data.c \
$(MUSL_DIR)/src/math/powf.c \
$(MUSL_DIR)/src/math/powf_data.c \
$(MUSL_DIR)/src/math/powl.c \
$(MUSL_DIR)/src/math/remainder.c \
$(MUSL_DIR)/src/math/remainderf.c \
$(MUSL_DIR)/src/math/remainderl.c \
$(MUSL_DIR)/src/math/__rem_pio2.c \
$(MUSL_DIR)/src/math/__rem_pio2f.c \
$(MUSL_DIR)/src/math/__rem_pio2_large.c \
$(MUSL_DIR)/src/math/__rem_pio2l.c \
$(MUSL_DIR)/src/math/remquo.c \
$(MUSL_DIR)/src/math/remquof.c \
$(MUSL_DIR)/src/math/remquol.c \
$(MUSL_DIR)/src/math/rint.c \
$(MUSL_DIR)/src/math/rintf.c \
$(MUSL_DIR)/src/math/rintl.c \
$(MUSL_DIR)/src/math/round.c \
$(MUSL_DIR)/src/math/roundf.c \
$(MUSL_DIR)/src/math/roundl.c \
$(MUSL_DIR)/src/math/scalb.c \
$(MUSL_DIR)/src/math/scalbf.c \
$(MUSL_DIR)/src/math/scalbln.c \
$(MUSL_DIR)/src/math/scalblnf.c \
$(MUSL_DIR)/src/math/scalblnl.c \
$(MUSL_DIR)/src/math/scalbn.c \
$(MUSL_DIR)/src/math/scalbnf.c \
$(MUSL_DIR)/src/math/scalbnl.c \
$(MUSL_DIR)/src/math/__signbit.c \
$(MUSL_DIR)/src/math/__signbitf.c \
$(MUSL_DIR)/src/math/__signbitl.c \
$(MUSL_DIR)/src/math/signgam.c \
$(MUSL_DIR)/src/math/significand.c \
$(MUSL_DIR)/src/math/significandf.c \
$(MUSL_DIR)/src/math/__sin.c \
$(MUSL_DIR)/src/math/sin.c \
$(MUSL_DIR)/src/math/sincos.c \
$(MUSL_DIR)/src/math/sincosf.c \
$(MUSL_DIR)/src/math/sincosl.c \
$(MUSL_DIR)/src/math/__sindf.c \
$(MUSL_DIR)/src/math/sinf.c \
$(MUSL_DIR)/src/math/sinh.c \
$(MUSL_DIR)/src/math/sinhf.c \
$(MUSL_DIR)/src/math/sinhl.c \
$(MUSL_DIR)/src/math/__sinl.c \
$(MUSL_DIR)/src/math/sinl.c \
$(MUSL_DIR)/src/math/sqrt.c \
$(MUSL_DIR)/src/math/sqrtf.c \
$(MUSL_DIR)/src/math/sqrtl.c \
$(MUSL_DIR)/src/math/__tan.c \
$(MUSL_DIR)/src/math/tan.c \
$(MUSL_DIR)/src/math/__tandf.c \
$(MUSL_DIR)/src/math/tanf.c \
$(MUSL_DIR)/src/math/tanh.c \
$(MUSL_DIR)/src/math/tanhf.c \
$(MUSL_DIR)/src/math/tanhl.c \
$(MUSL_DIR)/src/math/__tanl.c \
$(MUSL_DIR)/src/math/tanl.c \
$(MUSL_DIR)/src/math/tgamma.c \
$(MUSL_DIR)/src/math/tgammaf.c \
$(MUSL_DIR)/src/math/tgammal.c \
$(MUSL_DIR)/src/math/trunc.c \
$(MUSL_DIR)/src/math/truncf.c \
$(MUSL_DIR)/src/math/truncl.c \
# Locale
MODULE_SRCS += \
$(MUSL_DIR)/src/locale/bind_textdomain_codeset.c \
$(MUSL_DIR)/src/locale/catclose.c \
$(MUSL_DIR)/src/locale/catgets.c \
$(MUSL_DIR)/src/locale/catopen.c \
$(MUSL_DIR)/src/locale/c_locale.c \
$(MUSL_DIR)/src/locale/iconv.c \
$(MUSL_DIR)/src/locale/iconv_close.c \
$(MUSL_DIR)/src/locale/langinfo.c \
$(MUSL_DIR)/src/locale/__lctrans.c \
$(MUSL_DIR)/src/locale/localeconv.c \
$(MUSL_DIR)/src/locale/__mo_lookup.c \
$(MUSL_DIR)/src/locale/pleval.c \
$(MUSL_DIR)/src/locale/strcoll.c \
$(MUSL_DIR)/src/locale/strfmon.c \
$(MUSL_DIR)/src/locale/strxfrm.c \
$(MUSL_DIR)/src/locale/textdomain.c \
$(MUSL_DIR)/src/locale/wcscoll.c \
$(MUSL_DIR)/src/locale/wcsxfrm.c \
# Uses VLAs.
# $(MUSL_DIR)/src/locale/dcngettext.c \
# Implicitly loads files, stub out.
# $(MUSL_DIR)/src/locale/duplocale.c \
# $(MUSL_DIR)/src/locale/freelocale.c \
# $(MUSL_DIR)/src/locale/locale_map.c \
# $(MUSL_DIR)/src/locale/newlocale.c \
# $(MUSL_DIR)/src/locale/setlocale.c \
# $(MUSL_DIR)/src/locale/uselocale.c \
# Turn on the stack protector, except in libc.
# TODO extract the early startup code from this module and turn on the stack
# protector for most of libc.
GLOBAL_COMPILEFLAGS += -fstack-protector-strong
MODULE_COMPILEFLAGS += -fno-stack-protector
MODULE_SRCS += $(MUSL_DIR)/src/env/__stack_chk_fail.c
# Defined by kernel/lib/ubsan/enable.mk if in use for the build
ifeq ($(UBSAN_ENABLED), true)
MODULE_DEPS += trusty/kernel/lib/ubsan
endif
# Add Trusty libc extensions (separated due to use both in the kernel and here)
MODULE_DEPS += trusty/kernel/lib/libc-ext
# Add dependency on syscall-stubs
include trusty/user/base/lib/syscall-stubs/add-dependency-inc.mk
include make/module.mk