# Make-lang.in -- Top level -*- makefile -*- fragment for GCC Rust frontend.

# Copyright (C) 2009-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/>.

# This file provides the language dependent support in the main Makefile.

#RUST_EXES = rust

# Use strict warnings for this front end.
rust-warn = $(STRICT_WARN)
# ..., with the exception of '-Wunused-parameter'; waiting for
# <https://github.com/Rust-GCC/gccrs/issues/1626> "bootstrap build failure".
rust-warn += -Wno-unused-parameter

# Installation name. Useful for cross compilers and used during install.
GCCRS_INSTALL_NAME := $(shell echo gccrs|sed '$(program_transform_name)')
GCCRS_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo gccrs|sed '$(program_transform_name)')

# Define the names for selecting rust in LANGUAGES.
rust: rust1$(exeext)

rust.serial = rust1$(exeext)

# Tell GNU make to ignore files by these names if they exist.
.PHONY: rust

# removed GRS_CFLAGS from here

CFLAGS-rust/rustspec.o += $(DRIVER_DEFINES)

# Create the compiler driver gccrs.
# A compiler driver is the program that interprets command argument and can be called from the command
# line - e.g. gcc or g++, and not cc1, which is the actual compiler

# Create driver objects
GCCRS_D_OBJS = \
   $(GCC_OBJS) \
   rust/rustspec.o \
   $(END)

