about summary refs log tree commit diff homepage
path: root/scripts/build/p-llvm-linux-ubuntu.inc
blob: 8a9d0fe9c4988f1bffebbaaf39a6f5e07ebd3760 (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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# Build dependencies
install_build_dependencies_llvm() { 
  apt update -y

  # Add Kitware's certificate for CMake
  dependencies=(
    apt-transport-https
    ca-certificates
    gnupg
    lsb-release
    software-properties-common
    wget
  )

  apt -y --no-install-recommends install "${dependencies[@]}"
  wget -O - "https://apt.kitware.com/keys/kitware-archive-latest.asc" 2> /dev/null \
      | gpg --dearmor - | tee /etc/apt/trusted.gpg.d/kitware.gpg > /dev/null

  # Add CMake repository
  codename="$(lsb_release --codename --short)"
  apt-add-repository "deb https://apt.kitware.com/ubuntu/ ${codename} main"

  dependencies=(
    build-essential
    autoconf
    automake
    groff
    gcc
    g++
    python-dev
    python3-distutils
    make
    git # 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
  
  # Add certificate
  apt update -y
  dependencies=(
    ca-certificates
    wget
    lsb-release
    gnupg
  )
  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
  codename="$(lsb_release --codename --short)"
  apt_entry="deb http://apt.llvm.org/${codename}/ llvm-toolchain-${codename}${version} main"
  if [[ ! $(grep -rq "${apt_entry}" /etc/apt) ]]; then
    echo  "${apt_entry}" >> /etc/apt/sources.list
    apt update -y
  fi

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

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

# Check if the binary artifact is installed
is_installed_llvm() {
    local version=""
    local LLVM_VERSION_MAJOR="${LLVM_VERSION/.*/}"
    local LLVM_VERSION_MINOR="${LLVM_VERSION/*./}"
    [[ "${LLVM_VERSION_MAJOR}" -le 6 ]] && version="${LLVM_VERSION}"
    [[ "${LLVM_VERSION_MAJOR}" -ge 7 ]] && version="${LLVM_VERSION_MAJOR}"
    local lc=""

    # Check for llvm-config without suffix but correct versions number
    lc=$(which "llvm-config")
    if [[ -z "${lc}" || $($lc --version) != "${LLVM_VERSION}"* ]]; then
      # Check if llvm-config with the right version exists
      lc=$(which "llvm-config-${version}")
    fi

    [[ -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
}

setup_artifact_variables_llvm() {
    # Check for variables set and not empty
    local version=""
    local LLVM_VERSION_MAJOR="${LLVM_VERSION/.*/}"
    local LLVM_VERSION_MINOR="${LLVM_VERSION/*./}"
    [[ "${LLVM_VERSION_MAJOR}" -le 6 ]] && version="${LLVM_VERSION}"
    [[ "${LLVM_VERSION_MAJOR}" -ge 7 ]] && version="${LLVM_VERSION_MAJOR}"
    local lc=""
    # Check for llvm-config without suffix but correct versions number
    lc=$(which "llvm-config")
    if [[ -z "${lc}" || $($lc --version) != "${LLVM_VERSION}"* ]]; then
      # Check if llvm-config with the right version exists
      lc=$(which "llvm-config-${version}")
    fi

    [[ -z "${lc}" ]] && return 1

    LLVM_CONFIG="${lc}"

    LLVM_INSTALL="$(${lc} --bindir)"
    BITCODE_CC="${LLVM_INSTALL}/clang"
    BITCODE_CXX="${LLVM_INSTALL}/clang++"
}

get_build_artifacts_llvm() {
  is_installed_llvm
  [[ $? -ne 0 ]] && return 1
  return 0
}