From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) by sourceware.org (Postfix) with ESMTPS id E43D2385740C; Wed, 14 Sep 2022 13:34:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E43D2385740C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-x632.google.com with SMTP id lc7so34832450ejb.0; Wed, 14 Sep 2022 06:34:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date; bh=n8CqdvJ5bO8V2P1X3aRFex3ac88F/9Uhtd5Tw9VjSno=; b=dvxMgw+sVF1vdhzMyw5RmiOcTj6s82r4ac1wJ1w1y/LRe9yddlkoMAuRZ0KqGYirBC ihsyM+b9IgdWTvdK/zgB3k0cMsRXPZK2YsF2FLnpqcx8WrMF5ODu6mTyCI8BUyrNuxTZ K7Dhrb7XScHikMyQaPk/E3gi/ARhh+JwffTOXTcEr2yB4T76TsYaLlPqgZuyMDGFX2Ib Vex31NZ/FQ9zD79tVSzzmNKKK1YEFy0eAgM0ENqS/IKhH1b6THQ0QI/vgCOZ8/LCjIV8 PyPMdg5x3OWLW5jCnVRHylCxhkxZrobQtfhVpXemZ8iSx3h54AtD0SMuS4ZJXAqxKnu5 89MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date; bh=n8CqdvJ5bO8V2P1X3aRFex3ac88F/9Uhtd5Tw9VjSno=; b=SV7xs9u5pENCMdQ4Gmc0kPd0uXzH8F6KwOSzrsJh8kx6a7Xu44als5x4iQEotw6yzc ap/7buqk2XzPIXhMHSrKUJCoZHPZe31JMFdfzF5R9uqfQHJRnWgKOk1+zPX6qpmzJv5k 881Gl7wpdlfyCMiNKSxbCmwEnvJXeqRjAlTSthpSieEXVAWB0yXPEPBrFyrSc1Itw6Yu gqhUX8ePHamhS/Ui1VeGCsyIo5wjfb9I/LSQ/N82Ete5o+maOWfzihziumhQFXAvFWcX tsmuMLPm2urPjqLQ4sgxICMZt4tt1WWACiY2redQHWsQjVltkja7Hvun4FohaM2p5lGo w4xQ== X-Gm-Message-State: ACgBeo3g5YwyEHkaawA7vgFedEvUC0fh1vs25oTV/bB7wLnvCzzOyyBX c0LbQ9rJoFODofGBpuXODB1y1xFJ4DEQ37no7i4KXTOB X-Google-Smtp-Source: AA6agR7lxXY9fD/UOCsS3CJpWMNGO7dUuDkU7XFswiabeOwl3Tyl/wVBLS8TcUxkbjd2bEVKA9RUDuyUsY7TMtX7Kqw= X-Received: by 2002:a17:907:971e:b0:77b:b0f3:6473 with SMTP id jg30-20020a170907971e00b0077bb0f36473mr13808021ejc.754.1663162462371; Wed, 14 Sep 2022 06:34:22 -0700 (PDT) MIME-Version: 1.0 References: <20220824115956.737931-1-philip.herron@embecosm.com> <20220824115956.737931-32-philip.herron@embecosm.com> In-Reply-To: <20220824115956.737931-32-philip.herron@embecosm.com> From: Richard Biener Date: Wed, 14 Sep 2022 15:34:10 +0200 Message-ID: Subject: Re: [PATCH Rust front-end v2 31/37] gccrs: Add GCC Rust front-end Make-lang.in To: philip.herron@embecosm.com Cc: gcc-patches@gcc.gnu.org, gcc-rust@gcc.gnu.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-8.2 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Wed, Aug 24, 2022 at 2:22 PM wrote: > > From: Philip Herron > > This is the Makefile for our front-end. > --- > gcc/rust/Make-lang.in | 400 ++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 400 insertions(+) > create mode 100644 gcc/rust/Make-lang.in > > diff --git a/gcc/rust/Make-lang.in b/gcc/rust/Make-lang.in > new file mode 100644 > index 00000000000..f687cc2f667 > --- /dev/null > +++ b/gcc/rust/Make-lang.in > @@ -0,0 +1,400 @@ > +# Make-lang.in -- Top level -*- makefile -*- fragment for GCC Rust front= end. > + > +# 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 > +# . > + > +# This file provides the language dependent support in the main Makefile= . > + > +#RUST_EXES =3D rust > + > +# Use strict warnings for this front end. > +rust-warn =3D $(STRICT_WARN) > + > +# Installation name. Useful for cross compilers and used during install. > +GCCRS_INSTALL_NAME :=3D $(shell echo gccrs|sed '$(program_transform_name= )') > +GCCRS_TARGET_INSTALL_NAME :=3D $(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 +=3D $(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 =3D \ > + $(GCC_OBJS) \ > + rust/rustspec.o \ > + $(END) > + > +gccrs$(exeext): $(GCCRS_D_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a $(L= IBDEPS) > + +$(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 transl= ation from the parse tree > +# to GENERIC > +# The compiler proper, not driver > +GRS_OBJS =3D \ > + 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-casts.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 \ > + $(END) > +# removed object files from here > + > +# All language-specific object files for Rust. > +RUST_ALL_OBJS =3D $(GRS_OBJS) $(RUST_TARGET_OBJS) > + > +rust_OBJS =3D $(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 +=3D check-rust > +lang_checks_parallelized +=3D check-rust > +check_rust_parallelize =3D 10 > + > +# Copies its dependencies into the source directory. This generally shou= ld be used for generated files > +# such as Bison output files which are not version-controlled, but shoul= d be included in any release > +# tarballs. This target will be executed during a bootstrap if =E2=80=98= --enable-generated-files-in-srcdir=E2=80=99 > +# 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 opti= onal 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 =E2=80=98--enable-generated-files-in-srcdir=E2=80=99 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 t= ree. > +# 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. Th= is target is only called by > +# =E2=80=98make bootstrap=E2=80=99 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. Thi= s 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. Thi= s 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 compi= ler 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_INS= TALL_NAME)$(exeext) > +# if test -f $(DESTDIR)$(bindir)$(GCCRS_TARGET_INSTALL_NAME)$(exeex= t); then \ > +# :; \ > +# else \ > +# cd $(DESTDIR)$(bindir) && \ > +# $(LN) $(GCCRS_INSTALL_NAME)$(exeext) $(GCCRS_TARGET_INSTALL_NA= ME)$(exeext); \ > +# fi > + -rm -f $(DESTDIR)$(bindir)/$(GCCRS_INSTALL_NAME)$(exeext) > + $(INSTALL_PROGRAM) gccrs$(exeext) $(DESTDIR)$(bindir)/$(GCCRS_INS= TALL_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 currentl= y 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 =3D -xrs $(SELFTEST_FLAGS) > +RUST_SELFTEST_DEPS =3D 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 +=3D -DDEFAULT_TARGET_VERSION=3D\"$(version)\" \ > + -DDEFAULT_TARGET_MACHINE=3D\"$(target_noncanonical)\" > + > +# cross-folder includes - add new folders later > +RUST_INCLUDES =3D -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 +=3D $(RUST_INCLUDES) > +CFLAGS-rust/rust-lex.o +=3D $(RUST_INCLUDES) > +CFLAGS-rust/rust-parse.o +=3D $(RUST_INCLUDES) > +CFLAGS-rust/rust-session-manager.o +=3D $(RUST_INCLUDES) > + > +# TODO: possibly find a way to ensure C++11 compilation level here? > +RUST_CXXFLAGS =3D -std=3Dc++11 -Wno-unused-parameter -Werror=3Doverloade= d-virtual You probably should inherit from $(CXXFLAGS) here which ensures C++11 compatibility. Note you have to deal with non-g++ host compilers when not bootstrapping so adding -Wno-unused-parameter -Werror=3Doverload-virtual needs to be guarded. > + > +# 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) > -- > 2.25.1 >