mirror of
https://github.com/apache/nuttx.git
synced 2026-08-03 05:09:00 +00:00
NuttX defines constants for the sizes of types just as constants directly in the code. The real values depend on compiler and target platform. It is possible that value declared by NuttX header is wrong compared to the compiler configuration. This is more likely in case of floating points. Not all compilers supported by NuttX provide required info through defines and thus it is more generic to specify limits as constants, but in case compiler provides them then it is a good idea to compare. This commit adds such set of comparisons for limits.h and float.h constants. The comparisons were tested with GCC and Clang. They will be ignored in case compiler doesn't provide them. Signed-off-by: Karel Kočí <kkoci@elektroline.cz>
236 lines
6.3 KiB
Makefile
236 lines
6.3 KiB
Makefile
############################################################################
|
|
# 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 elf/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
|
|
|
|
CSRCS += limits_check.c
|
|
|
|
# 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_LIBC_ELF_SYSTEM_SYMTAB),y)
|
|
|
|
elf_sys_symtab.c : $(CSVFILES) $(MKSYMTAB)
|
|
$(Q) cat $(CSVFILES) | LC_ALL=C sort >$@.csv
|
|
$(Q) $(MKSYMTAB) $@.csv $@ $(CONFIG_LIBC_ELF_SYMTAB_ARRAY) $(CONFIG_LIBC_ELF_NSYMBOLS_VAR)
|
|
$(Q) rm -f $@.csv
|
|
|
|
CSRCS += elf_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
|
|
|
|
bin:
|
|
$(Q) mkdir $@
|
|
|
|
kbin:
|
|
$(Q) mkdir $@
|
|
|
|
context:: bin kbin
|
|
ifeq ($(CONFIG_LIBC_ZONEINFO_ROMFS),y)
|
|
$(Q) $(MAKE) -C zoneinfo context BIN=$(BIN)
|
|
endif
|
|
ifeq ($(CONFIG_LIBC_ELF),y)
|
|
$(Q) $(MAKE) -C elf context
|
|
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 zoneinfo clean BIN=$(BIN)
|
|
$(Q) $(MAKE) -C elf clean
|
|
$(call DELFILE, $(BIN))
|
|
$(call DELFILE, $(KBIN))
|
|
$(call CLEAN)
|
|
|
|
# Deep clean -- removes all traces of the configuration
|
|
|
|
distclean:: clean
|
|
$(Q) $(MAKE) -C zoneinfo distclean BIN=$(BIN)
|
|
$(Q) $(MAKE) -C elf distclean
|
|
$(call DELFILE, exec_symtab.c)
|
|
$(call DELFILE, $(CSRCS:.c=.ddc) $(ASRCS:.S=.dds))
|
|
$(call DELFILE, .depend)
|
|
$(call DELDIR, bin)
|
|
$(call DELDIR, kbin)
|
|
|
|
-include bin$(DELIM)Make.dep
|
|
-include kbin$(DELIM)Make.dep
|