diff --git a/roles/llvm/tasks/Debian-unstable.yaml b/roles/llvm/tasks/Debian-unstable.yaml deleted file mode 100644 index c93e6aa..0000000 --- a/roles/llvm/tasks/Debian-unstable.yaml +++ /dev/null @@ -1,13 +0,0 @@ ---- -- name: install apt packages - become: true - apt: - name: - - clang - - clang-format - - clang-tidy - - clang-tools - - clangd - - llvm - state: latest - install_recommends: true diff --git a/roles/llvm/tasks/Debian.yaml b/roles/llvm/tasks/Debian.yaml index ab1e2e1..c93e6aa 100644 --- a/roles/llvm/tasks/Debian.yaml +++ b/roles/llvm/tasks/Debian.yaml @@ -1,2 +1,13 @@ --- -- include_tasks: '{{ansible_distribution}}-{{ansible_distribution_version}}.yaml' +- name: install apt packages + become: true + apt: + name: + - clang + - clang-format + - clang-tidy + - clang-tools + - clangd + - llvm + state: latest + install_recommends: true diff --git a/roles/llvm/tasks/Ubuntu-18.04.yaml b/roles/llvm/tasks/Ubuntu-18.04.yaml deleted file mode 100644 index ff7d554..0000000 --- a/roles/llvm/tasks/Ubuntu-18.04.yaml +++ /dev/null @@ -1,50 +0,0 @@ ---- -- name: get list of releases from github - uri: - url: https://api.github.com/repos/llvm/llvm-project/releases - register: releases - -- name: select latest release with Ubuntu binaries - set_fact: - release: '{{releases.json | json_query("[?assets | [?contains(name, `x86_64-linux-gnu-ubuntu`)]] | [0]")}}' - -- name: select from latest available release with x86_64-linux-gnu-ubuntu asset - set_fact: - asset: '{{release | json_query("assets | [?contains(name, `x86_64-linux-gnu-ubuntu`)] | [?ends_with(name, `.tar.xz`)] | [0]")}}' - -- name: process release name for /usr/local/lib/{{package_name}} - set_fact: - package_name: '{{release.name | lower | regex_replace(" (\d+)\.\d+\.\d+", "-\1")}}' - -- name: set path for archive download - set_fact: - archive_path: '/tmp/{{asset.name}}' - -- name: download release archive - get_url: - url: '{{asset.browser_download_url}}' - dest: '{{archive_path}}' - -- name: create package directory - become: true - file: - path: '/usr/local/lib/{{package_name}}' - state: directory - -# TODO: don't extract when not actually doing a n update -- name: extract release archive - become: true - unarchive: - src: '{{archive_path}}' - dest: '/usr/local/lib/{{package_name}}' - extra_opts: ['--strip-components', '1'] - -- name: create symlinks from /usr/local/lib/{package_name}} to /usr/local/bin - become: true - file: - src: '{{item}}' - dest: '/usr/local/bin/{{item | basename}}' - state: link - with_fileglob: '/usr/local/lib/{{package_name}}/bin/*' - -# TODO: cleanup old installs? diff --git a/roles/llvm/tasks/Ubuntu.yaml b/roles/llvm/tasks/Ubuntu.yaml new file mode 100644 index 0000000..22caa06 --- /dev/null +++ b/roles/llvm/tasks/Ubuntu.yaml @@ -0,0 +1,66 @@ +--- +- name: get latest stable github release + uri: + url: https://api.github.com/repos/llvm/llvm-project/releases/latest + register: llvm_latest + +- set_fact: + llvm_major_version: + '{{llvm_latest.json.tag_name[8:llvm_latest.json.tag_name.find(".")]}}' +- set_fact: + llvm_apt_repo_url: + 'http://apt.llvm.org/{{ansible_distribution_release}}/' + llvm_apt_category: + 'llvm-toolchain-{{ansible_distribution_release}}-{{llvm_major_version}}' + +- name: add upstream deb repository + become: true + apt_repository: + repo: 'deb {{llvm_apt_repo_url}} {{llvm_apt_category}} main' + state: present + filename: llvm + update_cache: false + +- name: add upstream deb-src repository + become: true + apt_repository: + repo: 'deb-src {{llvm_apt_repo_url}} {{llvm_apt_category}} main' + state: present + filename: llvm + update_cache: false + +- name: add apt repository key + become: true + apt_key: + url: https://apt.llvm.org/llvm-snapshot.gpg.key + id: 6084F3CF814B57C1CF12EFD515CF4D18AF4F7421 + state: present + +- name: update apt cache + become: true + apt: + update_cache: true + +- name: install apt packages + become: true + apt: + name: + - clang-{{llvm_major_version}} + - clang-format-{{llvm_major_version}} + - clang-tidy-{{llvm_major_version}} + - clang-tools-{{llvm_major_version}} + - clangd-{{llvm_major_version}} + - llvm-{{llvm_major_version}} + state: latest + install_recommends: true + +- name: update alternatives + become: true + alternatives: + link: '/usr/bin/{{item}}' + name: '{{item}}' + path: '/usr/bin/{{item}}-{{llvm_major_version}}' + priority: '{{llvm_major_version}}0' + with_items: + - clang-format + - clangd diff --git a/roles/llvm/tasks/main.yaml b/roles/llvm/tasks/main.yaml index 6853678..b5ebbe1 100644 --- a/roles/llvm/tasks/main.yaml +++ b/roles/llvm/tasks/main.yaml @@ -1,2 +1,5 @@ --- - include_tasks: '{{ansible_os_family}}.yaml' + when: ansible_os_family in ['Darwin', 'Windows'] +- include_tasks: '{{ansible_distribution}}.yaml' + when: ansible_os_family not in ['Darwin', 'Windows']