
# Include the make of the specific HAL.
include $(ENV_MAKE_HAL)/Hal_500_Rules.gmk

FILES_COMPILER_VARIANT_1 := $(FILES_NOWARN_COMPILER)
FILES_COMPILER_VARIANT_2 := $(FILES_DEBUG)
FILES_COMPILER_VARIANT_3 := $(FILES_NOMISRA)
FILES_COMPILER_VARIANT_4 := $(FILES_COVER)

# For using Different Compiler Versions
IF_FILES_COMPILER_DEFAULT       = if not X$(basename $(@F)) == X$(filter $(basename $(@F)), $(notdir  $(FILES_COMPILER_VARIANT_1) $(FILES_COMPILER_VARIANT_2) $(FILES_COMPILER_VARIANT_3) $(FILES_COMPILER_VARIANT_4)))
IF_FILES_COMPILER_VARIANT_1     = if     X$(basename $(@F)) == X$(filter $(basename $(@F)), $(notdir  $(FILES_COMPILER_VARIANT_1)))
IF_FILES_COMPILER_VARIANT_2     = if     X$(basename $(@F)) == X$(filter $(basename $(@F)), $(notdir  $(FILES_COMPILER_VARIANT_2)))
IF_FILES_COMPILER_VARIANT_3     = if     X$(basename $(@F)) == X$(filter $(basename $(@F)), $(notdir  $(FILES_COMPILER_VARIANT_3)))
IF_FILES_COMPILER_VARIANT_4     = if     X$(basename $(@F)) == X$(filter $(basename $(@F)), $(notdir  $(FILES_COMPILER_VARIANT_4)))

# Delete the default suffixes. We do not use implicit rules.
# Pattern rules with %... are used instead.
.SUFFIXES:

# C Compilation: C-Source Files
$(PATH_TMP_NAME_OBJ)/%.$(SUFFIX_OBJ) : %.c
	@$(GNUECHO) +++ compile C: $< to $@

  # Compile
	@if exist $(PATH_TMP_NAME_OBJ)/$(basename $(@F)).*   del /Q $(subst /,\,$(PATH_TMP_NAME_OBJ)/$(basename $(@F))).*  2> NUL
	@if exist $(PATH_TMP_NAME_LST)/$(basename $(@F)).*   del /Q $(subst /,\,$(PATH_TMP_NAME_LST)/$(basename $(@F))).*  2> NUL
	@if exist $(PATH_TMP_NAME_ERR)/$(basename $(@F)).*   del /Q $(subst /,\,$(PATH_TMP_NAME_ERR)/$(basename $(@F))).*  2> NUL

  # Call the C compiler
	@-$(IF_FILES_COMPILER_DEFAULT)        @$(RULE_COMPILE_C_TO_OBJ_CMD)
	@-$(IF_FILES_COMPILER_VARIANT_1)      @$(RULE_COMPILE_C_TO_OBJ_CMD_VARIANT_1)
	@-$(IF_FILES_COMPILER_VARIANT_2)      @$(RULE_COMPILE_C_TO_OBJ_CMD_VARIANT_2)
	@-$(IF_FILES_COMPILER_VARIANT_3)      @$(RULE_COMPILE_C_TO_OBJ_CMD_VARIANT_3)
	@-$(IF_FILES_COMPILER_VARIANT_4)      @$(RULE_COMPILE_C_TO_OBJ_CMD_VARIANT_4)
	@-$(RULE_MOVE_LIST_FILE)
	@-$(RULE_SHOW_COMPILATION_ERRORS_CMD)
	@-$(RULE_GENERATE_C_DEPENDENCY_FILE)

  # Create a file (called *.fname_c) containing the full source file name with DOS/Windows backslashes.
  # Files of type *.fname_c will be used for:
  #   Batch files related to MISRA-C analysis
  #   Identification of C/CPP filenames for code coverage
	@-$(IF_FILES_COMPILER_DEFAULT)        @$(GNUECHO) $(subst /,$(BACKSLASH),$<) > $(PATH_TMP_NAME_OBJ)/$(basename $(@F)).fname_c
	@-$(IF_FILES_COMPILER_VARIANT_1)      @$(GNUECHO) $(subst /,$(BACKSLASH),$<) > $(PATH_TMP_NAME_OBJ)/$(basename $(@F)).fname_c
	@-$(IF_FILES_COMPILER_VARIANT_2)      @$(GNUECHO) $(subst /,$(BACKSLASH),$<) > $(PATH_TMP_NAME_OBJ)/$(basename $(@F)).fname_c
	@-$(IF_FILES_COMPILER_VARIANT_4)      @$(GNUECHO) $(subst /,$(BACKSLASH),$<) > $(PATH_TMP_NAME_OBJ)/$(basename $(@F)).fname_c

  # Create a tool-specific batch file for single-file MISRA-C analysis.
	@-$(IF_FILES_COMPILER_DEFAULT)        @$(RULE_CREATE_BATCH_FOR_SINGLE_FILE_MISRA_C_ANALYSIS)
	@-$(IF_FILES_COMPILER_VARIANT_1)      @$(RULE_CREATE_BATCH_FOR_SINGLE_FILE_MISRA_C_ANALYSIS)
	@-$(IF_FILES_COMPILER_VARIANT_2)      @$(RULE_CREATE_BATCH_FOR_SINGLE_FILE_MISRA_C_ANALYSIS)
	@-$(IF_FILES_COMPILER_VARIANT_4)      @$(RULE_CREATE_BATCH_FOR_SINGLE_FILE_MISRA_C_ANALYSIS)


