Prechádzať zdrojové kódy

Update Linux build and test workflows to use lit (#4836)

* Update Linux build and test workflows to use lit

This change updates the build and test workflows in our azure pipelines
and the GitHub action for code coverage data to use lit instead of ctest
as the test runner. This adds additional test coverage by running some
of the LLVM & Clang tests.

* Fix missing dependency between LLVMAnalysis & DXIL

The default Linux linker fails because LLVMAnalysis depends on LLVMDXIL
and BFD doesn't cycle libraries.

* Updating pipelines to remove mkdir and cd

This just cleans up the pipeline shell commands to avoid unnecissary
mkdir and cd invocations.

Based on feedback from @Keenuts. Thanks!

* Disable LLVM LIT tests that use garbage collection

DXC disabled support for the LLVM garbage collection intrinsics.
Chris B 2 rokov pred
rodič
commit
36fdecf357

+ 4 - 4
.github/workflows/coverage-gh-pages.yml

@@ -33,13 +33,13 @@ jobs:
       - name: Install dependencies
         run: sudo apt install -y ninja-build
       - name: Configure
-        run: mkdir build && cd build && cmake -G Ninja -DLLVM_PARALLEL_LINK_JOBS=1 -DLLVM_USE_LINKER=lld -DCMAKE_BUILD_TYPE=Release -DDXC_COVERAGE=On -C ${{github.workspace}}/cmake/caches/PredefinedParams.cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ${{github.workspace}}
+        run: cmake -B build -G Ninja -DLLVM_PARALLEL_LINK_JOBS=1 -DLLVM_USE_LINKER=lld -DCMAKE_BUILD_TYPE=Release -DDXC_USE_LIT=On -DDXC_COVERAGE=On -C ${{github.workspace}}/cmake/caches/PredefinedParams.cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ${{github.workspace}}
       - name: Build
-        run: cd build && ninja
+        run: ninja -C build test-depends
       - name: Test
-        run: cd build && ctest --rerun-failed --output-on-failure
+        run: ninja -C build check-all
       - name: Generate Report
-        run: cd build && ninja generate-coverage-report
+        run: ninja -C build generate-coverage-report
       - name: Upload artifact
         uses: actions/upload-pages-artifact@v1
         with:

+ 8 - 9
azure-pipelines.yml

@@ -110,13 +110,10 @@ stages:
       displayName: 'Installing dependencies'
       condition: eq(variables['image'], variables['macOS'])
     - bash: |
-        mkdir build
-        cd build
-        cmake -G Ninja $BUILD_SOURCESDIRECTORY -C $BUILD_SOURCESDIRECTORY/cmake/caches/PredefinedParams.cmake -DSPIRV_BUILD_TESTS=ON -DCMAKE_BUILD_TYPE=$(configuration) -DCMAKE_C_COMPILER=$(CC) -DCMAKE_CXX_COMPILER=$(CXX) -DCMAKE_CXX_FLAGS=$(CXX_FLAGS)
+        cmake -B build -G Ninja $BUILD_SOURCESDIRECTORY -DLLVM_LIT_ARGS=--xunit-xml-output=testresults.xunit.xml -DDXC_USE_LIT=On -C $BUILD_SOURCESDIRECTORY/cmake/caches/PredefinedParams.cmake -DSPIRV_BUILD_TESTS=ON -DCMAKE_BUILD_TYPE=$(configuration) -DCMAKE_C_COMPILER=$(CC) -DCMAKE_CXX_COMPILER=$(CXX) -DCMAKE_CXX_FLAGS=$(CXX_FLAGS)
       displayName: 'Running Cmake'
     - bash: |
-        cd build
-        ninja
+        ninja -C build test-depends
       displayName: 'Building'
     - bash: |
         ./build/bin/dxc -T ps_6_0 tools/clang/test/CodeGenSPIRV/passthru-ps.hlsl2spv
@@ -125,8 +122,10 @@ stages:
         ls -ld $AGENT_BUILDDIRECTORY
         ls -ld $BUILD_SOURCESDIRECTORY
       displayName: 'Smoke tests'
-    - bash: ./build/bin/clang-spirv-tests --spirv-test-root tools/clang/test/CodeGenSPIRV/
-      displayName: 'SPIRV tests'
-    - bash: ./build/bin/clang-hlsl-tests --HlslDataDir $PWD/tools/clang/test/HLSL/
-      displayName: 'DXIL tests'
+    - bash: ninja -C build check-all
+      displayName: 'DXC tests'
+    - task: PublishTestResults@2
+      inputs:
+        testResultsFormat: 'XUnit'
+        testREsultsFiles: '**/testresults.xunit.xml'
 

+ 2 - 1
cmake/caches/PredefinedParams.cmake

@@ -9,6 +9,7 @@ if (DXC_COVERAGE)
   set(LLVM_BUILD_INSTRUMENTED_COVERAGE ON CACHE BOOL "")
   set(LLVM_PROFILE_DATA_DIR "${CMAKE_BINARY_DIR}/profile" CACHE STRING "")
   set(LLVM_CODE_COVERAGE_TARGETS "dxc;dxcompiler" CACHE STRING "")
+  set(LLVM_CODE_COVERAGE_TEST_TARGETS "check-all" CACHE STRING "")
 endif()
 
 if (DXC_USE_LIT)
@@ -38,4 +39,4 @@ set(CLANG_ENABLE_ARCMT OFF CACHE BOOL "")
 set(CLANG_ENABLE_STATIC_ANALYZER OFF CACHE BOOL "") 
 set(HLSL_INCLUDE_TESTS ON CACHE BOOL "") 
 set(ENABLE_SPIRV_CODEGEN ON CACHE BOOL "") 
-set(SPIRV_BUILD_TESTS ON CACHE BOOL "")
+set(SPIRV_BUILD_TESTS ON CACHE BOOL "")

+ 1 - 0
lib/Analysis/CMakeLists.txt

@@ -76,6 +76,7 @@ add_llvm_library(LLVMAnalysis
   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Analysis
   )
 
+target_link_libraries(LLVMAnalysis INTERFACE LLVMDXIL) # HLSL Change
 add_dependencies(LLVMAnalysis intrinsics_gen)
 
 add_subdirectory(IPA)

+ 2 - 0
test/Verifier/gc_relocate_addrspace.ll

@@ -2,6 +2,8 @@
 ; This is to verify that gc_relocate must return a pointer with the same
 ; address space with the relocated value.
 
+; REQUIRES: hlsl-gc.statepoint-unsupported
+
 ; CHECK:       gc.relocate: relocating a pointer shouldn't change its address space
 ; CHECK-NEXT:  %obj.relocated = call coldcc i8* @llvm.experimental.gc.relocate.p0i8(i32 %safepoint_token, i32 7, i32 7) ;
 

+ 1 - 0
test/Verifier/gc_relocate_operand.ll

@@ -1,6 +1,7 @@
 ; RUN: not llvm-as -disable-output <%s 2>&1 | FileCheck %s
 ; This is to verify that the relocated value by gc_relocate must be a pointer type.
 
+; REQUIRES: hlsl-gc.statepoint-unsupported
 ; CHECK: gc.relocate: relocated value must be a gc pointer
 
 declare void @foo()

+ 1 - 0
test/Verifier/gc_relocate_return.ll

@@ -2,6 +2,7 @@
 ; This is to verify that gc_relocate must return a pointer type, which is defined
 ; in intrinsics.td.
 
+; REQUIRES: hlsl-gc.statepoint-unsupported
 ; CHECK: Intrinsic has incorrect return type!
 
 declare void @foo()

+ 1 - 0
test/Verifier/invalid-statepoint2.ll

@@ -1,5 +1,6 @@
 ; RUN: not opt -S < %s -verify 2>&1 | FileCheck %s
 
+; REQUIRES: hlsl-gc.statepoint-unsupported
 ; CHECK: gc.statepoint: number of deoptimization arguments must be a constant integer
 
 declare void @use(...)