gcc/gcc/rust/Make-lang.in

397 lines
13 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Make-lang.in -- Top level -*- makefile -*- fragment for GCC Rust frontend.
# Copyright (C) 2009-2022 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)
# 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)
# 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-full-test.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-full-test.o \
rust/rust-hir-map.o \
rust/rust-attributes.o \
rust/rust-abi.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-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-call.o \
rust/rust-tyctx.o \
rust/rust-tyty-bounds.o \
rust/rust-hir-type-check-util.o \
rust/rust-hir-trait-resolve.o \
rust/rust-hir-type-check-toplevel.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-coercion.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-expr.o \
rust/rust-compile-type.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 \
$(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)
+$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
$(RUST_ALL_OBJS) attribs.o $(BACKEND) $(LIBS) $(BACKENDLIBS)
# 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 = -xrs $(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) $@
# 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)
# TODO: possibly find a way to ensure C++11 compilation level here?
RUST_CXXFLAGS = -std=c++11 -Wno-unused-parameter -Werror=overloaded-virtual
# 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)