The module cache escapes the test output dirs in this test. Since its default location maybe composed of system and user related path this can cause problems in some builders (e.g. not accessible paths inherited in a chroot environment). Clean the test a bit by passing `-fmodules-cache-path` inside the test output dirs. Differential Revision: https://reviews.llvm.org/D133617
174 lines
6.3 KiB
C
174 lines
6.3 KiB
C
// Test scanning when the driver requires multiple jobs. E.g. with -save-temps
|
|
// there will be separate -E, -emit-llvm-bc, -S, and -cc1as jobs, which should
|
|
// each result in a "command" in the output.
|
|
|
|
// We use an x86_64-apple-darwin target to avoid host-dependent behaviour in
|
|
// the driver. Platforms without an integrated assembler have different commands
|
|
// REQUIRES: x86-registered-target
|
|
|
|
// RUN: rm -rf %t
|
|
// RUN: split-file %s %t
|
|
// RUN: sed -e "s|DIR|%/t|g" %t/cdb.json.in > %t/cdb.json
|
|
|
|
// RUN: clang-scan-deps -compilation-database %t/cdb.json -module-files-dir %t/modules \
|
|
// RUN: -j 1 -format experimental-full -mode preprocess-dependency-directives \
|
|
// RUN: > %t/deps.json
|
|
|
|
// RUN: cat %t/deps.json | sed 's:\\\\\?:/:g' | FileCheck %s -DPREFIX=%/t
|
|
|
|
// Build the -save-temps + -fmodules case
|
|
// RUN: %deps-to-rsp %t/deps.json --module-name=Mod > %t/Mod.rsp
|
|
// RUN: %deps-to-rsp %t/deps.json --tu-index 1 --tu-cmd-index 0 > %t/tu-cpp.rsp
|
|
// RUN: %deps-to-rsp %t/deps.json --tu-index 1 --tu-cmd-index 1 > %t/tu-emit-ir.rsp
|
|
// RUN: %deps-to-rsp %t/deps.json --tu-index 1 --tu-cmd-index 2 > %t/tu-emit-asm.rsp
|
|
// RUN: %deps-to-rsp %t/deps.json --tu-index 1 --tu-cmd-index 3 > %t/tu-cc1as.rsp
|
|
// RUN: %clang @%t/Mod.rsp
|
|
// RUN: %clang @%t/tu-cpp.rsp
|
|
// RUN: ls %t/tu_save_temps_module.i
|
|
// RUN: %clang @%t/tu-emit-ir.rsp
|
|
// RUN: ls %t/tu_save_temps_module.bc
|
|
// RUN: %clang @%t/tu-emit-asm.rsp
|
|
// RUN: ls %t/tu_save_temps_module.s
|
|
// RUN: %clang @%t/tu-cc1as.rsp
|
|
// RUN: ls %t/tu_save_temps_module.o
|
|
|
|
|
|
// CHECK: "modules": [
|
|
// CHECK-NEXT: {
|
|
// CHECK: "clang-modulemap-file": "[[PREFIX]]{{.}}module.modulemap"
|
|
// CHECK: "name": "Mod"
|
|
// CHECK: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: "translation-units": [
|
|
// CHECK-NEXT: {
|
|
// CHECK: "commands": [
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "clang-context-hash":
|
|
// CHECK-NEXT: "clang-module-deps": []
|
|
// CHECK-NEXT: "command-line": [
|
|
// CHECK-NEXT: "-cc1"
|
|
// CHECK: "-o"
|
|
// CHECK-NEXT: "{{.*}}tu_no_integrated_cpp{{.*}}.i"
|
|
// CHECK: "-E"
|
|
// CHECK: ]
|
|
// CHECK-NEXT: "executable": "clang_tool"
|
|
// CHECK: "input-file": "[[PREFIX]]{{.}}tu_no_integrated_cpp.c"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "clang-context-hash":
|
|
// CHECK-NEXT: "clang-module-deps": []
|
|
// CHECK-NEXT: "command-line": [
|
|
// CHECK-NEXT: "-cc1"
|
|
// CHECK: "-o"
|
|
// CHECK-NEXT: "{{.*}}tu_no_integrated_cpp.o"
|
|
// CHECK: "-emit-obj"
|
|
// CHECK: "{{.*}}tu_no_integrated_cpp{{.*}}.i"
|
|
// CHECK: ]
|
|
// CHECK-NEXT: "executable": "clang_tool"
|
|
// CHECK: "input-file": "[[PREFIX]]{{.}}tu_no_integrated_cpp.c"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: {
|
|
// CHECK-NEXT: "commands": [
|
|
// CHECK-NEXT: {
|
|
// CHECK: "clang-module-deps": [
|
|
// CHECK-NEXT: {
|
|
// CHECK: "module-name": "Mod"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: "command-line": [
|
|
// CHECK-NEXT: "-cc1"
|
|
// CHECK: "-o"
|
|
// CHECK-NEXT: "{{.*}}tu_save_temps_module.i"
|
|
// CHECK: "-E"
|
|
// CHECK: "-fmodule-file={{.*}}[[PREFIX]]{{.}}modules{{.*}}Mod-{{.*}}.pcm"
|
|
// CHECK: "{{.*}}tu_save_temps_module.c"
|
|
// CHECK: ]
|
|
// CHECK-NEXT: "executable": "clang_tool"
|
|
// CHECK: "input-file": "[[PREFIX]]{{.}}tu_save_temps_module.c"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: {
|
|
// CHECK: "clang-module-deps": [
|
|
// CHECK-NEXT: {
|
|
// CHECK: "module-name": "Mod"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: "command-line": [
|
|
// CHECK-NEXT: "-cc1"
|
|
// CHECK: "-o"
|
|
// CHECK-NEXT: "{{.*}}tu_save_temps_module.bc"
|
|
// CHECK: "-emit-llvm-bc"
|
|
// CHECK: "{{.*}}tu_save_temps_module.i"
|
|
// CHECK: "-fmodule-file={{.*}}[[PREFIX]]{{.}}modules{{.*}}Mod-{{.*}}.pcm"
|
|
// CHECK: ]
|
|
// CHECK-NEXT: "executable": "clang_tool"
|
|
// CHECK: "input-file": "[[PREFIX]]{{.}}tu_save_temps_module.c"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: {
|
|
// CHECK: "clang-module-deps": [
|
|
// CHECK-NEXT: {
|
|
// CHECK: "module-name": "Mod"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: "command-line": [
|
|
// CHECK-NEXT: "-cc1"
|
|
// CHECK: "-o"
|
|
// CHECK-NEXT: "{{.*}}tu_save_temps_module.s"
|
|
// CHECK: "-S"
|
|
// CHECK: "{{.*}}tu_save_temps_module.bc"
|
|
// CHECK: ]
|
|
// CHECK-NEXT: "executable": "clang_tool"
|
|
// CHECK: "input-file": "[[PREFIX]]{{.}}tu_save_temps_module.c"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: {
|
|
// CHECK: "clang-module-deps": [
|
|
// CHECK-NEXT: {
|
|
// CHECK: "module-name": "Mod"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: "command-line": [
|
|
// CHECK-NEXT: "-cc1as"
|
|
// CHECK: "-o"
|
|
// CHECK-NEXT: "{{.*}}tu_save_temps_module.o"
|
|
// CHECK: "{{.*}}tu_save_temps_module.s"
|
|
// CHECK: ]
|
|
// CHECK-NEXT: "executable": "clang_tool"
|
|
// CHECK: "input-file": "[[PREFIX]]{{.}}tu_save_temps_module.c"
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: ]
|
|
|
|
|
|
//--- cdb.json.in
|
|
[
|
|
{
|
|
"directory": "DIR"
|
|
"command": "clang_tool -target x86_64-apple-darwin -c DIR/tu_no_integrated_cpp.c -no-integrated-cpp -o DIR/tu_no_integrated_cpp.o"
|
|
"file": "DIR/tu_no_integrated_cpp.c"
|
|
},
|
|
{
|
|
"directory": "DIR"
|
|
"command": "clang_tool -target x86_64-apple-darwin -c DIR/tu_save_temps_module.c -save-temps=obj -o DIR/tu_save_temps_module.o -fmodules -fimplicit-modules -fimplicit-module-maps -fmodules-cache-path=DIR/cache"
|
|
"file": "DIR/tu_save_temps_module.c"
|
|
}
|
|
]
|
|
|
|
//--- plain_header.h
|
|
void foo(void);
|
|
|
|
//--- module_header.h
|
|
void bar(void);
|
|
|
|
//--- module.modulemap
|
|
module Mod { header "module_header.h" }
|
|
|
|
//--- tu_no_integrated_cpp.c
|
|
#include "plain_header.h"
|
|
void tu_no_integrated_cpp(void) { foo(); }
|
|
|
|
//--- tu_save_temps_module.c
|
|
#include "module_header.h"
|
|
void tu_save_temps(void) { bar(); }
|