nuttx/libs/libc/misc/Make.defs
Liam Hickey 13ba91a33f arch/*/src/Makefile: Avoid uncessary relinking of the nuttx binary.
The goal is to only execute recipes when there is an actual change in
the prerequisites.

There are several issues which cause the nuttx binary target to be
re-made every time the top level make is run.

1. Previously the target nuttx$(EXEEXT), was used, but make resolved
this in the relative directory make -C $(ARCH_SRC), and couldn’t find
it (need an absolute path: `$(TOPDIR)/..).

2. The .tmp prerequisite for nuttx was always deleted

3. libboard's recipe had a sub-make which may or may not update that
target. This was a phony target, and was therefore always considered out
of date.

These issues were causing the nuttx recipe to be run every make, which
was hiding some missing prerequisites:

1. the .config is a prerequisite for the .tmp target
2. libapps.a (and other linklibs) are pre-requisites for nuttx

Changes:

The changes are only in the build system, and only for arm.

Track nuttx$(EXEEXT) via vpath so Make knows when it's already up to
date without an explicit path. Add $(TOPDIR)/.config as a dependency
to the linker script preprocessing so config changes trigger
re-preprocessing.

Keep the .tmp linker script on disk (clean already removes it) so
timestamp-based dependency checking works across builds. These .tmp
files need to be added to the gitignore or the CI will complain.

Use FORCE pattern for board/libboard to ensure it's always checked
but use the actual library file as the link dependency so nuttx is
only re-linked when library content changes. Add staging libs as
dependency to nuttx link rule so changed app libs trigger re-link.

Signed-off-by: Liam Hickey <williamhickey@geotab.com>
2026-05-18 09:33:58 +02:00

101 lines
3 KiB
Text

############################################################################
# libs/libc/misc/Make.defs
#
# 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.
#
############################################################################
# Add the internal C files to the build
CSRCS += lib_bitmap.c lib_circbuf.c lib_creat.c lib_mknod.c lib_umask.c
CSRCS += lib_utsname.c lib_getrandom.c lib_xorshift128.c lib_tea_encrypt.c
CSRCS += lib_tea_decrypt.c lib_cxx_initialize.c lib_impure.c lib_memfd.c
CSRCS += lib_mutex.c lib_fchmodat.c lib_fstatat.c lib_getfullpath.c
CSRCS += lib_openat.c lib_mkdirat.c lib_utimensat.c lib_mallopt.c
CSRCS += lib_idr.c lib_getnprocs.c
ifeq ($(CONFIG_LIBC_TEMPBUFFER),y)
CSRCS += lib_tempbuffer.c
endif
# Support for platforms that do not have long long types
CSRCS += lib_umul32.c lib_umul64.c lib_umul32x64.c
CSRCS += lib_uadd32x64.c lib_uadd64.c lib_usub64x32.c lib_usub64.c
ifeq ($(CONFIG_PIPES),y)
CSRCS += lib_mkfifo.c
endif
# Add the miscellaneous C files to the build
CSRCS += lib_dumpbuffer.c lib_dumpvbuffer.c lib_fnmatch.c lib_debug.c
CSRCS += lib_crc64.c lib_crc32.c lib_crc16.c lib_crc16ccitt.c
CSRCS += lib_crc8.c lib_crc8ccitt.c lib_crc8table.c lib_crc8rohc.c
CSRCS += lib_crc8h1d.c lib_crc8h2f.c lib_crc16h1021.c lib_crc16h8005.c
CSRCS += lib_crc32h04c11db7.c lib_crc32hf4acfb13.c lib_crc64emac.c
CSRCS += lib_backtrace.c lib_ftok.c lib_err.c lib_instrument.c lib_glob.c
CSRCS += lib_crc16ibm.c lib_crc16xmodem.c
# Keyboard driver encoder/decoder
ifeq ($(CONFIG_LIBC_KBDCODEC),y)
CSRCS += lib_kbdencode.c lib_kbddecode.c
endif
# SLCD driver encoder/decoder
ifeq ($(CONFIG_LIBC_SLCDCODEC),y)
CSRCS += lib_slcdencode.c lib_slcddecode.c
endif
# Environment search path support
ifeq ($(CONFIG_LIBC_ENVPATH),y)
CSRCS += lib_envpath.c
endif
# Fdsan support
ifeq ($(CONFIG_FDSAN),y)
CSRCS += lib_fdsan.c
endif
# Fdcheck support
ifeq ($(CONFIG_FDCHECK),y)
CSRCS += lib_fdcheck.c
endif
# Note support
ifeq ($(CONFIG_SCHED_INSTRUMENTATION_DUMP),y)
CSRCS += lib_note.c
endif
# To ensure uname information is newest,
# add lib_utsname.o to phony target for force rebuild
ifeq ($(CONFIG_LIBC_UNAME_DISABLE_TIMESTAMP),)
.PHONY: bin$(DELIM)lib_utsname$(OBJEXT) kbin$(DELIM)lib_utsname$(OBJEXT)
endif
# Add the misc directory to the build
DEPPATH += --dep-path misc
VPATH += :misc