Skip to content

Commit

Permalink
TBD icd
Browse files Browse the repository at this point in the history
  • Loading branch information
coldav committed Nov 13, 2024
1 parent 769c8a4 commit 89caec8
Show file tree
Hide file tree
Showing 4 changed files with 289 additions and 85 deletions.
106 changes: 106 additions & 0 deletions .github/actions/do_build_icd/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
name: pull and build icd loader
description: pull icd loader and build with a particular toolchain

inputs:
toolchain:
description: 'path to toolchain'
default: ''
#$GITHUB_WORKSPACE/ock/platform/x86_64-linux.cmake
build_type:
description: 'build type'
default: Release
name:
description: 'artifact name'
default: ubuntu-22.04-x86_64
shell_to_use:
description: "which shell to use (default bash)"
default: bash

runs:
# We don't want a new docker just a list of steps, so mark as composite
using: "composite"
steps:
# - name: clone ock platform
# uses: actions/checkout@v4
# with:
# sparse-checkout: |
# platform
# path: ock

- name: check paths
shell: ${{ inputs.shell_to_use }}
run: |
pwd
ls -d *
- name: clone headers
uses: actions/checkout@v4
with:
repository: KhronosGroup/OpenCL-Headers
path: headers
- name: build headers
shell: ${{ inputs.shell_to_use }}
run: |
pwd
ls -d *
cmake headers -Bheaders/build ${{ inputs.toolchain }} -DCMAKE_INSTALL_PREFIX=$PWD/headers_install -GNinja
ninja -v -C headers/build
ninja -v -C headers/build install
- name: clone icd
uses: actions/checkout@v4
with:
repository: KhronosGroup/OpenCL-ICD-Loader
path: icd

- name: icd cmake
shell: ${{ inputs.shell_to_use }}
run:
cmake icd -B icd/build ${{ inputs.toolchain }}
-DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DCMAKE_INSTALL_PREFIX=$PWD/install_icd
-DOpenCLHeaders_DIR=$PWD/headers_install/share/cmake/OpenCLHeaders -GNinja

- name: icd build
shell: ${{ inputs.shell_to_use }}
run: |
ninja -v -C icd/build
ninja -v -C icd/build install
pwd
ls icd/
- name: upload icd artifact
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.name }}
path: install_icd
retention-days: 1

# - name: cmake_ock
# shell: ${{ inputs.shell_to_use }}
# - mkdir -p $CI_PROJECT_DIR/build
# - cd $CI_PROJECT_DIR/build
# - git -c advice.detachedHead=false
# clone https://github.com/KhronosGroup/OpenCL-Headers
# --single-branch --depth 1
# - cd OpenCL-Headers
# - git log -1
# - mkdir build
# - cmake -Bbuild ${{ inputs.toolchain }} .
# "-DCMAKE_INSTALL_PREFIX=$OPENCL_HEADERS_PATH" -GNinja
# - ninja -v -C build
# - ninja -v -C build install
# - cd ..

# - git -c advice.detachedHead=false
# clone https://github.com/KhronosGroup/OpenCL-ICD-Loader
# --single-branch --depth 1
# - cd OpenCL-ICD-Loader
# - git log -1
# - mkdir build
# - cmake -Bbuild . ${{ inputs.toolchain }}
# "-DCMAKE_BUILD_TYPE=$ICD_BUILD_TYPE" -DCMAKE_INSTALL_PREFIX=$ICD_LOADER_INSTALL_PATH
# "-DOpenCLHeaders_DIR=$OPENCL_HEADERS_PATH/share/cmake/OpenCLHeaders" -GNinja
# - ninja -v -C build
# - ninja -v -C build install
# - cd $CI_PROJECT_DIR
259 changes: 175 additions & 84 deletions .github/workflows/planned_testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,83 +53,80 @@ jobs:
echo 'os_list=${{ inputs.os_list }}' >> "$GITHUB_OUTPUT"
cat $GITHUB_OUTPUT
create_ock_artefacts:
needs: calc_matrix
strategy:
matrix:
target: ${{ fromJson(needs.calc_matrix.outputs.target_list) }}
os: ${{ fromJson(needs.calc_matrix.outputs.os_list) }}
build_type: [RelAssert]
exclude:
- os: windows-2019
- target: riscv64
# - target: aarch64
# create_ock_artefacts:
# needs: calc_matrix
# strategy:
# matrix:
# target: ${{ fromJson(needs.calc_matrix.outputs.target_list) }}
# os: ${{ fromJson(needs.calc_matrix.outputs.os_list) }}
# build_type: [RelAssert]
# exclude:
# - os: windows-2019
# - target: riscv64
# # - target: aarch64

runs-on: ${{ matrix.os }}
steps:
- name: Checkout repo
uses: actions/checkout@v4

