|
1 | 1 | #!/bin/bash -e
|
2 | 2 |
|
3 | 3 | repo=intel/graph-compiler
|
| 4 | +set -ex |
| 5 | + |
| 6 | +function print_usage() { |
| 7 | + echo "Usage:" |
| 8 | + echo "$0 [-d]" |
| 9 | + echo " -d Use dev build, build LLVM in current env and place all to 'external' dir" |
| 10 | +} |
| 11 | + |
| 12 | +DEV_BUILD=false |
| 13 | +while getopts 'd' flag; do |
| 14 | + case "${flag}" in |
| 15 | + d) |
| 16 | + DEV_BUILD=true |
| 17 | + ;; |
| 18 | + *) |
| 19 | + echo $flag |
| 20 | + print_usage |
| 21 | + exit 1 |
| 22 | + ;; |
| 23 | + esac |
| 24 | +done |
| 25 | +shift $((OPTIND-1)) |
4 | 26 |
|
5 | 27 | cd $(dirname "$0")/..
|
6 |
| -llvm_dir=$(cd ..; pwd -P)/install/llvm |
| 28 | +project_dir=$PWD |
7 | 29 | llvm_hash=$(cat cmake/llvm-version.txt)
|
8 | 30 |
|
9 |
| -get_llvm() ( |
| 31 | +function load_llvm() { |
| 32 | + local mlir_dir=$1 |
10 | 33 | local run_id
|
11 | 34 |
|
12 | 35 | run_id=$(gh run list -w "LLVM Build" --repo $repo --json databaseId --jq '.[0].databaseId')
|
13 | 36 |
|
14 | 37 | gh run download "$run_id" \
|
15 |
| - --repo "$repo" \ |
16 |
| - --pattern "llvm-$llvm_hash" \ |
17 |
| - --dir "$llvm_dir" |
| 38 | + --repo "$repo" \ |
| 39 | + --pattern "llvm-$llvm_hash" \ |
| 40 | + --dir "$llvm_dir" |
18 | 41 | cd "$llvm_dir"
|
19 | 42 | tar -zxf "llvm-$llvm_hash"/llvm.tgz
|
20 |
| -) |
21 | 43 |
|
22 |
| -test -f "$llvm_dir/llvm-$llvm_hash"/llvm.tgz || get_llvm |
| 44 | + eval $mlir_dir="$PWD/lib/cmake/mlir" |
| 45 | + cd "$project_dir" |
| 46 | + return 0 |
| 47 | +} |
| 48 | + |
| 49 | +function build_llvm() { |
| 50 | + local mlir_dir=$1 |
| 51 | + |
| 52 | + if ! [ -d "llvm-project" ]; then |
| 53 | + git clone https://github.com/llvm/llvm-project.git |
| 54 | + fi |
| 55 | + |
| 56 | + cd llvm-project |
| 57 | + git checkout ${llvm_hash} |
| 58 | + |
| 59 | + cmake -G Ninja llvm -B build \ |
| 60 | + -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=true \ |
| 61 | + -DLLVM_ENABLE_PROJECTS="mlir" -DLLVM_TARGETS_TO_BUILD="X86" \ |
| 62 | + -DLLVM_INSTALL_UTILS=true -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ |
| 63 | + -DLLVM_INSTALL_GTEST=ON |
| 64 | + cmake --build build |
| 65 | + |
| 66 | + eval $mlir_dir="$PWD/build/lib/cmake/mlir" |
| 67 | + cd .. |
| 68 | + return 0 |
| 69 | +} |
| 70 | + |
| 71 | +function get_llvm() { |
| 72 | + local ret_val=$1 |
| 73 | + |
| 74 | + if [[ "$DEV_BUILD" == 'true' ]]; then |
| 75 | + mkdir -p externals |
| 76 | + cd externals |
| 77 | + build_llvm val |
| 78 | + echo "val = " $val |
| 79 | + eval $ret_val=\$val |
| 80 | + cd .. |
| 81 | + return 0 |
| 82 | + fi |
| 83 | + |
| 84 | + llvm_dir=$project_dir/../install/llvm |
| 85 | + if ! [ -f "$llvm_dir/llvm-$llvm_hash"/llvm.tgz ]; then |
| 86 | + load_llvm val |
| 87 | + echo "val = " $val |
| 88 | + eval $ret_val=\$val |
| 89 | + fi |
| 90 | + |
| 91 | + return 0 |
| 92 | +} |
| 93 | + |
| 94 | +get_llvm mlir_dir |
| 95 | + |
| 96 | +fetch_dir=$project_dir/build/_deps |
| 97 | +if [[ "$DEV_BUILD" == 'true' ]]; then |
| 98 | + fetch_dir=$project_dir/externals |
| 99 | +fi |
23 | 100 |
|
24 | 101 | cmake -S . -G Ninja -B build \
|
25 | 102 | -DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
26 |
| - -DMLIR_DIR=$llvm_dir/lib/cmake/mlir \ |
27 |
| - -DLLVM_EXTERNAL_LIT=$(which lit) |
| 103 | + -DMLIR_DIR=$mlir_dir \ |
| 104 | + -DLLVM_EXTERNAL_LIT=$(which lit) \ |
| 105 | + -DFETCHCONTENT_BASE_DIR=$fetch_dir |
| 106 | + # \ |
| 107 | + # -DGC_DEV_LINK_LLVM_DYLIB="ON" |
28 | 108 | cmake --build build --parallel $(nproc)
|
0 commit comments