tools/corrosion/.github/actions/setup_test/action.yaml
branchtransitional_engine
changeset 16038 d903f8d2395a
parent 16036 7b8d96fc8799
equal deleted inserted replaced
16036:7b8d96fc8799 16038:d903f8d2395a
     1 name: Setup Corrosion Tests
       
     2 description: "Internal helper action to setup the Environment for Corrosions tests"
       
     3 inputs:
       
     4   target_arch:
       
     5     required: true
       
     6     description: CMake target architecture
       
     7   abi:
       
     8     required: false
       
     9     description: msvc, gnu or darwin
       
    10     default: default
       
    11   cmake:
       
    12     required: true
       
    13     description: Cmake version
       
    14   rust:
       
    15     required: true
       
    16     description: Rust version
       
    17   generator:
       
    18     required: true
       
    19     description: CMake Generator (e.g Ninja)
       
    20   build_dir:
       
    21     required: true
       
    22     description: Path of the CMake build directory
       
    23   configure_params:
       
    24     required: false
       
    25     description: Additional parameters to pass to CMake configure step
       
    26   install_path:
       
    27     required: false
       
    28     description: CMake install prefix
       
    29     default: ""
       
    30   compiler:
       
    31     required: false
       
    32     description: Compiler to use. Valid options are clang, gcc, cl, default, or an empty string.
       
    33     default: "default"
       
    34 
       
    35 runs:
       
    36   using: composite
       
    37   steps:
       
    38     - name: Cache Cargo registry
       
    39       id: cache-registry
       
    40       uses: actions/cache@v4
       
    41       with:
       
    42         path: ~/.cargo/registry
       
    43         key: ${{ runner.os }}-cargo-registry
       
    44     - name: Determine Rust OS
       
    45       id: determine_rust_os
       
    46       shell: bash
       
    47       run: |
       
    48         if [ "${{ runner.os }}" == "Windows" ]; then
       
    49           echo "os=pc-windows" >> $GITHUB_OUTPUT
       
    50           echo "host_abi=msvc" >> $GITHUB_OUTPUT
       
    51         elif [ "${{ runner.os }}" == "Linux" ]; then
       
    52           echo "os=unknown-linux" >> $GITHUB_OUTPUT
       
    53           echo "host_abi=gnu" >> $GITHUB_OUTPUT
       
    54         elif [ "${{ runner.os }}" == "macOS" ]; then
       
    55           echo "os=apple" >> $GITHUB_OUTPUT
       
    56           echo "host_abi=darwin" >> $GITHUB_OUTPUT
       
    57         fi
       
    58     - name: Determine Rust ABI
       
    59       id: determine_abi
       
    60       shell: bash
       
    61       run: |
       
    62         if [[ ! ( -z "${{ inputs.abi }}" || "${{ inputs.abi }}" == "default" ) ]]; then
       
    63            echo "abi=${{ inputs.abi }}" >> $GITHUB_OUTPUT
       
    64          elif [ "${{ runner.os }}" == "Linux" ]; then
       
    65            echo "abi=gnu" >> $GITHUB_OUTPUT
       
    66          elif [ "${{ runner.os }}" == "macOS" ]; then
       
    67            echo "abi=darwin" >> $GITHUB_OUTPUT
       
    68          else 
       
    69            echo "abi=msvc" >> $GITHUB_OUTPUT
       
    70          fi
       
    71     - name: Determine if Cross-compiling
       
    72       id: determine_cross_compile
       
    73       shell: bash
       
    74       run: |
       
    75         # For now it is safe to assume that all github runners are x86_64
       
    76         if [[ "${{ inputs.target_arch }}" != "x86_64" ]]; then
       
    77           echo "Cross-Compiling to ${{ inputs.target_arch }}"
       
    78           if [[ "${{ runner.os }}" == "macOS" ]]; then
       
    79             echo "system_name=-DCMAKE_SYSTEM_NAME=Darwin" >> $GITHUB_OUTPUT
       
    80           else
       
    81             # Either `Linux` or `Windows`
       
    82             echo "system_name=-DCMAKE_SYSTEM_NAME=${{ runner.os }}" >> $GITHUB_OUTPUT
       
    83           fi
       
    84         fi
       
    85     - name: Pick Compiler
       
    86       id: pick_compiler
       
    87       shell: bash
       
    88       run: > 
       
    89         ./.github/scripts/determine_compiler.sh 
       
    90         "${{ inputs.compiler }}"
       
    91         "${{ runner.os }}"
       
    92         "${{ steps.determine_abi.outputs.abi }}"
       
    93         "${{steps.determine_cross_compile.outputs.system_name}}"
       
    94         "${{inputs.target_arch}}"
       
    95     - name: Pick Generator
       
    96       id: pick_generator
       
    97       shell: bash
       
    98       run: |
       
    99         if [ "${{ inputs.generator }}" == "ninja" ]; then
       
   100           echo "generator=-GNinja" >> $GITHUB_OUTPUT
       
   101         elif [ "${{ inputs.generator }}" == "ninja-multiconfig" ];then
       
   102           echo "generator=-GNinja Multi-Config" >> $GITHUB_OUTPUT
       
   103         fi
       
   104     - name: Arch Flags
       
   105       id: arch_flags
       
   106       shell: bash
       
   107       run: | # Cross-compiling is currently only supported on Windows+MSVC with the default generator
       
   108         if [ "${{ runner.os }}" == "Windows" ]; then
       
   109           if [ "${{inputs.generator}}" == "default" ]; then
       
   110             if [ "${{ inputs.target_arch }}" == "x86_64" ]; then
       
   111               echo "msvc=amd64" >> $GITHUB_OUTPUT
       
   112               echo "cmake=-Ax64" >> $GITHUB_OUTPUT
       
   113             elif [ "${{ inputs.target_arch }}" == "i686" ]; then
       
   114               echo "msvc=amd64_x86" >> $GITHUB_OUTPUT
       
   115               echo "cmake=-AWin32" >> $GITHUB_OUTPUT
       
   116             elif [ "${{ inputs.target_arch }}" == "aarch64" ]; then
       
   117               echo "msvc=amd64_arm64" >> $GITHUB_OUTPUT
       
   118               echo "cmake=-AARM64" >> $GITHUB_OUTPUT
       
   119             fi
       
   120           elif [ "${{inputs.generator}}" == "ninja" ]; then
       
   121             # We don't do cross-compiling builds with Ninja
       
   122             # Todo: Why not (cross-compile)?
       
   123             echo "msvc=amd64" >> $GITHUB_OUTPUT
       
   124           fi
       
   125         elif [ "${{ runner.os }}" == "Linux" ]; then
       
   126           echo "cmake=-DRust_CARGO_TARGET=${{inputs.target_arch}}-${{steps.determine_rust_os.outputs.os}}-${{steps.determine_abi.outputs.abi}}" >> $GITHUB_OUTPUT
       
   127         fi
       
   128     - name: Determine Install Prefix
       
   129       id: install_prefix
       
   130       shell: bash
       
   131       run: |
       
   132         if [ ! -z "${{ inputs.install_path }}" ]; then
       
   133           echo "install_path=-DCMAKE_INSTALL_PREFIX=${{ inputs.install_path }}" >> $GITHUB_OUTPUT
       
   134         fi
       
   135     - name: Setup MSVC Development Environment
       
   136       uses: ilammy/msvc-dev-cmd@v1
       
   137       with:
       
   138         arch: ${{ steps.arch_flags.outputs.msvc }}
       
   139       if: ${{ 'msvc' == steps.determine_abi.outputs.abi }}
       
   140     - name: Install CMake
       
   141       uses: lukka/get-cmake@519de0c7b4812477d74976b2523a9417f552d126
       
   142       with:
       
   143         cmakeVersion: "${{ inputs.cmake }}"
       
   144         ninjaVersion: "~1.10.0"
       
   145     - name: Install Rust
       
   146       id: install_rust
       
   147       uses: dtolnay/rust-toolchain@master
       
   148       with:
       
   149         toolchain: ${{inputs.rust}}
       
   150         targets: ${{inputs.target_arch}}-${{steps.determine_rust_os.outputs.os}}-${{steps.determine_abi.outputs.abi}}
       
   151     - name: Install Cross Compiler
       
   152       shell: bash
       
   153       run: |
       
   154         if [[ "${{ inputs.target_arch }}" != 'x86_64' ]]; then
       
   155           echo "::group::apt-install"
       
   156           sudo apt-get update
       
   157           sudo apt-get install -y g++-$(echo "${{inputs.target_arch}}" | tr _ -)-linux-gnu
       
   158           echo "::endgroup::"
       
   159         fi
       
   160       if: ${{ 'Linux' == runner.os }}
       
   161     - name: Determine Configure Shell
       
   162       id: configure_shell
       
   163       shell: bash
       
   164       run: |
       
   165         if [ "${{ runner.os }}" == "Windows" ]; then
       
   166             echo "shell=pwsh" >> $GITHUB_OUTPUT
       
   167         else
       
   168             echo "shell=bash" >> $GITHUB_OUTPUT
       
   169         fi
       
   170     - name: Configure
       
   171       shell: ${{steps.configure_shell.outputs.shell}}
       
   172       run: >
       
   173         cmake
       
   174         "-S."
       
   175         "-B${{inputs.build_dir}}"
       
   176         "-DCORROSION_VERBOSE_OUTPUT=ON"
       
   177         "${{steps.arch_flags.outputs.cmake}}"
       
   178         "${{steps.pick_compiler.outputs.c_compiler}}"
       
   179         "${{steps.pick_compiler.outputs.cxx_compiler}}"
       
   180         "${{steps.determine_cross_compile.outputs.system_name}}"
       
   181         "${{steps.pick_generator.outputs.generator}}"
       
   182         ${{steps.install_prefix.outputs.install_path}}
       
   183         "-DRust_TOOLCHAIN=${{steps.install_rust.outputs.name}}"
       
   184         ${{ inputs.configure_params }}