gccrs$(exeext): $(GCCRS_D_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a $(LIBDEPS)
	+$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
	  $(GCCRS_D_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \
	  $(EXTRA_GCC_LIBS) $(LIBS)

# List of host object files used by the rust language - files for translation from the parse tree
# to GENERIC
# The compiler proper, not driver
GRS_OBJS = \
    rust/rust-lang.o \
    rust/rust-object-export.o \
    rust/rust-linemap.o \
    rust/rust-gcc-diagnostics.o \
    rust/rust-diagnostics.o \
    rust/rust-gcc.o \
    rust/rust-token.o \
    rust/rust-lex.o \
    rust/rust-cfg-parser.o \
    rust/rust-parse.o \
    rust/rust-ast.o \
    rust/rust-ast-fragment.o \
    rust/rust-ast-dump.o \
    rust/rust-hir-dump.o \
    rust/rust-session-manager.o \
    rust/rust-compile.o \
    rust/rust-mangle.o \
    rust/rust-compile-resolve-path.o \
    rust/rust-macro-expand.o \
    rust/rust-attribute-visitor.o \
    rust/rust-macro-invoc-lexer.o \
    rust/rust-macro-substitute-ctx.o \
    rust/rust-macro-builtins.o \
    rust/rust-hir.o \
    rust/rust-hir-map.o \
    rust/rust-attributes.o \
    rust/rust-abi.o \
	rust/rust-macro.o \
    rust/rust-ast-lower.o \
    rust/rust-ast-lower-base.o \
    rust/rust-ast-lower-pattern.o \
    rust/rust-ast-lower-item.o \
    rust/rust-ast-lower-expr.o \
    rust/rust-ast-lower-type.o \
    rust/rust-early-name-resolver.o \
    rust/rust-name-resolver.o \
    rust/rust-ast-resolve.o \
    rust/rust-ast-resolve-base.o \
    rust/rust-ast-resolve-item.o \
    rust/rust-ast-resolve-pattern.o \
    rust/rust-ast-resolve-expr.o \
    rust/rust-ast-resolve-type.o \
    rust/rust-ast-resolve-path.o \
    rust/rust-ast-resolve-stmt.o \
    rust/rust-ast-resolve-struct-expr-field.o \
    rust/rust-hir-type-check.o \
    rust/rust-privacy-check.o \
    rust/rust-privacy-ctx.o \
    rust/rust-reachability.o \
    rust/rust-visibility-resolver.o \
    rust/rust-pub-restricted-visitor.o \
    rust/rust-privacy-reporter.o \
    rust/rust-tyty.o \
    rust/rust-tyty-util.o \
    rust/rust-tyty-call.o \
    rust/rust-tyty-subst.o \
    rust/rust-typecheck-context.o \
    rust/rust-tyty-bounds.o \
    rust/rust-hir-type-check-util.o \
    rust/rust-hir-trait-resolve.o \
    rust/rust-hir-trait-reference.o \
    rust/rust-hir-type-check-item.o \
    rust/rust-hir-type-check-type.o \
    rust/rust-hir-type-check-struct.o \
    rust/rust-hir-type-check-pattern.o \
    rust/rust-hir-type-check-expr.o \
    rust/rust-hir-type-check-stmt.o \
    rust/rust-hir-type-check-enumitem.o \
    rust/rust-hir-type-check-implitem.o \
    rust/rust-hir-dot-operator.o \
    rust/rust-hir-path-probe.o \
    rust/rust-type-util.o \
    rust/rust-coercion.o \
    rust/rust-casts.o \
    rust/rust-unify.o \
    rust/rust-hir-type-check-base.o \
    rust/rust-autoderef.o \
    rust/rust-substitution-mapper.o \
    rust/rust-const-checker.o \
    rust/rust-lint-marklive.o \
    rust/rust-lint-unused-var.o \
    rust/rust-hir-type-check-path.o \
    rust/rust-unsafe-checker.o \
    rust/rust-compile-intrinsic.o \
    rust/rust-compile-pattern.o \
    rust/rust-compile-fnparam.o \
    rust/rust-base62.o \
    rust/rust-optional-test.o \
    rust/rust-compile-item.o \
    rust/rust-compile-implitem.o \
    rust/rust-compile-stmt.o \
    rust/rust-compile-expr.o \
    rust/rust-compile-type.o \
    rust/rust-compile-block.o \
    rust/rust-compile-struct-field-expr.o \
    rust/rust-constexpr.o \
    rust/rust-compile-base.o \
    rust/rust-tree.o \
    rust/rust-compile-context.o \
    rust/rust-export-metadata.o \
    rust/rust-imports.o \
    rust/rust-import-archive.o \
    rust/rust-extern-crate.o \
    rust/rust-builtins.o \
    rust/rust-feature.o \
    rust/rust-feature-gate.o \
    $(END)
# removed object files from here

# All language-specific object files for Rust.
RUST_ALL_OBJS = $(GRS_OBJS) $(RUST_TARGET_OBJS)

rust_OBJS = $(RUST_ALL_OBJS) rust/rustspec.o

# The compiler itself is called rust1 (formerly grs1)
rust1$(exeext): $(RUST_ALL_OBJS) attribs.o $(BACKEND) $(LIBDEPS) $(rust.prev)
	@$(call LINK_PROGRESS,$(INDEX.rust),start)
	+$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
	      $(RUST_ALL_OBJS) attribs.o $(BACKEND) $(LIBS) $(BACKENDLIBS)
	@$(call LINK_PROGRESS,$(INDEX.rust),end)

# Build hooks.

lang_checks += check-rust
lang_checks_parallelized += check-rust
check_rust_parallelize = 10

# Copies its dependencies into the source directory. This generally should be used for generated files
# such as Bison output files which are not version-controlled, but should be included in any release
# tarballs. This target will be executed during a bootstrap if ‘--enable-generated-files-in-srcdir’
# was specified as a configure option.
rust.srcextra:

rust.all.cross: gccrs$(exeext)

# idk what this does but someone used it
rust.start.encap: gccrs$(exeext)
rust.rest.encap:

# Build generated man pages for the front end from Texinfo manuals (see Man Page Generation), in the
# build directory. This target is only called if the necessary tools are available, but should ignore
# errors so as not to stop the build if errors occur; man pages are optional and the tools involved
# may be installed in a broken way.
rust.man:

# Copies its dependencies into the source directory. These targets will be executed during a bootstrap
# if ‘--enable-generated-files-in-srcdir’ was specified as a configure option.
rust.srcman:

# Clean hooks.

rust.mostlyclean:
#	cd $(srcdir)/rust; rm -f *.o y.tab.h y.tab.c lex.yy.c

rust.clean: rust.mostlyclean

# Builds an etags TAGS file in the language subdirectory in the source tree.
# TODO: add more directories if I add more
rust.tags: force
	cd $(srcdir)/rust; \
	etags -o TAGS.sub *.y *.l *.cc *.h ast/*.h ast/*.cc lex/*.h lex/*.cc parse/*.h parse/*.cc; \
	etags --include TAGS.sub --include ../TAGS.sub

# Build documentation hooks.

# Build info documentation for the front end, in the build directory. This target is only called by
# ‘make bootstrap’ if a suitable version of makeinfo is available, so does not need to check for this,
# and should fail if an error occurs.
rust.info:

rust.srcinfo:

# Build DVI documentation for the front end, in the build directory. This should be done using
# $(TEXI2DVI), with appropriate -I arguments pointing to directories of included files.
rust.dvi:

# Build PDF documentation for the front end, in the build directory. This should be done using
# $(TEXI2PDF), with appropriate -I arguments pointing to directories of included files.
rust.pdf:

doc/rust.info:
doc/rust.dvi:
doc/rust.pdf:

# Build HTML documentation for the front end, in the build directory.
rust.html:

# Install hooks.

# Install everything that is part of the front end, apart from the compiler executables listed in
# compilers in config-lang.in.
rust.install-common: installdirs
#	-rm -f $(DESTDIR)$(bindir)/$(GCCRS_INSTALL_NAME)$(exeext)
#	-rm -f $(DESTDIR)$(bindir)/$(GCCRS_TARGET_INSTALL_NAME)$(exeext)
#	$(INSTALL_PROGRAM) gccrs$(exeext) $(DESTDIR)$(bindir)/$(GCCRS_INSTALL_NAME)$(exeext)
#	if test -f $(DESTDIR)$(bindir)$(GCCRS_TARGET_INSTALL_NAME)$(exeext); then \
#	  :; \
#	else \
#	  cd $(DESTDIR)$(bindir) && \
#	   $(LN) $(GCCRS_INSTALL_NAME)$(exeext) $(GCCRS_TARGET_INSTALL_NAME)$(exeext); \
#	fi
	-rm -f $(DESTDIR)$(bindir)/$(GCCRS_INSTALL_NAME)$(exeext)
	$(INSTALL_PROGRAM) gccrs$(exeext) $(DESTDIR)$(bindir)/$(GCCRS_INSTALL_NAME)$(exeext)
	rm -f $(DESTDIR)$(bindir)/$(GCCRS_TARGET_INSTALL_NAME)$(exeext); \
	( cd $(DESTDIR)$(bindir) && \
      $(LN) $(GCCRS_INSTALL_NAME)$(exeext) $(GCCRS_TARGET_INSTALL_NAME)$(exeext) ); \

# Install headers needed for plugins.
rust.install-plugin:

# Uninstall files installed by installing the compiler. This is currently documented not to be
# supported, so the hook need not do anything.
rust.uninstall:
#	-rm -rf $(DESTDIR)/$(bindir)/$(GCCRS_INSTALL_NAME)$(exeext)
	-rm -f gccrs$(exeext) grs1$(exeext)
	-rm -f $(RUST_ALL_OBJS)
# ^those two are a maybe

# Enable selftests for the rust frontend
selftest-rust: s-selftest-rust

RUST_SELFTEST_FLAGS = -xrust -frust-incomplete-and-experimental-compiler-do-not-use $(SELFTEST_FLAGS)
RUST_SELFTEST_DEPS = rust1$(exeext) $(SELFTEST_DEPS)

# Run the rust selftests
s-selftest-rust: $(RUST_SELFTEST_DEPS)
	$(GCC_FOR_TARGET) $(RUST_SELFTEST_FLAGS)
	$(STAMP) $@

# Convenience methods for running rust selftests under gdb:
.PHONY: selftest-rust-gdb
selftest-rust-gdb: $(RUST_SELFTEST_DEPS)
	$(GCC_FOR_TARGET) $(RUST_SELFTEST_FLAGS) \
	  -wrapper gdb,--args

# Convenience methods for running rust selftests under valgrind:
.PHONY: selftest-rust-valgrind
selftest-rust-valgrind: $(RUST_SELFTEST_DEPS)
	$(GCC_FOR_TARGET) $(RUST_SELFTEST_FLAGS) \
	  -wrapper valgrind,--leak-check=full

# Install info documentation for the front end, if it is present in the source directory. This target
# should have dependencies on info files that should be installed.
rust.install-info:

rust.install-pdf:

# Install man pages for the front end. This target should ignore errors.
rust.install-man:

# Stage hooks:
# The toplevel makefile has already created stage?/rust at this point.
# Used for handling bootstrap

rust.stage1: stage1-start
	-mv rust/*$(objext) stage1/rust
rust.stage2: stage2-start
	-mv rust/*$(objext) stage2/rust
rust.stage3: stage3-start
	-mv rust/*$(objext) stage3/rust
rust.stage4: stage4-start
	-mv rust/*$(objext) stage4/rust
rust.stageprofile: stageprofile-start
	-mv rust/*$(objext) stageprofile/rust
rust.stagefeedback: stagefeedback-start
	-mv rust/*$(objext) stagefeedback/rust

CFLAGS-rust/rust-lang.o += -DDEFAULT_TARGET_VERSION=\"$(version)\" \
	-DDEFAULT_TARGET_MACHINE=\"$(target_noncanonical)\"

# cross-folder includes - add new folders later
RUST_INCLUDES = -I $(srcdir)/rust \
	-I $(srcdir)/rust/lex \
	-I $(srcdir)/rust/parse \
	-I $(srcdir)/rust/ast \
	-I $(srcdir)/rust/analysis \
	-I $(srcdir)/rust/backend \
	-I $(srcdir)/rust/expand \
	-I $(srcdir)/rust/hir/tree \
	-I $(srcdir)/rust/hir \
	-I $(srcdir)/rust/resolve \
	-I $(srcdir)/rust/util \
	-I $(srcdir)/rust/typecheck \
	-I $(srcdir)/rust/checks/lints \
	-I $(srcdir)/rust/checks/errors \
	-I $(srcdir)/rust/checks/errors/privacy \
	-I $(srcdir)/rust/util \
        -I $(srcdir)/rust/metadata

# add files that require cross-folder includes - currently rust-lang.o, rust-lex.o
CFLAGS-rust/rust-lang.o += $(RUST_INCLUDES)
CFLAGS-rust/rust-lex.o += $(RUST_INCLUDES)
CFLAGS-rust/rust-parse.o += $(RUST_INCLUDES)
CFLAGS-rust/rust-session-manager.o += $(RUST_INCLUDES)

RUST_CXXFLAGS = $(CXXFLAGS)

# build all rust/lex files in rust folder, add cross-folder includes
rust/%.o: rust/lex/%.cc
	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
	$(POSTCOMPILE)

# build all rust/parse files in rust folder, add cross-folder includes
rust/%.o: rust/parse/%.cc
	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
	$(POSTCOMPILE)

# build rust/ast files in rust folder
rust/%.o: rust/ast/%.cc
	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
	$(POSTCOMPILE)

# build rust/backend files in rust folder
rust/%.o: rust/backend/%.cc
	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
	$(POSTCOMPILE)

# build rust/expand files in rust folder
rust/%.o: rust/expand/%.cc
	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
	$(POSTCOMPILE)

# build rust/util files in rust folder
rust/%.o: rust/util/%.cc
	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
	$(POSTCOMPILE)

# build rust/hir files in rust folder
rust/%.o: rust/hir/%.cc
	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
	$(POSTCOMPILE)

# build rust/hir/tree files in rust folder
rust/%.o: rust/hir/tree/%.cc
	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
	$(POSTCOMPILE)

# build rust/resolve files in rust folder
rust/%.o: rust/resolve/%.cc
	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
	$(POSTCOMPILE)

# build rust/typecheck files in rust folder
rust/%.o: rust/typecheck/%.cc
	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
	$(POSTCOMPILE)

# build rust/checks/lints files in rust folder
rust/%.o: rust/checks/lints/%.cc
	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
	$(POSTCOMPILE)

# build rust/checks/errors files in rust folder
rust/%.o: rust/checks/errors/%.cc
	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
	$(POSTCOMPILE)

# build privacy pass files in rust folder
rust/%.o: rust/checks/errors/privacy/%.cc
	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
	$(POSTCOMPILE)

# build rust/metadata files in rust folder
rust/%.o: rust/metadata/%.cc
	$(COMPILE) $(RUST_CXXFLAGS) $(RUST_INCLUDES) $<
	$(POSTCOMPILE)
