walnux/tools/Config.mk
Luchian Mihai 7335b36eca
Some checks failed
Build Documentation / build-html (push) Has been cancelled
Docker-Linux / push (push) Has been cancelled
walnux: moveout
2025-11-04 19:15:10 +02:00

273 lines
8.8 KiB
Makefile

############################################################################
# tools/Config.mk
#
# 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.
#
############################################################################
ifeq ($(realpath ${NXBASE}),)
$(error "NXBASE is not defined or invalid path")
endif
ifeq ($(realpath ${NXOUT}),)
$(error "NXOUT is not defined or invalid path")
endif
ifeq ($(realpath ${TOOLCHAIN}),)
$(error "TOOLCHAIN is not defined or invalid path")
endif
# These are configuration variables that are quoted by configuration tool
# but which must be unquoted when used in the build system.
ARCH_DIR := $(realpath ${NXBASE}/arch/${ARCH})
ARCH_CHIP := $(patsubst "%",%,$(strip ${CONFIG_ARCH_CHIP}))
ARCH_FAMILY := $(patsubst "%",%,$(strip ${CONFIG_ARCH_FAMILY}))
include ${TOOLCHAIN}
# ARCHxxx means the predefined setting
# (either toolchain, arch, or system specific)
ARCHDEFINES += -D__NuttX__
CFLAGS := $(ARCHCFLAGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS)
CFLAGS += $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
AFLAGS := $(ARCHCFLAGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS)
AFLAGS += $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
# ccache configuration.
ifeq ($(CONFIG_CCACHE),y)
CCACHE ?= ccache
endif
ifeq ($(ECHO_BEGIN),)
export ECHO_BEGIN=@echo # keep a trailing space here
export ECHO_END=
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 ${NXBASE}/Make.defs:
#
# CPP - The command to invoke the C pre-processor
# CPPFLAGS - Options to pass to the C pre-processor
#
# '<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)
define PREPROCESS
$(ECHO_BEGIN)"CPP: $1->$2 "
$(Q) $(CPP) $(CPPFLAGS) $($(strip $1)_CPPFLAGS) $1 -o $2
$(ECHO_END)
endef
# COMPILE - Default macro to compile one C file
# Example: $(call COMPILE, in-file, out-file, flags)
#
# Depends on these settings defined in board-specific Make.defs file
# installed at ${NXBASE}/Make.defs:
#
# CC - The command to invoke the C compiler
# CFLAGS - Options to pass to the C compiler
#
# '<filename>.c_CFLAGS += <options>' may also be used, as an example, to
# change the options used with the single file <filename>.c
define COMPILE
$(ECHO_BEGIN)"CC: $1 "
$(Q) $(CCACHE) $(CC) -c $(CFLAGS) $3 $($(strip $1)_CFLAGS) $1 -o $2
$(ECHO_END)
endef
# COMPILEXX - Default macro to compile one C++ file
# Example: $(call COMPILEXX, in-file, out-file, flags)
#
# Depends on these settings defined in board-specific Make.defs file
# installed at ${NXBASE}/Make.defs:
#
# CXX - The command to invoke the C++ compiler
# CXXFLAGS - Options to pass to the C++ compiler
#
# '<filename>.cxx_CXXFLAGS += <options>' may also be used, as an example, to
# change the options used with the single file <filename>.cxx. The
# extension .cpp could also be used. The same applies mutatis mutandis.
define COMPILEXX
$(ECHO_BEGIN)"CXX: $1 "
$(Q) $(CCACHE) $(CXX) -c $(CXXFLAGS) $3 $($(strip $1)_CXXFLAGS) $1 -o $2
$(ECHO_END)
endef
# 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 ${NXBASE}/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_BEGIN)"RUSTC: $1 "
$(Q) $(RUSTC) --emit obj $(RUSTFLAGS) $($(strip $1)_RUSTFLAGS) $1 -o $2
$(ECHO_END)
endef
# 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 ${NXBASE}/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_BEGIN)"ZIG: $1 "
$(Q) $(ZIG) build-obj $(ZIGFLAGS) $($(strip $1)_ZIGFLAGS) --name $(basename $2) $1
$(ECHO_END)
endef
# COMPILED - Default macro to compile one D file
# Example: $(call COMPILED, in-file, out-file)
#
# Depends on these settings defined in board-specific Make.defs file
# installed at ${NXBASE}/Make.defs:
#
# DC - The command to invoke the D compiler
# DFLAGS - Options to pass to the D compiler
#
# '<filename>.d_DFLAGS += <options>' may also be used, as an example, to
# change the options used with the single file <filename>.d. The same
# applies mutatis mutandis.
define COMPILED
$(ECHO_BEGIN)"DC: $1 "
$(Q) $(DC) -c $(DFLAGS) $($(strip $1)_DFLAGS) $1 -of $2
$(ECHO_END)
endef
# COMPILESWIFT - Default macro to compile one Swift file
# Example: $(call COMPILESWIFT, in-file, out-file)
#
# Depends on these settings defined in board-specific Make.defs file
# installed at ${NXBASE}/Make.defs:
#
# SWIFTC - The command to invoke the Swift compiler
# SWIFTFLAGS - Options to pass to the Swift compiler
#
# '<filename>.swift_SWIFTFLAGS += <options>' may also be used, as an example, to
# change the options used with the single file <filename>.swift. The same
# applies mutatis mutandis.
define COMPILESWIFT
$(ECHO_BEGIN)"SWIFTC: $1 "
$(Q) $(SWIFTC) -c $(SWIFTFLAGS) $($(strip $1)_SWIFTFLAGS) $1 -o $2
$(ECHO_END)
endef
# ASSEMBLE - Default macro to assemble one assembly language file
# Example: $(call ASSEMBLE, in-file, out-file)
#
# 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.
#
# Depends on these settings defined in board-specific Make.defs file
# installed at ${NXBASE}/Make.defs:
#
# CC - By default, the C compiler is used to compile assembly language
# files
# AFLAGS - Options to pass to the C+compiler
#
# '<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.
define ASSEMBLE
$(ECHO_BEGIN)"AS: $1 "
$(Q) $(CCACHE) $(CC) -c $(AFLAGS) $1 $($(strip $1)_AFLAGS) -o $2
$(ECHO_END)
endef
# ARCHIVE - Add a list of files to an archive
# Example: $(call ARCHIVE, archive-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 ${NXBASE}/Make.defs:
#
# AR - The command to invoke the archiver (includes any options)
#
# Depends on this settings defined in board-specific defconfig file installed
# at ${NXBASE}/.config:
#
# CONFIG_WINDOWS_NATIVE - Defined for a Windows native build
define ARCHIVE
$(ECHO_BEGIN)"AS: $1 "
$(Q) $(AR) $1 $2
$(ECHO_END)
endef
define LINK
$(ECHO_BEGIN)"LN: $1 "
$(Q) [ -L $2 ] || ln -s $1 $2
$(ECHO_END)
endef
define UNLINK
$(ECHO_BEGIN)"RM: $1 "
$(Q) [ -L $1 ] && rm -f $1
$(ECHO_END)
endef
# PREBUILD -- Perform pre build operations
# Some architectures require the use of special tools and special handling
# BEFORE building NuttX. The `Make.defs` files for those architectures
# should override the following define with the correct operations for
# that platform.
define PREBUILD
endef
# POSTBUILD -- Perform post build operations
# Some architectures require the use of special tools and special handling
# AFTER building the NuttX binary. Make.defs files for those architectures
# should override the following define with the correct operations for
# that platform
define POSTBUILD
endef