#  Copyright (C) 2016-2021 Free Software Foundation, Inc.
#
#  This file 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 of the License, or (at your option)
#  any later version.
#
#  This file 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/>.

GTM_H += $(HASH_TABLE_H)

driver-gcn.o: $(srcdir)/config/gcn/driver-gcn.c
	$(COMPILE) $<
	$(POSTCOMPILE)

CFLAGS-mkoffload.o += $(DRIVER_DEFINES) \
	-DGCC_INSTALL_NAME=\"$(GCC_INSTALL_NAME)\"
mkoffload.o: $(srcdir)/config/gcn/mkoffload.c
	$(COMPILE) $<
	$(POSTCOMPILE)
ALL_HOST_OBJS += mkoffload.o

mkoffload$(exeext): mkoffload.o collect-utils.o libcommon-target.a \
		      $(LIBIBERTY) $(LIBDEPS)
	+$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
	  mkoffload.o collect-utils.o libcommon-target.a $(LIBIBERTY) $(LIBS)

CFLAGS-gcn-run.o += -DVERSION_STRING=$(PKGVERSION_s)
COMPILE-gcn-run.o = $(filter-out -fno-rtti,$(COMPILE))
gcn-run.o: $(srcdir)/config/gcn/gcn-run.c
	$(COMPILE-gcn-run.o) -x c -std=gnu11 -Wno-error=pedantic $<
	$(POSTCOMPILE)
ALL_HOST_OBJS += gcn-run.o

gcn-run$(exeext): gcn-run.o
	+$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $< -ldl

MULTILIB_OPTIONS = march=gfx900/march=gfx906/march=gfx908
MULTILIB_DIRNAMES = gfx900 gfx906 gfx908

gcn-tree.o: $(srcdir)/config/gcn/gcn-tree.c
	$(COMPILE) $<
	$(POSTCOMPILE)
ALL_HOST_OBJS += gcn-tree.o
