about summary refs log tree commit diff homepage
path: root/scripts/build/p-llvm-linux-ubuntu-16.04.inc
blob: 6bfc3105f776048302dc952c942a62e8fef0a944 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# Build dependencies
install_build_dependencies_llvm() { 
  apt update -y

  dependencies=(
    build-essential
    autoconf
    automake
    groff
    gcc
    g++
    python-dev
    make
    subversion # To check out code
    zlib1g-dev
    cmake
  )
  
  if [[ "${SANITIZERS[*]}" == "memory" ]]; then
    dependencies+=(ninja-build)
  fi

  #Install essential dependencies
  apt -y --no-install-recommends install "${dependencies[@]}"
}

install_binary_artifact_llvm() {
  local enable_optimized=$(to_bool "${ENABLE_OPTIMIZED}")
  local enable_debug=$(to_bool "${ENABLE_DEBUG}")
  local disable_assertions=$(to_bool "${DISABLE_ASSERTIONS}")
  local requires_rtti=$(to_bool "${REQUIRES_RTTI}")
  local LLVM_VERSION_MAJOR="${LLVM_VERSION/.*/}"
  local LLVM_VERSION_MINOR="${LLVM_VERSION/*./}"


  # No support for LLVM packages with debug information, incompatible if requested otherwise
  [[ "${enable_debug}" -eq 1 ]] && return 1

  # Packages are build with assertions disabled, incompatible if requested otherwise
  [[ "${disable_assertions}" -eq 0 ]] && return 1

  # Packages are build with RTTI enabled, incompatible if requested otherwise
  [[ "${requires_rtti}" -eq 0 ]] && return 1

  # Enable/Disable optimized does not matter
  
  # Check versions: no support for LLVM < 3.8
  if [[ "${LLVM_VERSION_MAJOR}" -eq 3 ]]; then
    [[ "${LLVM_VERSION_MINOR}" -lt 8 ]] && return 1
  fi
  
  # Add certificate
  apt update -y
  dependencies=(
    ca-certificates
    wget
  )
  apt -y --no-install-recommends install "${dependencies[@]}"
  wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key| apt-key add -
  
  local version=""
  [[ "${LLVM_VERSION_MAJOR}" -le 6 ]] && version="-${LLVM_VERSION}"
  [[ "${LLVM_VERSION_MAJOR}" -ge 7 ]] && version="-${LLVM_VERSION_MAJOR}"
  
  # Add repository
  echo "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial${version} main" >> /etc/apt/sources.list
  apt update -y

  dependencies=(
    "llvm${version}"
    "llvm${version}-dev"
    "llvm${version}-runtime"
    "clang${version}"
  )

  #Install essential dependencies
  apt -y --no-install-recommends install "${dependencies[@]}"
}

# Check if the binary artifact is installed
is_installed_llvm() {
    local lc=""
    # Check if llvm-config with the right version exists    
    lc=$(which "llvm-config-${LLVM_VERSION}")
    
    [[ -z "${lc}" ]] && return 1

    local rtti
    rtti="$(${lc} --has-rtti)"
    local assertion
    assertion="$(${lc} --assertion-mode)"
    local build_mode
    build_mode="$(${lc} --build-mode)"

    # Check requested mode with mode of the found item  
    [[ $(to_bool "${REQUIRES_RTTI}") -eq $(to_bool "${rtti}") ]] || return 1
    [[ $(to_bool "${DISABLE_ASSERTIONS}") -ne $(to_bool "${assertion}") ]] || return 1
}