# C++ Compilation: C++-Source Files
$(PATH_TMP_NAME_OBJ)/%.$(SUFFIX_OBJ) : %.cpp
	@$(GNUECHO) +++ compile C++: $< to $@

  # Compile
	@if exist $(PATH_TMP_NAME_OBJ)/$(basename $(@F)).* del /Q $(subst /,\,$(PATH_TMP_NAME_OBJ)/$(basename $(@F))).*  2> NUL
	@if exist $(PATH_TMP_NAME_LST)/$(basename $(@F)).* del /Q $(subst /,\,$(PATH_TMP_NAME_LST)/$(basename $(@F))).*  2> NUL
	@if exist $(PATH_TMP_NAME_ERR)/$(basename $(@F)).* del /Q $(subst /,\,$(PATH_TMP_NAME_ERR)/$(basename $(@F))).*  2> NUL

  # Call the C++ compiler
	@-$(IF_FILES_COMPILER_DEFAULT)        @$(RULE_COMPILE_CPP_TO_OBJ_CMD)
	@-$(IF_FILES_COMPILER_VARIANT_1)      @$(RULE_COMPILE_CPP_TO_OBJ_CMD_VARIANT_1)
	@-$(IF_FILES_COMPILER_VARIANT_2)      @$(RULE_COMPILE_CPP_TO_OBJ_CMD_VARIANT_2)
	@-$(IF_FILES_COMPILER_VARIANT_3)      @$(RULE_COMPILE_CPP_TO_OBJ_CMD_VARIANT_3)
	@-$(IF_FILES_COMPILER_VARIANT_4)      @$(RULE_COMPILE_CPP_TO_OBJ_CMD_VARIANT_4)
	@-$(RULE_MOVE_LIST_FILE)
	@-$(RULE_SHOW_COMPILATION_ERRORS_CMD)
	@-$(RULE_GENERATE_CPP_DEPENDENCY_FILE)

  # Create a file (called *.fname_cpp) containing the full source file name with DOS/Windows backslashes.
  # Files of type *.fname_cpp will be used for:
  #   Identification of C/CPP filenames for code coverage
	@-$(IF_FILES_COMPILER_DEFAULT)        @$(GNUECHO) $(subst /,$(BACKSLASH),$<) > $(PATH_TMP_NAME_OBJ)/$(basename $(@F)).fname_cpp
	@-$(IF_FILES_COMPILER_VARIANT_1)      @$(GNUECHO) $(subst /,$(BACKSLASH),$<) > $(PATH_TMP_NAME_OBJ)/$(basename $(@F)).fname_cpp
	@-$(IF_FILES_COMPILER_VARIANT_2)      @$(GNUECHO) $(subst /,$(BACKSLASH),$<) > $(PATH_TMP_NAME_OBJ)/$(basename $(@F)).fname_cpp
	@-$(IF_FILES_COMPILER_VARIANT_4)      @$(GNUECHO) $(subst /,$(BACKSLASH),$<) > $(PATH_TMP_NAME_OBJ)/$(basename $(@F)).fname_cpp

# Assembly: Assembler Files (for SUFFIX_ASM)
$(PATH_TMP_NAME_OBJ)/%.$(SUFFIX_OBJ) : %.$(SUFFIX_ASM)
	@$(GNUECHO) +++ assemble: $< to $@

  # Call the assembler
	@-$(RULE_ASSEMBLE_ASM_TO_OBJ_CMD)


# Assembly: Assembler Files (for SUFFIX_ASM2)
$(PATH_TMP_NAME_OBJ)/%.$(SUFFIX_OBJ) : %.$(SUFFIX_ASM2)
	@$(GNUECHO) +++ assemble: $< to $@

  # Call the assembler
	@-$(RULE_ASSEMBLE_ASM_TO_OBJ_CMD)
