arphaman created this revision. arphaman added a reviewer: dexonsmith. Herald added subscribers: ributzka, jkorous. Herald added a project: clang.
Some projects use -nostdinc, but need to access some intrinsics files when building specific files. The new `-builtininc` flag lets them use this flag when compiling these files to ensure they can access Clang's builtin headers. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D73500 Files: clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/Darwin.cpp clang/test/Driver/darwin-header-search-system.cpp Index: clang/test/Driver/darwin-header-search-system.cpp =================================================================== --- clang/test/Driver/darwin-header-search-system.cpp +++ clang/test/Driver/darwin-header-search-system.cpp @@ -101,3 +101,31 @@ // CHECK-NOSYSROOT: "-internal-isystem" "/usr/local/include" // CHECK-NOSYSROOT: "-internal-isystem" "[[RESOURCE]]/include" // CHECK-NOSYSROOT: "-internal-externc-isystem" "/usr/include" + +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target x86_64-apple-darwin \ +// RUN: -ccc-install-dir %S/Inputs/basic_darwin_toolchain_no_libcxx/usr/bin \ +// RUN: -resource-dir=%S/Inputs/resource_dir \ +// RUN: -isysroot %S/Inputs/basic_darwin_sdk_usr_and_usr_local \ +// RUN: -nostdinc -builtininc \ +// RUN: | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_usr_and_usr_local \ +// RUN: -DRESOURCE=%S/Inputs/resource_dir \ +// RUN: --check-prefix=CHECK-NOSTDINC-BUILTINC %s +// CHECK-NOSTDINC-BUILTINC: "{{[^"]*}}clang{{[^"]*}}" "-cc1" +// CHECK-NOSTDINC-BUILTINC-NOT: "-internal-isystem" "[[SYSROOT]]/usr/local/include" +// CHECK-NOSTDINC-BUILTINC: "-internal-isystem" "[[RESOURCE]]/include" +// CHECK-NOSTDINC-BUILTINC-NOT: "-internal-externc-isystem" "[[SYSROOT]]/usr/include" + +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target x86_64-apple-darwin \ +// RUN: -ccc-install-dir %S/Inputs/basic_darwin_toolchain_no_libcxx/usr/bin \ +// RUN: -resource-dir=%S/Inputs/resource_dir \ +// RUN: -isysroot %S/Inputs/basic_darwin_sdk_usr_and_usr_local \ +// RUN: -nostdinc -builtininc -nobuiltininc \ +// RUN: | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_usr_and_usr_local \ +// RUN: -DRESOURCE=%S/Inputs/resource_dir \ +// RUN: --check-prefix=CHECK-NOSTDINC-NO-BUILTINC %s +// CHECK-NOSTDINC-NO-BUILTINC: "{{[^"]*}}clang{{[^"]*}}" "-cc1" +// CHECK-NOSTDINC-NO-BUILTINC-NOT: "-internal-isystem" "[[SYSROOT]]/usr/local/include" +// CHECK-NOSTDINC-NO-BUILTINC-NOT: "-internal-isystem" "[[RESOURCE]]/include" +// CHECK-NOSTDINC-NO-BUILTINC-NOT: "-internal-externc-isystem" "[[SYSROOT]]/usr/include" Index: clang/lib/Driver/ToolChains/Darwin.cpp =================================================================== --- clang/lib/Driver/ToolChains/Darwin.cpp +++ clang/lib/Driver/ToolChains/Darwin.cpp @@ -1871,6 +1871,7 @@ bool NoStdInc = DriverArgs.hasArg(options::OPT_nostdinc); bool NoStdlibInc = DriverArgs.hasArg(options::OPT_nostdlibinc); bool NoBuiltinInc = DriverArgs.hasArg(options::OPT_nobuiltininc); + bool ForceBuiltinInc = DriverArgs.hasArg(options::OPT_builtininc); // Add <sysroot>/usr/local/include if (!NoStdInc && !NoStdlibInc) { @@ -1880,7 +1881,7 @@ } // Add the Clang builtin headers (<resource>/include) - if (!NoStdInc && !NoBuiltinInc) { + if (!(NoStdInc && !ForceBuiltinInc) && !NoBuiltinInc) { SmallString<128> P(D.ResourceDir); llvm::sys::path::append(P, "include"); addSystemInclude(DriverArgs, CC1Args, P); Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -500,6 +500,8 @@ def a : Joined<["-"], "a">; def autocomplete : Joined<["--"], "autocomplete=">; def bind__at__load : Flag<["-"], "bind_at_load">; +def builtininc : Flag<["-"], "builtininc">, + HelpText<"Enable builtin #include directories even when -nostdinc is used">; def bundle__loader : Separate<["-"], "bundle_loader">; def bundle : Flag<["-"], "bundle">; def b : JoinedOrSeparate<["-"], "b">, Flags<[Unsupported]>;
Index: clang/test/Driver/darwin-header-search-system.cpp =================================================================== --- clang/test/Driver/darwin-header-search-system.cpp +++ clang/test/Driver/darwin-header-search-system.cpp @@ -101,3 +101,31 @@ // CHECK-NOSYSROOT: "-internal-isystem" "/usr/local/include" // CHECK-NOSYSROOT: "-internal-isystem" "[[RESOURCE]]/include" // CHECK-NOSYSROOT: "-internal-externc-isystem" "/usr/include" + +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target x86_64-apple-darwin \ +// RUN: -ccc-install-dir %S/Inputs/basic_darwin_toolchain_no_libcxx/usr/bin \ +// RUN: -resource-dir=%S/Inputs/resource_dir \ +// RUN: -isysroot %S/Inputs/basic_darwin_sdk_usr_and_usr_local \ +// RUN: -nostdinc -builtininc \ +// RUN: | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_usr_and_usr_local \ +// RUN: -DRESOURCE=%S/Inputs/resource_dir \ +// RUN: --check-prefix=CHECK-NOSTDINC-BUILTINC %s +// CHECK-NOSTDINC-BUILTINC: "{{[^"]*}}clang{{[^"]*}}" "-cc1" +// CHECK-NOSTDINC-BUILTINC-NOT: "-internal-isystem" "[[SYSROOT]]/usr/local/include" +// CHECK-NOSTDINC-BUILTINC: "-internal-isystem" "[[RESOURCE]]/include" +// CHECK-NOSTDINC-BUILTINC-NOT: "-internal-externc-isystem" "[[SYSROOT]]/usr/include" + +// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \ +// RUN: -target x86_64-apple-darwin \ +// RUN: -ccc-install-dir %S/Inputs/basic_darwin_toolchain_no_libcxx/usr/bin \ +// RUN: -resource-dir=%S/Inputs/resource_dir \ +// RUN: -isysroot %S/Inputs/basic_darwin_sdk_usr_and_usr_local \ +// RUN: -nostdinc -builtininc -nobuiltininc \ +// RUN: | FileCheck -DSYSROOT=%S/Inputs/basic_darwin_sdk_usr_and_usr_local \ +// RUN: -DRESOURCE=%S/Inputs/resource_dir \ +// RUN: --check-prefix=CHECK-NOSTDINC-NO-BUILTINC %s +// CHECK-NOSTDINC-NO-BUILTINC: "{{[^"]*}}clang{{[^"]*}}" "-cc1" +// CHECK-NOSTDINC-NO-BUILTINC-NOT: "-internal-isystem" "[[SYSROOT]]/usr/local/include" +// CHECK-NOSTDINC-NO-BUILTINC-NOT: "-internal-isystem" "[[RESOURCE]]/include" +// CHECK-NOSTDINC-NO-BUILTINC-NOT: "-internal-externc-isystem" "[[SYSROOT]]/usr/include" Index: clang/lib/Driver/ToolChains/Darwin.cpp =================================================================== --- clang/lib/Driver/ToolChains/Darwin.cpp +++ clang/lib/Driver/ToolChains/Darwin.cpp @@ -1871,6 +1871,7 @@ bool NoStdInc = DriverArgs.hasArg(options::OPT_nostdinc); bool NoStdlibInc = DriverArgs.hasArg(options::OPT_nostdlibinc); bool NoBuiltinInc = DriverArgs.hasArg(options::OPT_nobuiltininc); + bool ForceBuiltinInc = DriverArgs.hasArg(options::OPT_builtininc); // Add <sysroot>/usr/local/include if (!NoStdInc && !NoStdlibInc) { @@ -1880,7 +1881,7 @@ } // Add the Clang builtin headers (<resource>/include) - if (!NoStdInc && !NoBuiltinInc) { + if (!(NoStdInc && !ForceBuiltinInc) && !NoBuiltinInc) { SmallString<128> P(D.ResourceDir); llvm::sys::path::append(P, "include"); addSystemInclude(DriverArgs, CC1Args, P); Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -500,6 +500,8 @@ def a : Joined<["-"], "a">; def autocomplete : Joined<["--"], "autocomplete=">; def bind__at__load : Flag<["-"], "bind_at_load">; +def builtininc : Flag<["-"], "builtininc">, + HelpText<"Enable builtin #include directories even when -nostdinc is used">; def bundle__loader : Separate<["-"], "bundle_loader">; def bundle : Flag<["-"], "bundle">; def b : JoinedOrSeparate<["-"], "b">, Flags<[Unsupported]>;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits