From 4321929879c1ed5b87ff95a99ca7da91e28d18fd Mon Sep 17 00:00:00 2001 From: Ellie Hermaszewska Date: Fri, 8 Dec 2023 19:24:34 +0800 Subject: WIP: CMake (#3326) * More robust input and output selection in generator tools * Add cmake build system * Get slang-test running with cmake * Bump lz4 and miniz dependencies * Make cmake build more declarative * Correct preprocessor logic in slang.h * Add cuda test to compute/simple * Remove empty cmake files * output placement for cmake, and commenting * Correct include paths in spirv-embed-generator * Format cmake with gersemi * Make cmake build clerer * Neaten header generation Also work around https://gitlab.kitware.com/cmake/cmake/-/issues/18399 by introducing correct_generated_properties to set the GENERATED flag in the correct scope * remove unused files * use 3.20 to set GENERATOR property properly * spelling * more flexible linker arg setting * replace slang-static with obj collection * Set rpath and linker path correctly * neaten generated file generation * tests working with cmake build * fix premake5 build * comment and neaten cmake * remove unnecessary dependency * Build aftermath example only when aftermath is enabled * Add slang-llvm and other dependencies * Put modules alongside binaries * Find slang-glslang correctly * Better option handling * comments * add llvm build test * Better option handling * cmake wobble * use UNICODE and _UNICODE * remove other workflows * use ccache * neaten * limit parallel for llvm build * use ninja for build * Windows and Darwin slang-llvm builds * cache key * verbose llvm build * cl on windows * sccache and cl.exe * use cl.exe * Correct package detection * less verbosity * Simplify miniz inclusion * fix build with sccache * Neaten llvm building * neaten * Neaten slang-llvm fetching * more surgical workarounds * Add ci action * Get version from git * better variable naming * add missing include * clean up after premake in cmake * more docs on cmake build * ci wobble * add imgui target * more selective source * do not download swiftshader * Some missing dependencies * only build llvm on dispatch * Disable /Zi in CI where sccache is present * simplify * set PIC for miniz * set policies before project * reengage workaround * more runs on ci * Add cmake presets * Add cpack * move iterator debug level to preset * Correct lib flag * simplify action * Neaten cmake init * Add todo * Add simple test wrapper * Add tests to workflow presets * rename packing preset * Correctly set definitions * docs * correct preset names * Make slang-test depend on test-server/test-process * neaten * use workflow in actions * install docs * Correct module install dir * debug dist workflow * Install headers * neaten header globbing * Neaten dependency handling * make lib and bin variables * Do not set compiler for vs builds, unnecessary * docs * allow setting explicit source for target * maintain archive subdir * cmake docs * install headers * place targets into folders * cmake docs * nest external projects in folder * remove name clash * Neater external packages * meta targets in folder structure * cleaner slang-glslang dll * Add missing static directive to slang-no-embedded-stdlib * more robust module copying * make slang-test the startup project * folder tweak * Make FETCH_BINARY the default on all platforms * Set DEBUG_DIR * add natvis files to source * skip spirv tests * remove test step from debug dist * Add build to .gitignore * redo warnings to be more like premake * Update imgui * clean more premake files * Disable PCH for glslang, gcc throws a warning * Add /MP for msvc builds * warning wobble * Add script to build llvm * Add slang-llvm and generators components * Build slang-llvm in ci * comments * fetch llvm with git * better abi approximation for cache * better sccache key * formatting * Correct logic around disabling problematic debug info for ccache * exclude gcc and clang from windows ci * Make dist workflows use system llvm * naming * restore normal dist builds * formatting * run tests in ci * Correct slang-llvm url setting * Rely on the system to find the test tool library * actions matrix wiggle * cope with OSX ancient bash * Correct compilers on windows * more ci debugging * Correct rpath handling on OSX * neaten * correct path to slang-llvm * Correct rpath separator on osx * Find slang-llvm correctly * smoke tests only on osx * ci wobble * Give MacOS module a dylib suffix * get swiftshader correctly * cope with bsd cp * remove debug output * full tests on osx * ci wobble * Add some vk tests to expected failures * simplify ci * ci wobble * exclude dx12 tests from github ci * remove cmake code for building llvm * warnings * warnings as errors for cl * spirv-tools in path * add aarch64 ci build * Add SLANG_GENERATORS_PATH option for prebuilt generators * neaten * Correct generator target name * remove yaml anchors because github actions does not support them * Demote CMake in docs Also add info on cross compiling * Restore premake CI * use minimal ci for cmake * Write miniz_export for premake build and .gitignore it * Mention build config tool options in docs * Remove redefined macro for miniz * regenerate vs project --- .github/actions/common-setup/action.yml | 112 ++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 .github/actions/common-setup/action.yml (limited to '.github/actions/common-setup') diff --git a/.github/actions/common-setup/action.yml b/.github/actions/common-setup/action.yml new file mode 100644 index 000000000..60c81b007 --- /dev/null +++ b/.github/actions/common-setup/action.yml @@ -0,0 +1,112 @@ +name: Common setup + +description: Performs setup common to all our actions + +inputs: + os: + required: true + runs-on: + required: true + compiler: + required: true + platform: + required: true + config: + required: true +runs: + using: composite + steps: + - name: Set up MSVC dev tools on Windows + uses: ilammy/msvc-dev-cmd@v1 + - name: Set up sccache + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: ${{github.job}}-${{inputs.os}}-${{inputs.compiler}}-${{inputs.platform}}-${{inputs.config}} + variant: sccache + - shell: bash + run: | + # Set up system dependencies + + # Install Ninja + case "${{inputs.os}}" in + linux*) sudo apt-get install -y ninja-build;; + windows*) choco install ninja;; + macos*) brew install ninja;; + esac + + # Set compiler + CC=${{inputs.compiler}} + CXX=${{inputs.compiler}} + # infer C++ compiler + CXX=${CXX/gcc/g++} + CXX=${CXX/clang/clang++} + # Correct version on older ubuntu + if [[ "${{inputs.runs-on}}" == ubuntu-20.04 ]]; then + CC=${CC/gcc/gcc-10} + CXX=${CXX/g++/g++-10} + fi + # Export + echo "CC=$CC" >> "$GITHUB_ENV" + echo "CXX=$CXX" >> "$GITHUB_ENV" + + # Set CMake to use sccache + echo "CMAKE_CXX_COMPILER_LAUNCHER=sccache" >> "$GITHUB_ENV" + echo "CMAKE_C_COMPILER_LAUNCHER=sccache" >> "$GITHUB_ENV" + + # Some useful variables + config=${{inputs.config}} + Config=$(echo "${{inputs.config}}" | sed 's/debug/Debug/;s/release/Release/') + bin_dir=$(pwd)/build/$Config/bin + lib_dir=$(pwd)/build/$Config/lib + echo "config=$config" >> "$GITHUB_ENV" + echo "Config=$Config" >> "$GITHUB_ENV" + echo "bin_dir=$bin_dir" >> "$GITHUB_ENV" + echo "lib_dir=$lib_dir" >> "$GITHUB_ENV" + + # Try to restore a LLVM install, and build it otherwise + - uses: actions/cache/restore@v3 + id: cache-llvm + with: + path: ${{ github.workspace }}/build/llvm-project-install + # Use os*compiler*platform in lieu of an ABI key here, which is what we really want + key: ${{ inputs.os }}-${{ inputs.compiler }}-${{ inputs.platform }}-${{ hashFiles('external/build-llvm.sh') }} + - name: Build LLVM + if: steps.cache-llvm.outputs.cache-hit != 'true' + shell: bash + run: ./external/build-llvm.sh --install-prefix "${{ github.workspace }}/build/llvm-project-install" + - uses: actions/cache/save@v3 + if: steps.cache-llvm.outputs.cache-hit != 'true' + with: + path: ${{ github.workspace }}/build/llvm-project-install + key: ${{ steps.cache-llvm.outputs.cache-primary-key }} + - name: Set environment variable for CMake + shell: bash + run: | + echo "LLVM_DIR=${{ github.workspace }}/build/llvm-project-install" >> "$GITHUB_ENV" + echo "Clang_DIR=${{ github.workspace }}/build/llvm-project-install" >> "$GITHUB_ENV" + + # Install swiftshader + - uses: robinraju/release-downloader@v1.8 + continue-on-error: true + with: + latest: true + repository: "shader-slang/swiftshader" + out-file-path: "swiftshader" + extract: true + fileName: "vk_swiftshader_${{inputs.os}}_${{inputs.platform}}.zip" + + - name: Install SwiftShader + shell: bash + run: | + case "${{inputs.os}}" in + windows*) echo "${{github.workspace}}/swiftshader/" >> "$GITHUB_PATH";; + *) echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}:}${{github.workspace}}/swiftshader" >> "$GITHUB_ENV";; + esac + + # Put spirv-tools in path + - shell: bash + run: | + case "${{inputs.os}}" in + windows*) echo "${{github.workspace}}/external/slang-binaries/spirv-tools/windows-${{inputs.platform}}/bin" >> "$GITHUB_PATH";; + linux*) echo "${{github.workspace}}/external/slang-binaries/spirv-tools/$(uname -m)-linux/bin" >> "$GITHUB_PATH";; + esac -- cgit v1.2.3