2 # Copyright (C) 2019 The Android-x86 Open Source Project
4 # Licensed under the standard MIT license.
5 # See the COPYRIGHT in the same directory.
8 LOCAL_PATH := $(call my-dir)
12 LOCAL_MODULE := libc-musl
13 LOCAL_CC := $(TARGET_CC)
15 include $(LOCAL_PATH)/common.mk
17 MUSL_ARCH := $(TARGET_ARCH)
18 MUSL_SRC_DIRS := $(addprefix $(LOCAL_PATH)/,src/* crt ldso)
19 MUSL_BASE_SRCS := $(sort $(wildcard $(addsuffix /*.c,$(MUSL_SRC_DIRS))))
20 MUSL_ARCH_SRCS := $(sort $(wildcard $(addsuffix /$(MUSL_ARCH)/*.[csS],$(MUSL_SRC_DIRS))))
21 MUSL_REPLACED_SRCS := $(addsuffix .c,$(subst $(MUSL_ARCH)/,,$(basename $(MUSL_ARCH_SRCS))))
22 MUSL_LDSO_PATHNAME := $(TARGET_OUT_VENDOR_SHARED_LIBRARIES)/$(LOCAL_MODULE).so
23 MUSL_EMPTY_LIB_NAMES := m rt pthread crypt util xnet resolv dl
25 MUSL_SRC_FILES := $(subst $(LOCAL_PATH)/,,$(filter-out $(MUSL_REPLACED_SRCS),$(MUSL_BASE_SRCS)) $(MUSL_ARCH_SRCS))
26 MUSL_CRT_SRCS := $(filter crt/%,$(MUSL_SRC_FILES))
27 LOCAL_SRC_FILES := $(filter-out $(MUSL_CRT_SRCS),$(MUSL_SRC_FILES))
29 LOCAL_C_INCLUDES := $(addprefix $(LOCAL_PATH)/, \
36 LOCAL_CFLAGS := -std=c99 -nostdinc \
37 -ffreestanding -fexcess-precision=standard -frounding-math \
38 -Wa,--noexecstack -D_XOPEN_SOURCE=700 -fomit-frame-pointer \
39 -fno-unwind-tables -fno-asynchronous-unwind-tables \
40 -ffunction-sections -fdata-sections \
41 -Werror=implicit-function-declaration -Werror=implicit-int \
42 -Werror=pointer-sign -Werror=pointer-arith -fno-stack-protector \
45 intermediates := $(call local-intermediates-dir)
46 MUSL_LIBC_SYS := $(intermediates)
48 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_C_INCLUDES)
50 LOCAL_GENERATED_SOURCES := \
51 $(intermediates)/bits/alltypes.h \
52 $(intermediates)/bits/syscall.h \
53 $(intermediates)/version.h
55 $(intermediates)/bits/alltypes.h: $(LOCAL_PATH)/tools/mkalltypes.sed $(LOCAL_PATH)/arch/$(MUSL_ARCH)/bits/alltypes.h.in $(LOCAL_PATH)/include/alltypes.h.in
58 $(intermediates)/bits/syscall.h: $(LOCAL_PATH)/arch/$(MUSL_ARCH)/bits/syscall.h.in | $(ACP)
60 sed -n -e s/__NR_/SYS_/p < $< >> $@
62 $(intermediates)/version.h: $(wildcard $(LOCAL_PATH)/VERSION $(LOCAL_PATH)/.git)
63 echo "#define VERSION \"$$(cd $(<D); sh tools/version.sh)\"" > $@
65 MUSL_CRT_OBJS := $(addsuffix .o,$(basename $(MUSL_CRT_SRCS:%=$(intermediates)/%)))
66 $(MUSL_CRT_OBJS): PRIVATE_CFLAGS := $(LOCAL_CFLAGS) $(addprefix -I,$(intermediates) $(LOCAL_C_INCLUDES)) -DCRT
67 $(filter $(intermediates)/crt/$(MUSL_ARCH)/%.o,$(MUSL_CRT_OBJS)): $(intermediates)/%.o: $(LOCAL_PATH)/%.s
68 $(TARGET_CC) $(PRIVATE_CFLAGS) -o $@ -c $< && ln -sf crt/$(MUSL_ARCH)/$(@F) $(@D)/../..
69 $(filter-out $(intermediates)/crt/$(MUSL_ARCH)/%.o,$(MUSL_CRT_OBJS)): $(intermediates)/%.o: $(LOCAL_PATH)/%.c
70 $(TARGET_CC) $(PRIVATE_CFLAGS) $(if $(filter %/crt1.c,$<),,-fPIC) -o $@ -c $< && ln -sf crt/$(@F) $(@D)/..
72 LOCAL_ADDITIONAL_DEPENDENCIES := $(MUSL_CRT_OBJS)
77 -Wl,--hash-style=both \
79 -Wl,--exclude-libs=ALL \
80 -Wl,--dynamic-list=$(LOCAL_PATH)/dynamic.list \
83 LOCAL_POST_INSTALL_CMD := ln -sf $(LOCAL_MODULE).so $(MUSL_LIBC_SYS)/libc.so
85 include $(BUILD_SHARED_LIBRARY)
89 LOCAL_MODULE := musl-gcc
90 LOCAL_MODULE_CLASS := EXECUTABLES
91 LOCAL_IS_HOST_MODULE := true
93 intermediates := $(call local-generated-sources-dir)
94 MUSL_GCC_SPECS := $(intermediates)/$(LOCAL_MODULE).specs
95 LOCAL_PREBUILT_MODULE_FILE := $(basename $(MUSL_GCC_SPECS))
96 LOCAL_GENERATED_SOURCES := $(LOCAL_PREBUILT_MODULE_FILE)
98 $(MUSL_GCC_SPECS): $(LOCAL_PATH)/tools/musl-gcc.specs.sh
99 sh $< "$(MUSL_LIBC_SYS)" "$(MUSL_LIBC_SYS)" "$(subst $(PRODUCT_OUT),,$(MUSL_LDSO_PATHNAME))" > $@
101 $(LOCAL_PREBUILT_MODULE_FILE): $(MUSL_GCC_SPECS)
102 echo -e "#!/bin/sh\ncd \$$(dirname \$$0)/../../../..\nexec $(TARGET_CC) \$$(cat $(MUSL_LIBC_SYS)/export_includes) -specs $(MUSL_GCC_SPECS) \"\$$@\"\n" > $@
104 MUSL_EMPTY_LIBS := $(MUSL_EMPTY_LIB_NAMES:%=$(MUSL_LIBC_SYS)/lib%.a)
106 $(hide) rm -f $@; $(LLVM_PREBUILTS_PATH)/llvm-ar rc $@
108 LOCAL_ADDITIONAL_DEPENDENCIES := $(MUSL_EMPTY_LIBS)
110 include $(BUILD_PREBUILT)
112 MUSL_GCC := $(LOCAL_INSTALLED_MODULE)
114 include $(call all-makefiles-under,$(LOCAL_PATH))