| ############################################################################ |
| # libs/libc/Makefile |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. The |
| # ASF licenses this file to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance with the |
| # License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| # License for the specific language governing permissions and limitations |
| # under the License. |
| # |
| ########################################################################### |
| |
| include $(TOPDIR)/Make.defs |
| |
| include aio/Make.defs |
| include assert/Make.defs |
| include audio/Make.defs |
| include builtin/Make.defs |
| include ctype/Make.defs |
| include dirent/Make.defs |
| include dlfcn/Make.defs |
| include errno/Make.defs |
| include eventfd/Make.defs |
| include fixedmath/Make.defs |
| include gdbstub/Make.defs |
| include grp/Make.defs |
| include gnssutils/Make.defs |
| include hex2bin/Make.defs |
| include inttypes/Make.defs |
| include libgen/Make.defs |
| include locale/Make.defs |
| include lzf/Make.defs |
| include machine/Make.defs |
| include misc/Make.defs |
| include modlib/Make.defs |
| include net/Make.defs |
| include netdb/Make.defs |
| include obstack/Make.defs |
| include pthread/Make.defs |
| include pwd/Make.defs |
| include queue/Make.defs |
| include regex/Make.defs |
| include sched/Make.defs |
| include search/Make.defs |
| include semaphore/Make.defs |
| include signal/Make.defs |
| include spawn/Make.defs |
| include stdio/Make.defs |
| include stdlib/Make.defs |
| include stream/Make.defs |
| include string/Make.defs |
| include symtab/Make.defs |
| include syslog/Make.defs |
| include termios/Make.defs |
| include time/Make.defs |
| include tls/Make.defs |
| include uio/Make.defs |
| include unistd/Make.defs |
| include userfs/Make.defs |
| include uuid/Make.defs |
| include wchar/Make.defs |
| include wctype/Make.defs |
| include wqueue/Make.defs |
| include fdt/Make.defs |
| |
| # Use double delim to fix windows native build and give an error: |
| # makefile:132: *** target mode do not include“%”. stop. |
| # |
| # In Windows environment DELIM := $(strip \) but \ has two role: |
| # first: \ as directory, and second \ as Escape character, Reference: |
| # |
| # https://github.com/apache/nuttx/pull/7572#discussion_r1028219229 |
| |
| ifeq ($(CONFIG_WINDOWS_NATIVE),y) |
| DELIMS = $(DELIM)$(DELIM) |
| else |
| DELIMS = $(DELIM) |
| endif |
| |
| CFLAGS += ${INCDIR_PREFIX}$(TOPDIR)$(DELIM)libs$(DELIM)libc |
| AFLAGS += ${INCDIR_PREFIX}$(TOPDIR)$(DELIM)libs$(DELIM)libc |
| |
| # Rule for the symbol table generation |
| |
| MKSYMTAB = $(TOPDIR)$(DELIM)tools$(DELIM)mksymtab$(HOSTEXEEXT) |
| |
| $(MKSYMTAB): |
| $(Q) $(MAKE) -C $(TOPDIR)$(DELIM)tools -f Makefile.host mksymtab |
| |
| # C library and math library symbols should be available in the FLAT |
| # and PROTECTED builds. KERNEL builds are separately linked and so should |
| # not need symbol tables. |
| |
| CSVFILES = $(TOPDIR)$(DELIM)libs$(DELIM)libc$(DELIM)libc.csv |
| CSVFILES += $(TOPDIR)$(DELIM)libs$(DELIM)libm$(DELIM)libm.csv |
| |
| # In the PROTECTED and KERNEL builds, the applications could link with |
| # libproxy which will provide symbol-compatible access to OS functions |
| # via a call gate, but the applications which link with these functions |
| # directly could remove the repeat proxy code to save the space. |
| |
| CSVFILES += $(TOPDIR)$(DELIM)syscall$(DELIM)syscall.csv |
| |
| ifeq ($(CONFIG_EXECFUNCS_SYSTEM_SYMTAB),y) |
| |
| exec_symtab.c : $(CSVFILES) $(MKSYMTAB) |
| $(Q) cat $(CSVFILES) | LC_ALL=C sort >$@.csv |
| $(Q) $(MKSYMTAB) $@.csv $@ $(CONFIG_EXECFUNCS_SYMTAB_ARRAY) $(CONFIG_EXECFUNCS_NSYMBOLS_VAR) |
| $(Q) rm -f $@.csv |
| |
| CSRCS += exec_symtab.c |
| |
| endif |
| |
| ifeq ($(CONFIG_MODLIB_SYSTEM_SYMTAB),y) |
| |
| modlib_sys_symtab.c : $(CSVFILES) $(MKSYMTAB) |
| $(Q) cat $(CSVFILES) | LC_ALL=C sort >$@.csv |
| $(Q) $(MKSYMTAB) $@.csv $@ $(CONFIG_MODLIB_SYMTAB_ARRAY) $(CONFIG_MODLIB_NSYMBOLS_VAR) |
| $(Q) rm -f $@.csv |
| |
| CSRCS += modlib_sys_symtab.c |
| |
| endif |
| |
| BINDIR ?= bin |
| |
| AOBJS = $(patsubst %.S, $(BINDIR)$(DELIMS)%$(OBJEXT), $(ASRCS)) |
| COBJS = $(patsubst %.c, $(BINDIR)$(DELIMS)%$(OBJEXT), $(CSRCS)) |
| |
| SRCS = $(ASRCS) $(CSRCS) |
| OBJS = $(AOBJS) $(COBJS) |
| |
| KBIN = libkc$(LIBEXT) |
| BIN ?= libc$(LIBEXT) |
| |
| all: $(BIN) |
| .PHONY: clean distclean |
| |
| $(AOBJS): $(BINDIR)$(DELIMS)%$(OBJEXT): %.S |
| $(call ASSEMBLE, $<, $@) |
| |
| # REVISIT: Backslash causes problems in $(COBJS) target |
| |
| $(COBJS): $(BINDIR)$(DELIMS)%$(OBJEXT): %.c |
| $(call COMPILE, $<, $@) |
| |
| # C library for the flat build and |
| # the user phase of the two-pass kernel build |
| |
| $(BIN): $(OBJS) |
| $(call ARCHIVE, $@, $(OBJS)) |
| ifeq ($(CONFIG_LIBC_ZONEINFO_ROMFS),y) |
| $(Q) $(MAKE) -C zoneinfo all BIN=$(BIN) |
| endif |
| |
| # C library for the kernel phase of the two-pass kernel build |
| |
| ifneq ($(BIN),$(KBIN)) |
| $(KBIN): $(OBJS) |
| $(Q) $(MAKE) $(KBIN) BIN=$(KBIN) EXTRAFLAGS="$(EXTRAFLAGS)" |
| endif |
| |
| # Context |
| |
| context:: |
| ifeq ($(CONFIG_LIBC_ZONEINFO_ROMFS),y) |
| $(Q) $(MAKE) -C zoneinfo context BIN=$(BIN) |
| endif |
| |
| # Dependencies |
| |
| makedepfile: $(CSRCS:.c=.ddc) $(ASRCS:.S=.dds) |
| $(call CATFILE, bin/Make.dep, $^) |
| $(call DELFILE, $^) |
| |
| makekdepfile: $(CSRCS:.c=.ddc) $(ASRCS:.S=.dds) |
| $(call CATFILE, kbin/Make.dep, $^) |
| $(call DELFILE, $^) |
| |
| .depend: Makefile $(SRCS) $(TOPDIR)$(DELIM).config |
| $(Q) $(MAKE) makedepfile OBJPATH="bin" |
| ifneq ($(CONFIG_BUILD_FLAT),y) |
| $(Q) $(MAKE) makekdepfile CFLAGS="$(CFLAGS) $(KDEFINE)" OBJPATH="kbin" |
| endif |
| ifeq ($(CONFIG_LIBC_ZONEINFO_ROMFS),y) |
| $(Q) $(MAKE) -C zoneinfo depend BIN=$(BIN) |
| endif |
| $(Q) touch $@ |
| |
| depend:: .depend |
| |
| # Clean most derived files, retaining the configuration |
| |
| clean:: |
| $(Q) $(MAKE) -C bin clean |
| $(Q) $(MAKE) -C kbin clean |
| $(Q) $(MAKE) -C zoneinfo clean BIN=$(BIN) |
| $(call DELFILE, $(BIN)) |
| $(call DELFILE, $(KBIN)) |
| $(call CLEAN) |
| |
| # Deep clean -- removes all traces of the configuration |
| |
| distclean:: clean |
| $(Q) $(MAKE) -C bin distclean |
| $(Q) $(MAKE) -C kbin distclean |
| $(Q) $(MAKE) -C zoneinfo distclean BIN=$(BIN) |
| $(call DELFILE, exec_symtab.c) |
| $(call DELFILE, bin$(DELIM)Make.dep) |
| $(call DELFILE, kbin$(DELIM)Make.dep) |
| $(call DELFILE, .depend) |
| |
| -include bin$(DELIM)Make.dep |
| -include kbin$(DELIM)Make.dep |