# ******************************************************************************
# (C) Automotive-Lighting Reutlingen GmbH  -  ALRT/EEG
#     Tuebinger Strasse 123, 72762 Reutlingen, Germany
# ******************************************************************************

# ------------------------------------------------------------------------------
# file   Hal_030_Flags.gmk
#
# \brief compiler/assembler/linker options on HAL level
#
# \descr
#
# ------------------------------------------------------------------------------

# Result of this file:
#  CFLAGS_DEFAULT (Compiler flags for C)
#  CFLAGS_NOWARN  (Compiler flags for C, all warnings disabled)
#  CFLAGS_DEBUG   (Compiler flags for C, debug info available and optimization disabled)
#  CPPFLAGS       (Compiler flags for C++)
#  AFLAGS         (Compiler flags for assembler)
#  LDFLAGS        (Compiler flags for linker)

C_DEFINES       := AL_CONSTEXPR_OR_CONST=constexpr            \
                   __EVAL                                     \
                   $(C_DEFINES)

C_DEFINES_TOOL_INTERNAL := $(C_DEFINES_TOOL_INTERNAL)         \
                           __GNUC__=9                         \
                           __attribute__()=

CFLAGS_BASE      = -e                                                          \
                   --thumb                                                     \
                   --char_is_signed                                            \
                   --debug

CFLAGS_OPT_SPACE = -Ohz

CFLAGS_OPT_SPEED = -On

CFLAGS_OPT_DEBUG = -On

CFLAGS_WARN_NONE =

CFLAGS_WARN_ALL  =

ifeq ($(TYP_CORE),M0P)
CFLAGS_CORE_M0P  = -mabi=aapcs                               \
                   -mcpu=cortex-m0plus                       \
                   -mtune=cortex-m0plus                      \
                   -march=armv6s-m                           \
                   -mthumb                                   \
                   -mno-long-calls                           \
                   -mfloat-abi=soft

CFLAGS_CORE      = $(CFLAGS_CORE_M0P)

LDFLAGS_CORE     =
endif

ifeq ($(TYP_CORE),M3)
CFLAGS_CORE_M3   = -mcpu=cortex-m3                           \
                   -mthumb

CFLAGS_CORE      = $(CFLAGS_CORE_M3)

LDFLAGS_CORE     =
endif

ifeq ($(TYP_CORE),M4F)
CFLAGS_CORE_M4F  = --cpu Cortex-M4F

CFLAGS_CORE      = $(CFLAGS_CORE_M4F)

LDFLAGS_CORE     =
endif

CFLAGS_DEFAULT   = $(CFLAGS_BASE)                            \
                   $(CFLAGS_CORE)                            \
                   $(CFLAGS_OPT_SPEED)                       \
                   $(CFLAGS_WARN_ALL)

CFLAGS_NOWARN    = $(CFLAGS_BASE)                            \
                   $(CFLAGS_CORE)                            \
                   $(CFLAGS_OPT_SPEED)                       \
                   $(CFLAGS_WARN_NONE)

CFLAGS_DEBUG     = $(CFLAGS_BASE)                            \
                   $(CFLAGS_CORE)                            \
                   $(CFLAGS_OPT_DEBUG)                       \
                   $(CFLAGS_WARN_ALL)

CPPFLAGS         = --c++                                     \
                   --no_rtti                                 \
                   --no_exceptions                           \
                   $(CFLAGS_BASE)                            \
                   $(CFLAGS_CORE)                            \
                   $(CFLAGS_OPT_SPEED)                       \
                   $(CFLAGS_WARN_ALL)

AFLAGS           = $(CFLAGS_CORE)                            \
                   -r                                        \
                   --thumb                                   \
                   -s+                                       \
                   --endian little

LDFLAGS          = $(LDFLAGS_CORE)                                  \
                   $(CFLAGS_CORE)                                   \
                   --entry __my_startup                             \
                   --redirect __iar_program_start=__my_startup      \
                   --manual_dynamic_initialization                  \
                   --no_remove
