From nobody Fri Dec 19 04:00:08 2025 Received: from mail-qt1-f181.google.com (mail-qt1-f181.google.com [209.85.160.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9C3861C5D76; Wed, 12 Mar 2025 01:17:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741742279; cv=none; b=p493MszVKWBo2EtjTt3KIgSpi1rJ6BEgKpD6Y3Co2Y8He9M3DPP41324x8UzFuGnmsfPRUrqyVrcNoZWsbq6un7u1cnovbmAHYNuyJff+klK2WAFDXh8iRsWSuv4QSKnlSaJrHlt1VNVoVQvCA5hBpcoQ+lxRGrHWs0Zm6kp7cg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741742279; c=relaxed/simple; bh=ym0uAM3173NwIdccsvRUaTQeHfi8HeK6xwWWzGXaISs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=P0950ECdH3jcV7cEUih391dQnM5bBmT55t8lpZlUKcgeOhs5cBuJMKBZVd59BsjVMjnPGGvH5m1p+23SmWcCrZEM9x1GwGBk2vKSKBIMCkuEG6lHyQIOWi0vXDHo7NtJqGUsHOJgL9u82SS7qJcx08c/ulU4Q21c1ShjWMw2GX4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=XE1zuuqQ; arc=none smtp.client-ip=209.85.160.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XE1zuuqQ" Received: by mail-qt1-f181.google.com with SMTP id d75a77b69052e-4769f3e19a9so8696291cf.0; Tue, 11 Mar 2025 18:17:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741742275; x=1742347075; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=vuT/y5FKHmoEEzYb5QENOtK4YXwQR2+9pGyPJGYhzrk=; b=XE1zuuqQvKqfdltd3GWO3UAW3nBO5c5SWldXK2rq2KZrm/9+2b4mbtNXHCKE2JH4ls ls4X2Fx+6LMTlC9PEbjoPySssAScoL0ePZAgux660UCZKnsnhM/3AkPsC4/KEauJD+VI JQppNXudrbmIR6i2kiwWckg9NO8AEoDSoryNOikT3YYOvKFvOGAClKPZba5ZosI/MYz3 knY0i1dg238AEPBH4EbiNfFMH9+vqsZ+xt1psUh25OXNdmBLsIikAsYXNn/38ec+44KS 0qdYXQ3PdC2xO++a9PtV4D2xdUw8yRJMjPM+GfiaVfp+LH4w1Q21tP2KhQhNeB76J0Cv /Dbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741742275; x=1742347075; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vuT/y5FKHmoEEzYb5QENOtK4YXwQR2+9pGyPJGYhzrk=; b=HsNDaCc87jGhXtsbcHoDNkd/WKXJ391qjP0vkZCgFlrRpe+6DUSZZZW1tfAZUbYyHK 9vH2Kr8VZYGo4E9pRXlJFraLotke5AEcDN7ENgbGpYrT4MSamoi6xnMHWTQ/dC5F1FvS CtRE9NzzxDMnXdvb7Y6pkeD2ymOuWGUbsp1zIB/UBC/Ts7DSgRdlTSU/fQ31Gx6If3Hs VwjBaisJDI+ipHz/CsIxJNaHlQSu5WADs48HCPuQNM0MIhJCxR35h94Usrt0FhQ/A4cH 4OVoZVOlXxqVSsLR4dwtlcfCflMBDcEHtXp6pzKgftn/a4cNBMcrc854ESMlNXmaTipg PKag== X-Forwarded-Encrypted: i=1; AJvYcCU3/h2A2TpLei6HR/m/0399jddRBlFmJCxq6EU5MkAuf+rA4IxjS8suIowkGyMboaCxrjMirdAj/lHCz7k=@vger.kernel.org X-Gm-Message-State: AOJu0YygaTVSPxz1MhBKO5IWOd6Oam/dz8sAckkNVXAk7Skjd3r/1HtJ QZQsEe0WBY0eRijzb+oYUYxvk1dBk26Wz03pyQaixfU+sobV3f8y X-Gm-Gg: ASbGnctVJCjUosFuQTjeP1ucexBTiXDTPMN2x2IemUFJPb1I47MYrqvlJJWLRpfv45N Z1OUl3XR/1rTnAu+9aXT1mMdWvoYvSDoWSw+GjTuQ9DxKscze5e/Ve6avwEmC9LqpGPvqQSOAQs cy6sjAwGtAGS7fog7ZtcPmnj/cZmmEa9+XfdSwn1fyDAOg91PTlCMXkbKAZdCuJk3uKGArgXkrA A1UOwTi8hALwwh03FVXCDGWpXvbsmib/PfwsmDrs+YPG18O5Nq2mgCGciW+bQNNGVTzaz4awoOQ U2NPGXTA0QkvLSFIde17QVuQTj+EuiVH35/nGpD7Zb+I4fyTehxAZvlfum6gstTRlKgA X-Google-Smtp-Source: AGHT+IEIoOnXopKN0MF1B/3JIUyExCdONXIMAt+tn3yriPRLRlhcuPXT2fKYNdhEQR4lggfTpTocJA== X-Received: by 2002:a05:6214:e49:b0:6e8:f5db:d78d with SMTP id 6a1803df08f44-6e90067700amr233796776d6.23.1741742275373; Tue, 11 Mar 2025 18:17:55 -0700 (PDT) Received: from tamird-mac.local ([2600:4041:5be7:7c00:2017:ee95:21ab:177f]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6e8f70915ebsm78599976d6.49.2025.03.11.18.17.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Mar 2025 18:17:54 -0700 (PDT) From: Tamir Duberstein Date: Tue, 11 Mar 2025 21:17:27 -0400 Subject: [PATCH v2 6/7] scripts: generate_rust_analyzer.py: identify crates explicitly Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250311-rust-analyzer-host-v2-6-30220e116511@gmail.com> References: <20250311-rust-analyzer-host-v2-0-30220e116511@gmail.com> In-Reply-To: <20250311-rust-analyzer-host-v2-0-30220e116511@gmail.com> To: Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Boris-Chengbiao Zhou , Kees Cook , Fiona Behrens Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, Lukas Wirth , Tamir Duberstein X-Mailer: b4 0.15-dev Use the return of `append_crate` to declare dependency on that crate. This allows multiple crates with the same display_name be defined, which we'll use to define host crates separately from target crates. Signed-off-by: Tamir Duberstein Reviewed-by: Fiona Behrens --- scripts/generate_rust_analyzer.py | 60 +++++++++++++++++++----------------= ---- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/scripts/generate_rust_analyzer.py b/scripts/generate_rust_anal= yzer.py index 1bb185ae2e87..e1002867735b 100755 --- a/scripts/generate_rust_analyzer.py +++ b/scripts/generate_rust_analyzer.py @@ -68,40 +68,38 @@ def generate_crates( line =3D line.replace("\n", "") cfg.append(line) =20 - # Now fill the crates list -- dependencies need to come first. - # - # Avoid O(n^2) iterations by keeping a map of indexes. + # Now fill the crates list. crates: list[Crate] =3D [] - crates_indexes: dict[str, int] =3D {} crates_cfgs =3D args_crates_cfgs(cfgs) =20 def append_crate( display_name: str, root_module: pathlib.Path, - deps: list[str], + deps: list[Dependency], cfg: list[str] =3D [], is_workspace_member: bool =3D True, - ) -> None: - crates_indexes[display_name] =3D len(crates) + ) -> Dependency: + index =3D len(crates) crates.append({ "display_name": display_name, "root_module": str(root_module), "is_workspace_member": is_workspace_member, - "deps": [{"crate": crates_indexes[dep], "name": dep} for dep i= n deps], + "deps": deps, "cfg": cfg, "edition": "2021", "env": { "RUST_MODFILE": "This is only for rust-analyzer" }, }) + return {"crate": index, "name": display_name} =20 def append_proc_macro_crate( display_name: str, root_module: pathlib.Path, - deps: list[str], + deps: list[Dependency], cfg: list[str] =3D [], - ) -> None: - append_crate(display_name, root_module, deps, cfg) + ) -> Dependency: + dep =3D append_crate(display_name, root_module, deps, cfg) proc_macro_dylib_name =3D subprocess.check_output( [os.environ["RUSTC"], "--print", "file-names", "--crate-name",= display_name, "--crate-type", "proc-macro", "-"], stdin=3Dsubprocess.DEVNULL, @@ -112,13 +110,14 @@ def generate_crates( "proc_macro_dylib_path": str(objtree / "rust" / proc_macro_dyl= ib_name), } crates[-1] =3D crate + return dep =20 def append_sysroot_crate( display_name: str, - deps: list[str], + deps: list[Dependency], cfg: list[str] =3D [], - ) -> None: - append_crate( + ) -> Dependency: + return append_crate( display_name, sysroot_src / display_name / "src" / "lib.rs", deps, @@ -129,34 +128,34 @@ def generate_crates( # NB: sysroot crates reexport items from one another so setting up our= transitive dependencies # here is important for ensuring that rust-analyzer can resolve symbol= s. The sources of truth # for this dependency graph are `(sysroot_src / crate / "Cargo.toml" f= or crate in crates)`. - append_sysroot_crate("core", [], cfg=3Dcrates_cfgs.get("core", [])) - append_sysroot_crate("alloc", ["core"]) - append_sysroot_crate("std", ["alloc", "core"]) - append_sysroot_crate("proc_macro", ["core", "std"]) + core =3D append_sysroot_crate("core", [], cfg=3Dcrates_cfgs.get("core"= , [])) + alloc =3D append_sysroot_crate("alloc", [core]) + std =3D append_sysroot_crate("std", [alloc, core]) + proc_macro =3D append_sysroot_crate("proc_macro", [core, std]) =20 - append_crate( + compiler_builtins =3D append_crate( "compiler_builtins", srctree / "rust" / "compiler_builtins.rs", [], ) =20 - append_proc_macro_crate( + macros =3D append_proc_macro_crate( "macros", srctree / "rust" / "macros" / "lib.rs", - ["std", "proc_macro"], + [std, proc_macro], ) =20 - append_crate( + build_error =3D append_crate( "build_error", srctree / "rust" / "build_error.rs", - ["core", "compiler_builtins"], + [core, compiler_builtins], ) =20 def append_crate_with_generated( display_name: str, - deps: list[str], - ) -> None: - append_crate( + deps: list[Dependency], + ) -> Dependency: + dep =3D append_crate( display_name, srctree / "rust" / display_name / "lib.rs", deps, @@ -174,10 +173,11 @@ def generate_crates( } } crates[-1] =3D crate + return dep =20 - append_crate_with_generated("bindings", ["core"]) - append_crate_with_generated("uapi", ["core"]) - append_crate_with_generated("kernel", ["core", "macros", "build_error"= , "bindings", "uapi"]) + bindings =3D append_crate_with_generated("bindings", [core]) + uapi =3D append_crate_with_generated("uapi", [core]) + kernel =3D append_crate_with_generated("kernel", [bindings, build_erro= r, core, macros, uapi]) =20 def is_root_crate(build_file: pathlib.Path, target: str) -> bool: try: @@ -207,7 +207,7 @@ def generate_crates( append_crate( name, path, - ["core", "kernel"], + [core, kernel], cfg=3Dcfg, ) =20 --=20 2.48.1