#
# Common Makefile Rules
#

# Environment Checks ###########################################################

ifeq ($(OPT_LEVEL),)
$(warning The OPT_LEVEL variable is unset. Defaulting to 0.)
OPT_LEVEL = 0
endif

ifeq ($(OUTPUT_NAME),)
$(error "The OUTPUT_NAME variable must be set to the name of the desired \
         binary. Example: OUTPUT_NAME = my_nanoapp")
endif

# Define all ###################################################################

# All is defined here as the first target which causes make to build all by
# default when no targets are supplied.
.PHONY: all
all:

# If no make command goals are specified, default to all. At least one target
# is required for environment checks. Building all will require toolchains for
# all supported architectures which may not be desirable.
ifeq ($(MAKECMDGOALS),)
MAKECMDGOALS = all
endif

# Variant-specific Support Source Files ########################################

SYS_SUPPORT_PATH = $(CHRE_PREFIX)/build/sys_support

# Host Toolchain ###############################################################

# The host toolchain is used to compile any programs for the compilation host
# in order to complete the build.

ifeq ($(CHRE_HOST_CC),)
CHRE_HOST_CC = g++
endif

# Makefile Includes ############################################################

# Common Includes
include $(CHRE_PREFIX)/build/clean.mk
include $(CHRE_PREFIX)/build/tools_config.mk

# NanoPB Source Generation
include $(CHRE_PREFIX)/build/nanopb.mk

# TFLM Sources
include $(CHRE_PREFIX)/external/tflm/tflm.mk

# Rust config
include $(CHRE_PREFIX)/build/rust/common_rust_config.mk