From e4d12a04684ad7792f797fb676541af99311d941 Mon Sep 17 00:00:00 2001 From: ThiƩbaud Weksteen Date: Fri, 5 Jun 2020 11:09:27 +0200 Subject: Add rust-project.json generator Because we are not relying on Cargo.toml for our crate dependencies, we need to provide a structured file to rust-analyzer which describes the locations of the crates. Add a generator for that purpose, similarly to cc/compdb and cc/ccdeps. Bug: 156395307 Test: SOONG_GEN_RUST_PROJECT=1 m nothing && \ cat ${ANDROID_BUILD_TOP}/out/soong/rust-project.json Change-Id: I46efe0adeddae281eaf86707504c3aa15b5e80b8 --- rust/project_json_test.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 rust/project_json_test.go (limited to 'rust/project_json_test.go') diff --git a/rust/project_json_test.go b/rust/project_json_test.go new file mode 100644 index 000000000..6786e72c7 --- /dev/null +++ b/rust/project_json_test.go @@ -0,0 +1,55 @@ +// Copyright 2020 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package rust + +import ( + "io/ioutil" + "path/filepath" + "testing" + + "android/soong/android" + "android/soong/cc" +) + +func TestProjectJson(t *testing.T) { + bp := `rust_library { + name: "liba", + srcs: ["src/lib.rs"], + crate_name: "a" + }` + GatherRequiredDepsForTest() + env := map[string]string{"SOONG_GEN_RUST_PROJECT": "1"} + fs := map[string][]byte{ + "foo.rs": nil, + "src/lib.rs": nil, + } + + cc.GatherRequiredFilesForTest(fs) + + config := android.TestArchConfig(buildDir, env, bp, fs) + ctx := CreateTestContext() + ctx.Register(config) + _, errs := ctx.ParseFileList(".", []string{"Android.bp"}) + android.FailIfErrored(t, errs) + _, errs = ctx.PrepareBuildActions(config) + android.FailIfErrored(t, errs) + + // The JSON file is generated via WriteFileToOutputDir. Therefore, it + // won't appear in the Output of the TestingSingleton. Manually verify + // it exists. + _, err := ioutil.ReadFile(filepath.Join(buildDir, "rust-project.json")) + if err != nil { + t.Errorf("rust-project.json has not been generated") + } +} -- cgit v1.2.3-59-g8ed1b