# TODO: Move this to a single action
- name: load native llvm
if: ${{ matrix.target }} != "x86_64" && ${{ matrix.os }} == "ubuntu-22.04"
uses: actions/cache/restore@v4
with:
path: llvm_install/**
key: llvm-ubuntu-22.04-x86_64-v19-RelAssert
fail-on-cache-miss: true
- name: mv llvm native
if: ${{ matrix.target }} != "x86_64" && ${{ matrix.os }} == "ubuntu-22.04"
run: mv llvm_install llvm_install_native

# installs tools, ninja, installs llvm and sets up sccache
- name: setup-ubuntu
if: ${{ matrix.target }} == "x86_64" && ${{ matrix.os }} == "ubuntu-22.04"
uses: ./.github/actions/setup_build
with:
llvm_version: 19
llvm_build_type: RelAssert
# For now target and arch match
arch: ${{ matrix.target }}
save: ${{ inputs.update_cache }}
toolchain_file: scripts/../platform/arm-linux/${{ matrix.target }}-toolchain.cmake"

- name: build ock x86
if: ${{ matrix.target == 'x86_64' }}
uses: ./.github/actions/do_build_ock
with:
build_targets: install
offline_kernel_tests: OFF
install_dir: install_ock_${{matrix.os}}_${{matrix.target}}

- name: build ock other ${{ matrix.target }}
if: ${{ matrix.target != 'x86_64' }}
uses: ./.github/actions/do_build_ock
with:
build_targets: install
# Todo : target does not directly equate to arch here
arch: ${{ matrix.target }}
toolchain_file: "platform/arm-linux/aarch64-toolchain.cmake"
extra_flags: -DCA_BUILTINS_TOOLS_DIR=${{ github.workspace }}/llvm_install_native/bin
# Do we need the offline kernel as an artefact? If so currently this requires an external clc or qemu to be installed.
offline_kernel_tests: OFF
install_dir: install_ock_${{matrix.os}}_${{matrix.target}}
host_fp16: ON

# Prune it as there is too much things in there we don't want to use
# We may want to extend this a bit as time goes on such as clc or UnitCL
- name: prune ock artefact ${{ matrix.target }}
run: |
# delete all but city runner and the python associated file under bin
find install_ock_${{matrix.os}}_${{matrix.target}}/bin -maxdepth 0 -type f ! -name "*.py" -delete
rm -rf install_ock_${{matrix.os}}_${{matrix.target}}/share
# runs-on: ${{ matrix.os }}
# steps:
# - name: Checkout repo
# uses: actions/checkout@v4

# # TODO: Move this to a single action
# - name: load native llvm
# if: ${{ matrix.target }} != "x86_64" && ${{ matrix.os }} == "ubuntu-22.04"
# uses: actions/cache/restore@v4
# with:
# path: llvm_install/**
# key: llvm-ubuntu-22.04-x86_64-v19-RelAssert
# fail-on-cache-miss: true
# - name: mv llvm native
# if: ${{ matrix.target }} != "x86_64" && ${{ matrix.os }} == "ubuntu-22.04"
# run: mv llvm_install llvm_install_native

# # installs tools, ninja, installs llvm and sets up sccache
# - name: setup-ubuntu
# if: ${{ matrix.target }} == "x86_64" && ${{ matrix.os }} == "ubuntu-22.04"
# uses: ./.github/actions/setup_build
# with:
# llvm_version: 19
# llvm_build_type: RelAssert
# # For now target and arch match
# arch: ${{ matrix.target }}
# save: ${{ inputs.update_cache }}

- name: upload ock artefact
uses: actions/upload-artifact@v4
with:
name: ock_${{matrix.os}}_${{matrix.target}}
path: install_ock_${{matrix.os}}_${{matrix.target}}
retention-days: 1
# - name: build ock x86
# if: ${{ matrix.target == 'x86_64' }}
# uses: ./.github/actions/do_build_ock
# with:
# build_targets: install
# offline_kernel_tests: OFF

# - name: build ock other ${{ matrix.target }}
# if: ${{ matrix.target != 'x86_64' }}
# uses: ./.github/actions/do_build_ock
# with:
# build_targets: install
# # Todo : target does not directly equate to arch here
# arch: ${{ matrix.target }}
# toolchain_file: "platform/arm-linux/aarch64-toolchain.cmake"
# extra_flags: -DCA_BUILTINS_TOOLS_DIR=${{ github.workspace }}/llvm_install_native/bin
# # Do we need the offline kernel as an artefact? If so currently this requires an external clc or qemu to be installed.
# offline_kernel_tests: OFF
# host_fp16: ON

# # Prune it as there is too much things in there we don't want to use
# # We may want to extend this a bit as time goes on such as clc or UnitCL
# - name: prune ock artefact ${{ matrix.target }}
# run: |
# # delete all but city runner and the python associated file under bin
# find install_ock_${{matrix.os}}_${{matrix.target}}/bin -maxdepth 1 -type f ! -name "*.py" -delete
# rm -rf install_ock_${{matrix.os}}_${{matrix.target}}/share

# - name: upload ock artefact
# uses: actions/upload-artifact@v4
# with:
# name: ock_${{matrix.os}}_${{matrix.target}}
# path: install
# retention-days: 1


# use_ock_artefacts_all:
Expand All @@ -146,8 +143,8 @@ jobs:
# target: riscv64


use_ock_artefacts:
needs: [ calc_matrix, create_ock_artefacts ]
build_icd:
needs: [ calc_matrix ]
strategy:
matrix:
target: ${{ fromJson(needs.calc_matrix.outputs.target_list) }}
Expand All @@ -158,14 +155,108 @@ jobs:
- target: riscv64
runs-on: ${{ matrix.os }}
steps:
- name: Download ock artefact
uses: actions/download-artifact@v4
with:
name: ock_${{matrix.os}}_${{matrix.target}}
- name: Install Ninja
uses: llvm/actions/install-ninja@main

- name: print ock artefact
run: |
ls -R .
- name: clone ock platform
uses: actions/checkout@v4
with:
sparse-checkout: |
platform
.github
# todo look into setting variables in a common way so we can pass toolchains in for different jobs
- name : build and upload icd
# if: ${{ matrix.target != 'x86_64' }}
uses: ./.github/actions/do_build_icd
with:
# Todo : not just support linux here
toolchain: ${{ matrix.target == 'aarch64' && '--toolchain $GITHUB_WORKSPACE/platform/arm-linux/aarch64-toolchain.cmake' || '' }}
name: icd_${{matrix.os}}_${{matrix.target}}


# Todo do as an action
build_tornado:
needs: [ calc_matrix, build_icd ]
strategy:
matrix:
target: ${{ fromJson(needs.calc_matrix.outputs.target_list) }}
os: ${{ fromJson(needs.calc_matrix.outputs.os_list) }}
build_type: [RelAssert]
exclude:
- os: windows-2019
- target: riscv64
runs-on: ${{ matrix.os }}
steps:
- name: Install Ninja
uses: llvm/actions/install-ninja@main

- name: clone ock platform
uses: actions/checkout@v4
with:
sparse-checkout: |
platform
.github
- name: download icd artifact
uses: actions/download-artifact@v4
with:
name: icd_${{matrix.os}}_${{matrix.target}}
path: install_icd

- name: install jdk21
run: |
sudo apt update
sudo apt-get install --yes openjdk-21-jdk
- name: build tornadovm
run: |
pwd
ls -d *
wget https://archive.apache.org/dist/maven/maven-3/3.9.3/binaries/apache-maven-3.9.3-bin.tar.gz
tar xf apache-maven-3.9.3-bin.tar.gz
git clone https://github.com/beehive-lab/TornadoVM.git -b develop --depth 1 TornadoVM_build
export JAVA_HOME=`readlink -f $(command -v java) | sed 's/\/bin\/java//'`
export PATH=$PWD/apache-maven-3.9.3/bin:$PATH
export TORNADO_SDK=$PWD/TornadoVM_build/bin/sdk
cd TornadoVM_build
# The tornado build system links in OpenCL assuming it's in a known place. This gets around
# this by pass CXX as an environment variable as it's difficult to change the build system
# even if we don't use this script.
CXX="g++ -L$GITHUB_WORKSPACE/install_icd/lib" make -j8 jdk21 BACKEND=opencl
# gitlab ci does not follow symbolic links so copy for the artefact
cp -r -L $TORNADO_SDK $CI_PROJECT_DIR/TornadoVM_SDK
# toolchain:
# description: 'path to toolchain'
# default: $GITHUB_WORKSPACE/ock/platform/x86_64-linux.cmake
# build_type:
# description: 'path to toolchain'
# default: ock/platform/x86_64-linux.cmake
# name:
# description: 'artifact name'
# default: ubuntu-22.04-x86_64

# use_ock_artefacts:
# needs: [ calc_matrix, create_ock_artefacts ]
# strategy:
# matrix:
# target: ${{ fromJson(needs.calc_matrix.outputs.target_list) }}
# os: ${{ fromJson(needs.calc_matrix.outputs.os_list) }}
# build_type: [RelAssert]
# exclude:
# - os: windows-2019
# - target: riscv64
# runs-on: ${{ matrix.os }}
# steps:
# - name: Download ock artefact
# uses: actions/download-artifact@v4
# with:
# name: ock_${{matrix.os}}_${{matrix.target}}
# path: ock_${{matrix.os}}_${{matrix.target}}

# - name: print ock artefact
# run: |
# ls -R .
# echo "${{ matrix.os }} ${{ matrix.build_type }} ${{ matrix.arch }}" > foo.txt

# --define CA_CL_ENABLE_ICD_LOADER=ON
Expand Down
Loading

0 comments on commit 89caec8

Please sign in to comment.