76 lines · c
1/// PS4 clang emits warnings when SDK headers (<SDKROOT>/target/include/) or2/// libraries (<SDKROOT>/target/lib/) are missing. If the the user takes control3/// of header search paths, the existence check for <SDKROOT>/target/include is4/// skipped.5///6/// User control of header search is assumed if `--sysroot`, `-isysroot`,7/// `-nostdinc` or `-nostdlibinc` is supplied.8///9/// Warnings are emitted if a specified `-isysroot` or `--sysroot` does not10/// exist.11///12/// The default <SDKROOT> for both headers and libraries is taken from the13/// SCE_ORBIS_SDK_DIR environment variable.14///15/// In ThinLTO code generation mode (-fthinlto-index=) SDK files are not required16/// so all warnings are suppressed.17 18// RUN: echo "-### -Winvalid-or-nonexistent-directory -target x86_64-scei-ps4" > %t.rsp19 20/// If SDK headers and/or libraries are found, associated warnings are absent.21// RUN: rm -rf %t.inconly && mkdir -p %t.inconly/target/include22// RUN: env SCE_ORBIS_SDK_DIR=%t.inconly %clang @%t.rsp %s 2>&1 | FileCheck -check-prefixes=WARN-SYS-LIBS,NO-WARN %s23 24// RUN: rm -rf %t.libonly && mkdir -p %t.libonly/target/lib25// RUN: env SCE_ORBIS_SDK_DIR=%t.libonly %clang @%t.rsp %s 2>&1 | FileCheck -check-prefixes=WARN-SYS-HEADERS,NO-WARN %s26 27// RUN: rm -rf %t.both && mkdir -p %t.both/target/lib && mkdir %t.both/target/include28// RUN: env SCE_ORBIS_SDK_DIR=%t.both %clang @%t.rsp %s 2>&1 | FileCheck -check-prefix=NO-WARN %s29 30/// In the following invocations, SCE_ORBIS_SDK_DIR is set to an existing31/// location where SDK headers and libraries are absent.32 33/// When compiling and linking, we should see a warnings about both missing34/// headers and libraries.35// RUN: env SCE_ORBIS_SDK_DIR=.. %clang @%t.rsp %s 2>&1 | FileCheck -check-prefixes=WARN-SYS-HEADERS,WARN-SYS-LIBS,NO-WARN %s36 37/// -fthinlto-index= warning suppression.38// RUN: touch %t_dummy.o39// RUN: env SCE_ORBIS_SDK_DIR=.. %clang @%t.rsp %t_dummy.o -fthinlto-index=ignored -c 2>&1 | FileCheck -check-prefixes=NO-WARN %s40 41/// If `-c`, `-S`, `-E` or `-emit-ast` is supplied, the existence check for SDK42/// libraries is skipped because no linking will be performed. We only expect43/// warnings about missing headers.44// RUN: env SCE_ORBIS_SDK_DIR=.. %clang @%t.rsp %s -c 2>&1 | FileCheck -check-prefixes=WARN-SYS-HEADERS,NO-WARN %s45// RUN: env SCE_ORBIS_SDK_DIR=.. %clang @%t.rsp %s -S 2>&1 | FileCheck -check-prefixes=WARN-SYS-HEADERS,NO-WARN %s46// RUN: env SCE_ORBIS_SDK_DIR=.. %clang @%t.rsp %s -E 2>&1 | FileCheck -check-prefixes=WARN-SYS-HEADERS,NO-WARN %s47// RUN: env SCE_ORBIS_SDK_DIR=.. %clang @%t.rsp %s -emit-ast 2>&1 | FileCheck -check-prefixes=WARN-SYS-HEADERS,NO-WARN %s48 49/// If the user takes control of include paths, the existence check for headers50/// is not performed.51// RUN: env SCE_ORBIS_SDK_DIR=.. %clang @%t.rsp %s -c -nostdinc 2>&1 | FileCheck -check-prefix=NO-WARN %s52// RUN: env SCE_ORBIS_SDK_DIR=.. %clang @%t.rsp %s -c -nostdlibinc 2>&1 | FileCheck -check-prefix=NO-WARN %s53// RUN: env SCE_ORBIS_SDK_DIR=.. %clang @%t.rsp %s -c -isysroot . 2>&1 | FileCheck -check-prefixes=NO-WARN %s54// RUN: env SCE_ORBIS_SDK_DIR=.. %clang @%t.rsp %s -c --sysroot=. 2>&1 | FileCheck -check-prefixes=NO-WARN %s55 56/// --sysroot disables the existence check for headers. The check for libraries57/// remains.58// RUN: env SCE_ORBIS_SDK_DIR=.. %clang @%t.rsp %s --sysroot=. 2>&1 | FileCheck -check-prefixes=WARN-SYS-LIBS,NO-WARN %s59 60/// -isysroot overrides --sysroot for header search, but not library search.61// RUN: env SCE_ORBIS_SDK_DIR=.. %clang @%t.rsp %s -isysroot . --sysroot=%t.inconly 2>&1 | FileCheck -check-prefixes=ISYSTEM,WARN-SYS-LIBS,NO-WARN %s62// RUN: env SCE_ORBIS_SDK_DIR=.. %clang @%t.rsp %s --sysroot=%t.inconly -isysroot . 2>&1 | FileCheck -check-prefixes=ISYSTEM,WARN-SYS-LIBS,NO-WARN %s63 64/// Warnings are emitted if non-existent --sysroot/-isysroot are supplied.65// RUN: env SCE_ORBIS_SDK_DIR=.. %clang @%t.rsp %s --sysroot=foo -isysroot %t.both 2>&1 | FileCheck -check-prefixes=WARN-SYSROOT,WARN-SYS-LIBS,NO-WARN %s66// RUN: env SCE_ORBIS_SDK_DIR=.. %clang @%t.rsp %s -isysroot foo --sysroot=%t.both 2>&1 | FileCheck -check-prefixes=WARN-SYSROOT,NO-WARN %s67// RUN: env SCE_ORBIS_SDK_DIR=.. %clang @%t.rsp %s --sysroot=foo -isysroot bar 2>&1 | FileCheck -check-prefixes=WARN-SYSROOT,WARN-SYSROOT2,WARN-SYS-LIBS,NO-WARN %s68 69// NO-WARN-NOT: {{warning:|error:}}70// WARN-SYSROOT: warning: no such sysroot directory: 'foo'71// WARN-SYSROOT2: warning: no such sysroot directory: 'bar'72// WARN-SYS-LIBS: warning: unable to find PS4 system libraries directory73// WARN-SYS-HEADERS: warning: unable to find PS4 system headers directory74// NO-WARN-NOT: {{warning:|error:}}75// ISYSTEM: "-cc1"{{.*}}"-internal-externc-isystem" "./target/include"76