2012-08-27 16:07:17 +02:00
|
|
|
############################################################################
|
2020-01-19 18:03:11 +01:00
|
|
|
# tools/Config.mk
|
2012-08-27 16:07:17 +02:00
|
|
|
#
|
2021-04-03 09:00:52 +02:00
|
|
|
# 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
|
2012-08-27 16:07:17 +02:00
|
|
|
#
|
2021-04-03 09:00:52 +02:00
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
2012-11-13 21:24:30 +01:00
|
|
|
#
|
2021-04-03 09:00:52 +02:00
|
|
|
# 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.
|
2012-08-27 16:07:17 +02:00
|
|
|
#
|
|
|
|
############################################################################
|
|
|
|
|
2019-09-15 16:48:25 +02:00
|
|
|
# Disable all built-in rules
|
|
|
|
|
|
|
|
.SUFFIXES:
|
|
|
|
|
2018-11-06 13:34:00 +01:00
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
|
|
|
export SHELL=cmd
|
|
|
|
endif
|
|
|
|
|
2020-05-19 10:26:15 +02:00
|
|
|
# Control build verbosity
|
|
|
|
#
|
|
|
|
# V=1,2: Enable echo of commands
|
|
|
|
# V=2: Enable bug/verbose options in tools and scripts
|
|
|
|
|
|
|
|
ifeq ($(V),1)
|
|
|
|
export Q :=
|
|
|
|
else ifeq ($(V),2)
|
|
|
|
export Q :=
|
|
|
|
else
|
|
|
|
export Q := @
|
|
|
|
endif
|
|
|
|
|
2012-08-30 22:13:50 +02:00
|
|
|
# These are configuration variables that are quoted by configuration tool
|
2019-09-11 16:56:56 +02:00
|
|
|
# but which must be unquoted when used in the build system.
|
2012-08-30 22:13:50 +02:00
|
|
|
|
|
|
|
CONFIG_ARCH := $(patsubst "%",%,$(strip $(CONFIG_ARCH)))
|
|
|
|
CONFIG_ARCH_CHIP := $(patsubst "%",%,$(strip $(CONFIG_ARCH_CHIP)))
|
|
|
|
CONFIG_ARCH_BOARD := $(patsubst "%",%,$(strip $(CONFIG_ARCH_BOARD)))
|
2012-09-18 16:06:57 +02:00
|
|
|
|
2020-05-19 08:26:41 +02:00
|
|
|
# Some defaults.
|
|
|
|
# $(TOPDIR)/Make.defs can override these appropriately.
|
|
|
|
|
|
|
|
MODULECC ?= $(CC)
|
|
|
|
MODULELD ?= $(LD)
|
|
|
|
MODULESTRIP ?= $(STRIP)
|
|
|
|
|
2022-10-10 15:42:36 +02:00
|
|
|
# ccache configuration.
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_CCACHE),y)
|
|
|
|
CCACHE ?= ccache
|
|
|
|
endif
|
|
|
|
|
2020-07-12 17:07:42 +02:00
|
|
|
# Define HOSTCC on the make command line if it differs from these defaults
|
|
|
|
# Define HOSTCFLAGS with -g on the make command line to build debug versions
|
|
|
|
|
2022-11-05 11:10:18 +01:00
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
2020-07-12 17:07:42 +02:00
|
|
|
|
|
|
|
# In the Windows native environment, the MinGW GCC compiler is used
|
|
|
|
|
|
|
|
HOSTCC ?= mingw32-gcc.exe
|
|
|
|
HOSTCFLAGS ?= -O2 -Wall -Wstrict-prototypes -Wshadow -DCONFIG_WINDOWS_NATIVE=y
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
# GCC or clang is assumed in all other POSIX environments
|
|
|
|
# (Linux, Cygwin, MSYS2, macOS).
|
|
|
|
# strtok_r is used in some tools, but does not seem to be available in
|
|
|
|
# the MinGW environment.
|
|
|
|
|
|
|
|
HOSTCC ?= cc
|
|
|
|
HOSTCFLAGS ?= -O2 -Wall -Wstrict-prototypes -Wshadow
|
|
|
|
HOSTCFLAGS += -DHAVE_STRTOK_C=1
|
|
|
|
|
2020-10-25 18:26:55 +01:00
|
|
|
ifeq ($(CONFIG_WINDOWS_CYGWIN),y)
|
2020-07-12 17:07:42 +02:00
|
|
|
HOSTCFLAGS += -DHOST_CYGWIN=1
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2012-11-17 19:54:53 +01:00
|
|
|
# Some defaults just to prohibit some bad behavior if for some reason they
|
|
|
|
# are not defined
|
|
|
|
|
2020-05-19 12:29:28 +02:00
|
|
|
ASMEXT ?= .S
|
2012-11-17 19:54:53 +01:00
|
|
|
OBJEXT ?= .o
|
|
|
|
LIBEXT ?= .a
|
|
|
|
|
2020-10-25 18:26:55 +01:00
|
|
|
ifeq ($(CONFIG_WINDOWS_CYGWIN),y)
|
2020-05-19 12:29:28 +02:00
|
|
|
EXEEXT ?= .exe
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_HOST_WINDOWS),y)
|
|
|
|
HOSTEXEEXT ?= .exe
|
2021-10-11 15:38:51 +02:00
|
|
|
HOSTDYNEXT ?= .dll
|
|
|
|
else ifeq ($(CONFIG_HOST_LINUX),y)
|
|
|
|
HOSTDYNEXT ?= .so
|
2020-05-19 12:29:28 +02:00
|
|
|
endif
|
|
|
|
|
2020-05-01 22:29:47 +02:00
|
|
|
# This define is passed as EXTRAFLAGS for kernel-mode builds. It is also passed
|
|
|
|
# during PASS1 (but not PASS2) context and depend targets.
|
|
|
|
|
2022-11-01 14:47:53 +01:00
|
|
|
KDEFINE ?= ${DEFINE_PREFIX}__KERNEL__
|
2020-05-01 22:29:47 +02:00
|
|
|
|
2012-11-16 13:41:58 +01:00
|
|
|
# DELIM - Path segment delimiter character
|
|
|
|
#
|
|
|
|
# Depends on this settings defined in board-specific defconfig file installed
|
|
|
|
# at $(TOPDIR)/.config:
|
|
|
|
#
|
|
|
|
# CONFIG_WINDOWS_NATIVE - Defined for a Windows native build
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
2020-05-19 08:26:41 +02:00
|
|
|
DELIM ?= $(strip \)
|
2012-11-16 13:41:58 +01:00
|
|
|
else
|
2020-05-19 08:26:41 +02:00
|
|
|
DELIM ?= $(strip /)
|
2012-11-16 13:41:58 +01:00
|
|
|
endif
|
|
|
|
|
2022-11-08 04:05:12 +01:00
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
|
|
|
EMPTYFILE := "NUL"
|
|
|
|
else
|
|
|
|
EMPTYFILE := "/dev/null"
|
|
|
|
endif
|
|
|
|
|
2020-10-15 05:29:59 +02:00
|
|
|
# Process chip-specific directories
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_ARCH_CHIP_CUSTOM),y)
|
|
|
|
CUSTOM_CHIP_DIR = $(patsubst "%",%,$(CONFIG_ARCH_CHIP_CUSTOM_DIR))
|
|
|
|
ifeq ($(CONFIG_ARCH_CHIP_CUSTOM_DIR_RELPATH),y)
|
|
|
|
CHIP_DIR ?= $(TOPDIR)$(DELIM)$(CUSTOM_CHIP_DIR)
|
|
|
|
CHIP_KCONFIG = $(TOPDIR)$(DELIM)$(CUSTOM_CHIP_DIR)$(DELIM)Kconfig
|
|
|
|
else
|
|
|
|
CHIP_DIR ?= $(CUSTOM_CHIP_DIR)
|
|
|
|
CHIP_KCONFIG = $(CUSTOM_CHIP_DIR)$(DELIM)Kconfig
|
|
|
|
endif
|
|
|
|
else
|
|
|
|
CHIP_DIR ?= $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)$(CONFIG_ARCH_CHIP)
|
|
|
|
CHIP_KCONFIG = $(TOPDIR)$(DELIM)arch$(DELIM)dummy$(DELIM)dummy_kconfig
|
|
|
|
endif
|
|
|
|
|
2020-05-20 21:41:57 +02:00
|
|
|
# Process board-specific directories
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_ARCH_BOARD_CUSTOM),y)
|
2020-09-16 16:46:20 +02:00
|
|
|
CUSTOM_DIR = $(patsubst "%",%,$(CONFIG_ARCH_BOARD_CUSTOM_DIR))
|
2022-01-24 02:58:30 +01:00
|
|
|
ifeq ($(CONFIG_ARCH_BOARD_CUSTOM_DIR_RELPATH),y)
|
|
|
|
BOARD_DIR ?= $(TOPDIR)$(DELIM)$(CUSTOM_DIR)
|
|
|
|
else
|
|
|
|
BOARD_DIR ?= $(CUSTOM_DIR)
|
|
|
|
endif
|
|
|
|
CUSTOM_BOARD_KPATH = $(BOARD_DIR)$(DELIM)Kconfig
|
2020-05-20 21:41:57 +02:00
|
|
|
else
|
2022-01-24 02:58:30 +01:00
|
|
|
BOARD_DIR ?= $(TOPDIR)$(DELIM)boards$(DELIM)$(CONFIG_ARCH)$(DELIM)$(CONFIG_ARCH_CHIP)$(DELIM)$(CONFIG_ARCH_BOARD)
|
2020-05-20 21:41:57 +02:00
|
|
|
endif
|
2022-01-24 02:58:30 +01:00
|
|
|
ifeq (,$(wildcard $(CUSTOM_BOARD_KPATH)))
|
|
|
|
BOARD_KCONFIG = $(TOPDIR)$(DELIM)boards$(DELIM)dummy$(DELIM)dummy_kconfig
|
2020-05-20 21:41:57 +02:00
|
|
|
else
|
2022-01-24 02:58:30 +01:00
|
|
|
BOARD_KCONFIG = $(CUSTOM_BOARD_KPATH)
|
2020-05-20 21:41:57 +02:00
|
|
|
endif
|
|
|
|
|
2022-03-09 18:15:09 +01:00
|
|
|
ifeq (,$(wildcard $(BOARD_DIR)$(DELIM)..$(DELIM)common))
|
|
|
|
ifeq ($(CONFIG_ARCH_BOARD_COMMON),y)
|
|
|
|
BOARD_COMMON_DIR ?= $(wildcard $(TOPDIR)$(DELIM)boards$(DELIM)$(CONFIG_ARCH)$(DELIM)$(CONFIG_ARCH_CHIP)$(DELIM)common)
|
|
|
|
endif
|
|
|
|
else
|
|
|
|
BOARD_COMMON_DIR ?= $(wildcard $(BOARD_DIR)$(DELIM)..$(DELIM)common)
|
2022-01-19 10:16:11 +01:00
|
|
|
endif
|
2020-05-20 21:41:57 +02:00
|
|
|
BOARD_DRIVERS_DIR ?= $(wildcard $(BOARD_DIR)$(DELIM)..$(DELIM)drivers)
|
2020-05-22 20:22:49 +02:00
|
|
|
ifeq ($(BOARD_DRIVERS_DIR),)
|
|
|
|
BOARD_DRIVERS_DIR = $(TOPDIR)$(DELIM)drivers$(DELIM)dummy
|
|
|
|
endif
|
2020-05-20 21:41:57 +02:00
|
|
|
|
2020-05-19 05:31:48 +02:00
|
|
|
# DIRLINK - Create a directory link in the portable way
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
|
|
|
ifeq ($(CONFIG_WINDOWS_MKLINK),y)
|
|
|
|
DIRLINK ?= $(TOPDIR)$(DELIM)tools$(DELIM)link.bat
|
|
|
|
else
|
|
|
|
DIRLINK ?= $(TOPDIR)$(DELIM)tools$(DELIM)copydir.bat
|
|
|
|
endif
|
|
|
|
DIRUNLINK ?= $(TOPDIR)$(DELIM)tools$(DELIM)unlink.bat
|
|
|
|
else
|
|
|
|
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
|
|
|
|
DIRLINK ?= $(TOPDIR)$(DELIM)tools$(DELIM)copydir.sh
|
|
|
|
else ifeq ($(CONFIG_WINDOWS_MSYS),y)
|
|
|
|
DIRLINK ?= $(TOPDIR)$(DELIM)tools$(DELIM)copydir.sh
|
|
|
|
else
|
|
|
|
DIRLINK ?= $(TOPDIR)$(DELIM)tools$(DELIM)link.sh
|
|
|
|
endif
|
|
|
|
DIRUNLINK ?= $(TOPDIR)$(DELIM)tools$(DELIM)unlink.sh
|
|
|
|
endif
|
|
|
|
|
2020-05-19 06:30:46 +02:00
|
|
|
# MKDEP - Create the depend rule in the portable way
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
|
|
|
MKDEP ?= $(TOPDIR)$(DELIM)tools$(DELIM)mkdeps$(HOSTEXEEXT) --winnative
|
|
|
|
else ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
|
|
|
|
MKDEP ?= $(TOPDIR)$(DELIM)tools$(DELIM)mkwindeps.sh
|
|
|
|
else
|
|
|
|
MKDEP ?= $(TOPDIR)$(DELIM)tools$(DELIM)mkdeps$(HOSTEXEEXT)
|
|
|
|
endif
|
|
|
|
|
2020-11-18 17:44:58 +01:00
|
|
|
# Per-file dependency generation rules
|
|
|
|
|
2020-11-28 14:42:54 +01:00
|
|
|
OBJPATH ?= .
|
|
|
|
|
2020-11-18 17:44:58 +01:00
|
|
|
%.dds: %.S
|
2020-11-28 14:42:54 +01:00
|
|
|
$(Q) $(MKDEP) --obj-path $(OBJPATH) --obj-suffix $(OBJEXT) $(DEPPATH) "$(CC)" -- $(CFLAGS) -- $< > $@
|
2020-11-18 17:44:58 +01:00
|
|
|
|
|
|
|
%.ddc: %.c
|
2020-11-28 14:42:54 +01:00
|
|
|
$(Q) $(MKDEP) --obj-path $(OBJPATH) --obj-suffix $(OBJEXT) $(DEPPATH) "$(CC)" -- $(CFLAGS) -- $< > $@
|
2020-11-18 17:44:58 +01:00
|
|
|
|
|
|
|
%.ddp: %.cpp
|
2020-11-28 14:42:54 +01:00
|
|
|
$(Q) $(MKDEP) --obj-path $(OBJPATH) --obj-suffix $(OBJEXT) $(DEPPATH) "$(CXX)" -- $(CXXFLAGS) -- $< > $@
|
2020-11-18 17:44:58 +01:00
|
|
|
|
|
|
|
%.ddx: %.cxx
|
2020-11-28 14:42:54 +01:00
|
|
|
$(Q) $(MKDEP) --obj-path $(OBJPATH) --obj-suffix $(OBJEXT) $(DEPPATH) "$(CXX)" -- $(CXXFLAGS) -- $< > $@
|
2020-11-18 17:44:58 +01:00
|
|
|
|
|
|
|
%.ddh: %.c
|
2020-11-28 14:42:54 +01:00
|
|
|
$(Q) $(MKDEP) --obj-path $(OBJPATH) --obj-suffix $(OBJEXT) $(DEPPATH) "$(CC)" -- $(HOSTCFLAGS) -- $< > $@
|
2020-11-18 17:44:58 +01:00
|
|
|
|
2012-11-13 21:24:30 +01:00
|
|
|
# INCDIR - Convert a list of directory paths to a list of compiler include
|
2018-05-12 15:42:38 +02:00
|
|
|
# directories
|
2012-11-13 21:24:30 +01:00
|
|
|
# Example: CFFLAGS += ${shell $(INCDIR) [options] "compiler" "dir1" "dir2" "dir2" ...}
|
|
|
|
#
|
|
|
|
# Note that the compiler string and each directory path string must quoted if
|
|
|
|
# they contain spaces or any other characters that might get mangled by the
|
|
|
|
# shell
|
|
|
|
#
|
2019-09-04 01:00:22 +02:00
|
|
|
# Depends on this setting passed as a make command line definition from the
|
2012-11-13 21:24:30 +01:00
|
|
|
# toplevel Makefile:
|
|
|
|
#
|
2013-08-27 17:40:19 +02:00
|
|
|
# TOPDIR - The path to the top level NuttX directory in the form
|
2012-11-13 21:24:30 +01:00
|
|
|
# appropriate for the current build environment
|
|
|
|
#
|
|
|
|
# Depends on this settings defined in board-specific defconfig file installed
|
|
|
|
# at $(TOPDIR)/.config:
|
|
|
|
#
|
|
|
|
# CONFIG_WINDOWS_NATIVE - Defined for a Windows native build
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
2022-11-22 14:21:14 +01:00
|
|
|
DEFINE ?= $(TOPDIR)\tools\define.bat
|
|
|
|
INCDIR ?= $(TOPDIR)\tools\incdir.bat
|
2020-03-26 04:51:22 +01:00
|
|
|
else ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
|
2020-05-19 08:26:41 +02:00
|
|
|
DEFINE ?= "$(TOPDIR)/tools/define.sh" -w
|
2020-05-29 23:50:47 +02:00
|
|
|
INCDIR ?= "$(TOPDIR)/tools/incdir$(HOSTEXEEXT)" -w
|
2012-11-13 21:24:30 +01:00
|
|
|
else
|
2020-05-19 08:26:41 +02:00
|
|
|
DEFINE ?= "$(TOPDIR)/tools/define.sh"
|
2020-05-29 23:50:47 +02:00
|
|
|
INCDIR ?= "$(TOPDIR)/tools/incdir$(HOSTEXEEXT)"
|
2012-11-13 21:24:30 +01:00
|
|
|
endif
|
|
|
|
|
|
|
|
# PREPROCESS - Default macro to run the C pre-processor
|
|
|
|
# Example: $(call PREPROCESS, in-file, out-file)
|
|
|
|
#
|
|
|
|
# Depends on these settings defined in board-specific Make.defs file
|
|
|
|
# installed at $(TOPDIR)/Make.defs:
|
|
|
|
#
|
|
|
|
# CPP - The command to invoke the C pre-processor
|
|
|
|
# CPPFLAGS - Options to pass to the C pre-processor
|
2019-10-03 16:23:22 +02:00
|
|
|
#
|
|
|
|
# '<filename>.c_CPPFLAGS += <options>' may also be used, as an example, to
|
|
|
|
# change the options used with the single file <filename>.c (or
|
|
|
|
# <filename>.S)
|
2012-09-18 16:06:57 +02:00
|
|
|
|
|
|
|
define PREPROCESS
|
|
|
|
@echo "CPP: $1->$2"
|
2019-10-03 14:49:17 +02:00
|
|
|
$(Q) $(CPP) $(CPPFLAGS) $($(strip $1)_CPPFLAGS) $1 -o $2
|
2012-09-18 16:06:57 +02:00
|
|
|
endef
|
|
|
|
|
2012-11-13 21:24:30 +01:00
|
|
|
# COMPILE - Default macro to compile one C file
|
|
|
|
# Example: $(call COMPILE, in-file, out-file)
|
|
|
|
#
|
|
|
|
# Depends on these settings defined in board-specific Make.defs file
|
|
|
|
# installed at $(TOPDIR)/Make.defs:
|
|
|
|
#
|
|
|
|
# CC - The command to invoke the C compiler
|
|
|
|
# CFLAGS - Options to pass to the C compiler
|
2019-10-03 16:23:22 +02:00
|
|
|
#
|
|
|
|
# '<filename>.c_CFLAGS += <options>' may also be used, as an example, to
|
|
|
|
# change the options used with the single file <filename>.c
|
2012-11-13 21:24:30 +01:00
|
|
|
|
2012-09-18 16:06:57 +02:00
|
|
|
define COMPILE
|
|
|
|
@echo "CC: $1"
|
2022-10-10 15:42:36 +02:00
|
|
|
$(Q) $(CCACHE) $(CC) -c $(CFLAGS) $($(strip $1)_CFLAGS) $1 -o $2
|
2012-09-18 16:06:57 +02:00
|
|
|
endef
|
|
|
|
|
2012-11-13 21:24:30 +01:00
|
|
|
# COMPILEXX - Default macro to compile one C++ file
|
|
|
|
# Example: $(call COMPILEXX, in-file, out-file)
|
|
|
|
#
|
|
|
|
# Depends on these settings defined in board-specific Make.defs file
|
|
|
|
# installed at $(TOPDIR)/Make.defs:
|
|
|
|
#
|
|
|
|
# CXX - The command to invoke the C++ compiler
|
|
|
|
# CXXFLAGS - Options to pass to the C++ compiler
|
2019-10-03 16:23:22 +02:00
|
|
|
#
|
|
|
|
# '<filename>.cxx_CXXFLAGS += <options>' may also be used, as an example, to
|
2019-10-03 22:08:32 +02:00
|
|
|
# change the options used with the single file <filename>.cxx. The
|
|
|
|
# extension .cpp could also be used. The same applies mutatis mutandis.
|
2012-11-13 21:24:30 +01:00
|
|
|
|
2012-09-18 16:06:57 +02:00
|
|
|
define COMPILEXX
|
|
|
|
@echo "CXX: $1"
|
2022-10-10 15:42:36 +02:00
|
|
|
$(Q) $(CCACHE) $(CXX) -c $(CXXFLAGS) $($(strip $1)_CXXFLAGS) $1 -o $2
|
2012-09-18 16:06:57 +02:00
|
|
|
endef
|
|
|
|
|
2022-02-17 16:57:12 +01:00
|
|
|
# COMPILERUST - Default macro to compile one Rust file
|
|
|
|
# Example: $(call COMPILERUST, in-file, out-file)
|
|
|
|
#
|
|
|
|
# Depends on these settings defined in board-specific Make.defs file
|
|
|
|
# installed at $(TOPDIR)/Make.defs:
|
|
|
|
#
|
|
|
|
# RUST - The command to invoke the Rust compiler
|
|
|
|
# RUSTFLAGS - Options to pass to the Rust compiler
|
|
|
|
#
|
|
|
|
# '<filename>.rs_RUSTFLAGS += <options>' may also be used, as an example, to
|
|
|
|
# change the options used with the single file <filename>.rs. The same
|
|
|
|
# applies mutatis mutandis.
|
|
|
|
|
|
|
|
define COMPILERUST
|
|
|
|
@echo "RUSTC: $1"
|
|
|
|
$(Q) $(RUSTC) --emit obj $(RUSTFLAGS) $($(strip $1)_RUSTFLAGS) $1 -o $2
|
|
|
|
endef
|
|
|
|
|
2022-09-09 12:34:09 +02:00
|
|
|
# COMPILEZIG - Default macro to compile one Zig file
|
|
|
|
# Example: $(call COMPILEZIG, in-file, out-file)
|
|
|
|
#
|
|
|
|
# Depends on these settings defined in board-specific Make.defs file
|
|
|
|
# installed at $(TOPDIR)/Make.defs:
|
|
|
|
#
|
|
|
|
# ZIG - The command to invoke the Zig compiler
|
|
|
|
# ZIGFLAGS - Options to pass to the Zig compiler
|
|
|
|
#
|
|
|
|
# '<filename>.zig_ZIGFLAGS += <options>' may also be used, as an example, to
|
|
|
|
# change the options used with the single file <filename>.zig. The same
|
|
|
|
# applies mutatis mutandis.
|
|
|
|
|
|
|
|
define COMPILEZIG
|
|
|
|
@echo "ZIG: $1"
|
2022-11-01 14:47:53 +01:00
|
|
|
$(Q) $(ZIG) build-obj $(ZIGFLAGS) $($(strip $1)_ZIGFLAGS) --name $(basename $2) $1
|
2022-09-09 12:34:09 +02:00
|
|
|
endef
|
|
|
|
|
2012-11-13 21:24:30 +01:00
|
|
|
# ASSEMBLE - Default macro to assemble one assembly language file
|
|
|
|
# Example: $(call ASSEMBLE, in-file, out-file)
|
|
|
|
#
|
2012-12-03 21:12:59 +01:00
|
|
|
# NOTE that the most common toolchain, GCC, uses the compiler to assemble
|
|
|
|
# files because this has the advantage of running the C Pre-Processor against
|
|
|
|
# the assembly language files. This is not possible with other toolchains;
|
|
|
|
# platforms using those other tools should define AS and over-ride this
|
|
|
|
# definition in order to use the assembler directly.
|
|
|
|
#
|
2012-11-13 21:24:30 +01:00
|
|
|
# Depends on these settings defined in board-specific Make.defs file
|
|
|
|
# installed at $(TOPDIR)/Make.defs:
|
|
|
|
#
|
2012-12-03 21:12:59 +01:00
|
|
|
# CC - By default, the C compiler is used to compile assembly language
|
2012-11-13 21:24:30 +01:00
|
|
|
# files
|
|
|
|
# AFLAGS - Options to pass to the C+compiler
|
2019-10-03 16:23:22 +02:00
|
|
|
#
|
2019-10-03 22:08:32 +02:00
|
|
|
# '<filename>.s_AFLAGS += <options>' may also be used, as an example, to change
|
|
|
|
# the options used with the single file <filename>.s. The extension .asm
|
|
|
|
# is used by some toolchains. The same applies mutatis mutandis.
|
2012-11-13 21:24:30 +01:00
|
|
|
|
2012-09-18 16:06:57 +02:00
|
|
|
define ASSEMBLE
|
|
|
|
@echo "AS: $1"
|
2022-10-10 15:42:36 +02:00
|
|
|
$(Q) $(CCACHE) $(CC) -c $(AFLAGS) $1 $($(strip $1)_AFLAGS) -o $2
|
2012-09-18 16:06:57 +02:00
|
|
|
endef
|
|
|
|
|
2018-05-12 15:42:38 +02:00
|
|
|
# INSTALL_LIB - Install a library $1 into target $2
|
2018-05-29 19:36:21 +02:00
|
|
|
# Example: $(call INSTALL_LIB, libabc.a, $(TOPDIR)/staging/)
|
2018-05-12 15:42:38 +02:00
|
|
|
|
|
|
|
define INSTALL_LIB
|
|
|
|
@echo "IN: $1 -> $2"
|
|
|
|
$(Q) install -m 0644 $1 $2
|
|
|
|
endef
|
|
|
|
|
2020-09-12 03:31:38 +02:00
|
|
|
# ARCHIVE_ADD - Add a list of files to an archive
|
|
|
|
# Example: $(call ARCHIVE_ADD, archive-file, "file1 file2 file3 ...")
|
2012-11-13 21:24:30 +01:00
|
|
|
#
|
|
|
|
# Note: The fileN strings may not contain spaces or characters that may be
|
|
|
|
# interpreted strangely by the shell
|
|
|
|
#
|
|
|
|
# Depends on these settings defined in board-specific Make.defs file
|
|
|
|
# installed at $(TOPDIR)/Make.defs:
|
|
|
|
#
|
|
|
|
# AR - The command to invoke the archiver (includes any options)
|
|
|
|
#
|
|
|
|
# Depends on this settings defined in board-specific defconfig file installed
|
|
|
|
# at $(TOPDIR)/.config:
|
|
|
|
#
|
|
|
|
# CONFIG_WINDOWS_NATIVE - Defined for a Windows native build
|
|
|
|
|
2020-09-12 03:31:38 +02:00
|
|
|
define ARCHIVE_ADD
|
2020-09-22 19:51:22 +02:00
|
|
|
@echo "AR (add): ${shell basename $(1)} $(2)"
|
2020-09-12 03:31:38 +02:00
|
|
|
$(Q) $(AR) $1 $(2)
|
|
|
|
endef
|
|
|
|
|
|
|
|
# ARCHIVE - Same as above, but ensure the archive is
|
|
|
|
# created from scratch
|
|
|
|
|
2012-09-18 16:06:57 +02:00
|
|
|
define ARCHIVE
|
2020-09-12 03:31:38 +02:00
|
|
|
$(Q) $(RM) $1
|
|
|
|
$(Q) $(AR) $1 $(2)
|
2012-09-18 16:06:57 +02:00
|
|
|
endef
|
|
|
|
|
2014-10-17 14:58:47 +02:00
|
|
|
# PRELINK - Prelink a list of files
|
|
|
|
# This is useful when files were compiled with fvisibility=hidden.
|
|
|
|
# Any symbol which was not explicitly made global is invisible outside the
|
|
|
|
# prelinked file.
|
|
|
|
#
|
|
|
|
# Example: $(call PRELINK, prelink-file, "file1 file2 file3 ...")
|
|
|
|
#
|
|
|
|
# Note: The fileN strings may not contain spaces or characters that may be
|
|
|
|
# interpreted strangely by the shell
|
|
|
|
#
|
|
|
|
# Depends on these settings defined in board-specific Make.defs file
|
|
|
|
# installed at $(TOPDIR)/Make.defs:
|
|
|
|
#
|
2018-08-16 02:30:12 +02:00
|
|
|
# LD - The command to invoke the linker (includes any options)
|
|
|
|
# OBJCOPY - The command to invoke the object cop (includes any options)
|
2014-10-17 14:58:47 +02:00
|
|
|
#
|
|
|
|
# Depends on this settings defined in board-specific defconfig file installed
|
|
|
|
# at $(TOPDIR)/.config:
|
|
|
|
#
|
|
|
|
# CONFIG_WINDOWS_NATIVE - Defined for a Windows native build
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
|
|
|
define PRELINK
|
|
|
|
@echo PRELINK: $1
|
|
|
|
$(Q) $(LD) -Ur -o $1 $2 && $(OBJCOPY) --localize-hidden $1
|
|
|
|
endef
|
|
|
|
else
|
|
|
|
define PRELINK
|
|
|
|
@echo "PRELINK: $1"
|
|
|
|
$(Q) $(LD) -Ur -o $1 $2 && $(OBJCOPY) --localize-hidden $1
|
|
|
|
endef
|
|
|
|
endif
|
|
|
|
|
2020-03-06 14:54:30 +01:00
|
|
|
# POSTBUILD -- Perform post build operations
|
|
|
|
# Some architectures require the use of special tools and special handling
|
2021-02-25 13:48:46 +01:00
|
|
|
# AFTER building the NuttX binary. Make.defs files for those architectures
|
2020-03-06 14:54:30 +01:00
|
|
|
# should override the following define with the correct operations for
|
|
|
|
# that platform
|
|
|
|
|
|
|
|
define POSTBUILD
|
|
|
|
endef
|
|
|
|
|
2012-11-17 19:54:53 +01:00
|
|
|
# DELFILE - Delete one file
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
2022-11-10 13:57:02 +01:00
|
|
|
define NEWLINE
|
|
|
|
|
|
|
|
|
|
|
|
endef
|
2012-11-17 19:54:53 +01:00
|
|
|
define DELFILE
|
2022-11-10 13:57:02 +01:00
|
|
|
$(foreach FILE, $(1), $(NEWLINE) $(Q) if exist $(FILE) (del /f /q $(FILE)))
|
2012-11-17 19:54:53 +01:00
|
|
|
endef
|
|
|
|
else
|
2012-11-18 21:59:30 +01:00
|
|
|
define DELFILE
|
2012-11-17 19:54:53 +01:00
|
|
|
$(Q) rm -f $1
|
|
|
|
endef
|
|
|
|
endif
|
|
|
|
|
2014-09-04 23:54:51 +02:00
|
|
|
# DELDIR - Delete one directory
|
2012-11-18 21:59:30 +01:00
|
|
|
|
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
|
|
|
define DELDIR
|
2022-11-10 13:57:02 +01:00
|
|
|
$(Q) if exist $1 (rmdir /q /s $1) $(NEWLINE)
|
2012-11-18 21:59:30 +01:00
|
|
|
endef
|
|
|
|
else
|
|
|
|
define DELDIR
|
|
|
|
$(Q) rm -rf $1
|
|
|
|
endef
|
|
|
|
endif
|
|
|
|
|
2013-11-29 00:47:03 +01:00
|
|
|
# MOVEFILE - Move one file
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
|
|
|
define MOVEFILE
|
|
|
|
$(Q) if exist $1 (move /Y $1 $2)
|
|
|
|
endef
|
|
|
|
else
|
|
|
|
define MOVEFILE
|
|
|
|
$(Q) mv -f $1 $2
|
|
|
|
endef
|
|
|
|
endif
|
|
|
|
|
2018-11-05 23:35:28 +01:00
|
|
|
# COPYFILE - Copy one file
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
|
|
|
define COPYFILE
|
|
|
|
$(Q) if exist $1 (copy /y /b $1 $2)
|
|
|
|
endef
|
|
|
|
else
|
|
|
|
define COPYFILE
|
|
|
|
$(Q) cp -f $1 $2
|
|
|
|
endef
|
|
|
|
endif
|
|
|
|
|
2020-03-23 10:08:14 +01:00
|
|
|
# CATFILE - Cat a list of files
|
2018-08-16 02:45:39 +02:00
|
|
|
#
|
2018-08-16 02:30:12 +02:00
|
|
|
# USAGE: $(call CATFILE,dest,src1,src2,src3,...)
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
|
|
|
define CATFILE
|
2022-11-10 13:57:02 +01:00
|
|
|
$(foreach FILE, $(2), $(NEWLINE) $(Q) type $(FILE) >> $1)
|
2018-08-16 02:30:12 +02:00
|
|
|
endef
|
|
|
|
else
|
|
|
|
define CATFILE
|
2020-11-26 02:45:47 +01:00
|
|
|
$(Q) if [ -z "$(strip $(2))" ]; then echo '' > $(1); else cat $(2) > $1; fi
|
2018-08-16 02:30:12 +02:00
|
|
|
endef
|
|
|
|
endif
|
|
|
|
|
2018-08-16 02:45:39 +02:00
|
|
|
# RWILDCARD - Recursive wildcard used to get lists of files from directories
|
|
|
|
#
|
|
|
|
# USAGE: FILELIST = $(call RWILDCARD,<dir>,<wildcard-filename)
|
|
|
|
#
|
2019-09-15 18:56:26 +02:00
|
|
|
# This is functionally equivalent to the following, but has the advantage in
|
2018-08-16 02:45:39 +02:00
|
|
|
# that it is portable
|
|
|
|
#
|
|
|
|
# FILELIST = ${shell find <dir> -name <wildcard-file>}
|
|
|
|
|
|
|
|
define RWILDCARD
|
2018-09-12 19:52:10 +02:00
|
|
|
$(foreach d,$(wildcard $1/*),$(call RWILDCARD,$d,$2)$(filter $(subst *,%,$2),$d))
|
2018-08-16 02:45:39 +02:00
|
|
|
endef
|
|
|
|
|
2012-11-17 19:54:53 +01:00
|
|
|
# CLEAN - Default clean target
|
|
|
|
|
2021-10-26 08:57:15 +02:00
|
|
|
ifeq ($(CONFIG_ARCH_COVERAGE),y)
|
|
|
|
EXTRA = *.gcno *.gcda
|
|
|
|
endif
|
|
|
|
|
2012-11-15 18:43:29 +01:00
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
2012-11-15 20:22:47 +01:00
|
|
|
define CLEAN
|
2012-11-17 19:54:53 +01:00
|
|
|
$(Q) if exist *$(OBJEXT) (del /f /q *$(OBJEXT))
|
|
|
|
$(Q) if exist *$(LIBEXT) (del /f /q *$(LIBEXT))
|
|
|
|
$(Q) if exist *~ (del /f /q *~)
|
|
|
|
$(Q) if exist (del /f /q .*.swp)
|
2022-11-10 13:57:02 +01:00
|
|
|
$(call DELFILE,$(subst /,\,$(OBJS)))
|
|
|
|
$(Q) if exist $(BIN) (del /f /q $(subst /,\,$(BIN)))
|
|
|
|
$(Q) if exist $(EXTRA) (del /f /q $(subst /,\,$(EXTRA)))
|
2012-11-15 20:22:47 +01:00
|
|
|
endef
|
2012-11-15 18:43:29 +01:00
|
|
|
else
|
2012-11-15 20:22:47 +01:00
|
|
|
define CLEAN
|
2021-10-26 08:57:15 +02:00
|
|
|
$(Q) rm -f *$(OBJEXT) *$(LIBEXT) *~ .*.swp $(OBJS) $(BIN) $(EXTRA)
|
2012-09-18 16:06:57 +02:00
|
|
|
endef
|
2012-11-15 20:22:47 +01:00
|
|
|
endif
|
2019-09-15 18:56:26 +02:00
|
|
|
|
|
|
|
# TESTANDREPLACEFILE - Test if two files are different. If so replace the
|
|
|
|
# second with the first. Otherwise, delete the first.
|
|
|
|
#
|
|
|
|
# USAGE: $(call TESTANDREPLACEFILE, newfile, oldfile)
|
|
|
|
#
|
|
|
|
# args: $1 - newfile: Temporary file to test
|
|
|
|
# $2 - oldfile: File to replace
|
|
|
|
|
2020-03-23 10:34:01 +01:00
|
|
|
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
|
|
|
|
define TESTANDREPLACEFILE
|
|
|
|
$(Q) move /Y $1 $2
|
|
|
|
endef
|
|
|
|
else
|
2019-09-15 18:56:26 +02:00
|
|
|
define TESTANDREPLACEFILE
|
|
|
|
if [ -f $2 ]; then \
|
2022-01-26 13:22:39 +01:00
|
|
|
if cmp -s $1 $2; then \
|
2019-09-15 18:56:26 +02:00
|
|
|
rm -f $1; \
|
|
|
|
else \
|
|
|
|
mv $1 $2; \
|
|
|
|
fi \
|
|
|
|
else \
|
|
|
|
mv $1 $2; \
|
|
|
|
fi
|
|
|
|
endef
|
|
|
|
endif
|
2020-05-22 02:36:20 +02:00
|
|
|
|
|
|
|
# Invoke make
|
|
|
|
|
|
|
|
define MAKE_template
|
2020-09-14 18:53:37 +02:00
|
|
|
+$(Q) $(MAKE) -C $(1) $(2) APPDIR="$(APPDIR)"
|
2020-05-22 02:36:20 +02:00
|
|
|
|
|
|
|
endef
|
|
|
|
|
|
|
|
define SDIR_template
|
|
|
|
$(1)_$(2):
|
2020-09-14 18:53:37 +02:00
|
|
|
+$(Q) $(MAKE) -C $(1) $(2) APPDIR="$(APPDIR)"
|
2020-05-22 02:36:20 +02:00
|
|
|
|
|
|
|
endef
|
2020-07-11 12:37:40 +02:00
|
|
|
|
2022-11-22 14:21:14 +01:00
|
|
|
export DEFINE_PREFIX ?= $(subst X,,${shell $(DEFINE) "$(CC)" X 2> ${EMPTYFILE}})
|
|
|
|
export INCDIR_PREFIX ?= $(subst "X",,${shell $(INCDIR) "$(CC)" X 2> ${EMPTYFILE}})
|
|
|
|
export INCSYSDIR_PREFIX ?= $(subst "X",,${shell $(INCDIR) -s "$(CC)" X 2> ${EMPTYFILE}})
|
2020-11-01 17:13:56 +01:00
|
|
|
|
2022-11-01 14:47:53 +01:00
|
|
|
# ARCHxxx means the predefined setting(either toolchain, arch, or system specific)
|
|
|
|
ARCHDEFINES += ${DEFINE_PREFIX}__NuttX__
|
2022-02-02 20:47:49 +01:00
|
|
|
ifeq ($(CONFIG_NDEBUG),y)
|
2022-11-01 14:47:53 +01:00
|
|
|
ARCHDEFINES += ${DEFINE_PREFIX}NDEBUG
|
2022-02-02 20:47:49 +01:00
|
|
|
endif
|
2020-11-01 17:13:56 +01:00
|
|
|
|
2020-07-11 12:37:40 +02:00
|
|
|
# The default C/C++ search path
|
|
|
|
|
2022-11-01 14:47:53 +01:00
|
|
|
ARCHINCLUDES += ${INCSYSDIR_PREFIX}$(TOPDIR)$(DELIM)include
|
2020-07-11 12:37:40 +02:00
|
|
|
|
|
|
|
ifeq ($(CONFIG_LIBCXX),y)
|
2022-11-01 14:47:53 +01:00
|
|
|
ARCHXXINCLUDES += ${INCSYSDIR_PREFIX}$(TOPDIR)$(DELIM)include$(DELIM)libcxx
|
2020-07-11 12:37:40 +02:00
|
|
|
else ifeq ($(CONFIG_UCLIBCXX),y)
|
2022-11-01 14:47:53 +01:00
|
|
|
ARCHXXINCLUDES += ${INCSYSDIR_PREFIX}$(TOPDIR)$(DELIM)include$(DELIM)uClibc++
|
2020-07-11 12:37:40 +02:00
|
|
|
else
|
2022-11-01 14:47:53 +01:00
|
|
|
ARCHXXINCLUDES += ${INCSYSDIR_PREFIX}$(TOPDIR)$(DELIM)include$(DELIM)cxx
|
2022-08-04 23:09:17 +02:00
|
|
|
ifeq ($(CONFIG_ETL),y)
|
2022-11-01 14:47:53 +01:00
|
|
|
ARCHXXINCLUDES += ${INCSYSDIR_PREFIX}$(TOPDIR)$(DELIM)include$(DELIM)etl
|
2022-08-04 23:09:17 +02:00
|
|
|
endif
|
2020-07-11 12:37:40 +02:00
|
|
|
endif
|
2022-11-01 14:47:53 +01:00
|
|
|
ARCHXXINCLUDES += ${INCSYSDIR_PREFIX}$(TOPDIR)$(DELIM)include
|
2022-02-14 22:29:40 +01:00
|
|
|
|
|
|
|
# Convert filepaths to their proper system format (i.e. Windows/Unix)
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
|
|
|
|
CONVERT_PATH = $(foreach FILE,$1,${shell cygpath -w $(FILE)})
|
|
|
|
else
|
|
|
|
CONVERT_PATH = $1
|
|
|
|
endif
|