# Copyright (C) 2000-2023 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
# GCC is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# GCC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.

HAVE_DOUBLE32 = $(findstring HAVE_DOUBLE32, $(tm_defines))
HAVE_DOUBLE64 = $(findstring HAVE_DOUBLE64, $(tm_defines))
HAVE_LONG_DOUBLE32 = $(findstring HAVE_LONG_DOUBLE32, $(tm_defines))
HAVE_LONG_DOUBLE64 = $(findstring HAVE_LONG_DOUBLE64, $(tm_defines))
HAVE_LONG_DOUBLE_IS_DOUBLE = $(findstring HAVE_LONG_DOUBLE_IS_DOUBLE, $(tm_defines))

ifeq (WITH_DOUBLE32, $(findstring WITH_DOUBLE32, $(tm_defines)))
WITH_DOUBLE=32
endif

ifeq (WITH_DOUBLE64, $(findstring WITH_DOUBLE64, $(tm_defines)))
WITH_DOUBLE=64
endif

ifeq (WITH_LONG_DOUBLE32, $(findstring WITH_LONG_DOUBLE32, $(tm_defines)))
WITH_LONG_DOUBLE=32
endif

ifeq (WITH_LONG_DOUBLE64, $(findstring WITH_LONG_DOUBLE64, $(tm_defines)))
WITH_LONG_DOUBLE=64
endif

PASSES_EXTRA += $(srcdir)/config/avr/avr-passes.def

driver-avr.o: $(srcdir)/config/avr/driver-avr.cc \
  $(CONFIG_H) $(SYSTEM_H) coretypes.h \
  $(srcdir)/config/avr/avr-arch.h $(TM_H)
	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<

avr-devices.o: $(srcdir)/config/avr/avr-devices.cc \
  $(srcdir)/config/avr/avr-mcus.def \
  $(srcdir)/config/avr/avr-arch.h \
  $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H)
	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<

avr-c.o: $(srcdir)/config/avr/avr-c.cc \
  $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(C_COMMON_H)
	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<

avr-log.o: $(srcdir)/config/avr/avr-log.cc \
  $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(INPUT_H) dumpfile.h
	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<

avr.o avr-c.o: $(srcdir)/config/avr/builtins.def

# This overrides stdfix.h from USER_H which we supply and include
# in our own stdfix.h as stdfix-gcc.h.

EXTRA_HEADERS = $(srcdir)/config/avr/stdfix.h \
	      	stdfix-gcc.h

stdfix-gcc.h: $(srcdir)/ginclude/stdfix.h
	-cp $< $@

# Files and Variables auto-generated from avr-mcus.def

AVR_MCUS = $(srcdir)/config/avr/avr-mcus.def

# Run `avr-mcus' after you changed or added devices in  avr-mcus.def

.PHONY: avr-mcus

avr-mcus: $(srcdir)/doc/avr-mmcu.texi ; @true

# Make sure that native -mmcu= support is in sync with -mmcu= documentation.
gen-avr-mmcu-texi$(build_exeext): $(srcdir)/config/avr/gen-avr-mmcu-texi.cc \
  $(AVR_MCUS) $(srcdir)/config/avr/avr-devices.cc \
  $(srcdir)/config/avr/avr-arch.h
	$(CXX_FOR_BUILD) $(CXXFLAGS_FOR_BUILD) $< -o $@

gen-avr-mmcu-specs$(build_exeext): $(srcdir)/config/avr/gen-avr-mmcu-specs.cc \
  $(AVR_MCUS) $(srcdir)/config/avr/avr-devices.cc \
  $(srcdir)/config/avr/avr-arch.h $(TM_H)
	$(CXX_FOR_BUILD) $(CXXFLAGS_FOR_BUILD) $< -o $@ $(INCLUDES)

$(srcdir)/doc/avr-mmcu.texi: gen-avr-mmcu-texi$(build_exeext)
	$(RUN_GEN) ./$< > $@

s-device-specs: gen-avr-mmcu-specs$(build_exeext)
	rm -rf device-specs
	mkdir device-specs && cd device-specs && $(RUN_GEN) ../$<
	$(STAMP) s-device-specs

GCC_PASSES+=s-device-specs

install-driver: install-device-specs

install-device-specs: s-device-specs installdirs
	-rm -rf $(DESTDIR)$(libsubdir)/device-specs
	mkdir $(DESTDIR)$(libsubdir)/device-specs
	-for file in device-specs/*; do \
		$(INSTALL_DATA) $${file} $(DESTDIR)$(libsubdir)/$${file}; \
	done

# Get multilib layout
# MULTILIB_OPTIONS
# MULTILIB_DIRNAMES
# MULTILIB_REQUIRED
# MULTILIB_REUSE

multilib.h Makefile s-mlib: t-multilib-avr

t-multilib-avr: $(srcdir)/config/avr/genmultilib.awk \
				 $(AVR_MCUS)
	$(AWK)	-v HAVE_LONG_DOUBLE_IS_DOUBLE=$(HAVE_LONG_DOUBLE_IS_DOUBLE) \
		-v HAVE_DOUBLE32=$(HAVE_DOUBLE32) 			\
		-v HAVE_DOUBLE64=$(HAVE_DOUBLE64) 			\
		-v HAVE_LONG_DOUBLE32=$(HAVE_LONG_DOUBLE32)		\
		-v HAVE_LONG_DOUBLE64=$(HAVE_LONG_DOUBLE64) 		\
		-v with_double=$(WITH_DOUBLE) 				\
		-v with_long_double=$(WITH_LONG_DOUBLE)			\
		-v with_multilib_list=$(TM_MULTILIB_CONFIG)		\
		-f $< $< $(AVR_MCUS) > $@

include t-multilib-avr
