🕌

C23 とC++23 をサポートする LLVM 18 を Debian 12 Bookworm にインストール

2024/05/12に公開

【追記】2024年6月7日にリリースされた Zig 0.13 は LLVM 18 に対応しています

C23 と C++23 がサポートされた LLVM 18 を Debian 12 Bookworm にインストールした。

まずリポジトリの公開鍵を導入する

# https://apt.llvm.org/
curl https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc

次にリポジトリの URL を登録する

sudo nano /etc/apt/sources.list.d/llvm.list
llvm.list
deb [signed-by=/etc/apt/trusted.gpg.d/apt.llvm.org.asc] http://apt.llvm.org/bookworm/ llvm-toolchain-bookworm-18 main

アップデートする

sudo apt update
sudo apt upgrade

Clang 18 を導入する

sudo apt install clang-18 lldb-18 lld-18

バージョンを確認する

clang-18 --version
Debian clang version 18.1.4 (++20240417123804+e6c3289804a6-1~exp1~20240417003947.102)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

デフォルトの clang コマンドのバージョンを切り替えることができる

# https://gist.github.com/junkdog/70231d6953592cd6f27def59fe19e50d
# https://qiita.com/yoshiyasu1111/items/3815af53a25b3b1df0f4
sudo update-alternatives \
  --install /usr/bin/clang clang /usr/bin/clang-18 1 \
  --slave /usr/bin/clang++ clang++ /usr/bin/clang++-18 \
  --slave /usr/bin/lldb lldb /usr/bin/lldb-18 \
  --slave /usr/bin/lld lld /usr/bin/lld-18

c23 でサポートされた char8_t を試してみる

test.c
#include <uchar.h>
#include <stdio.h>

// https://en.cppreference.com/w/c/string/multibyte/char8_t

int main(void){
    char8_t str[] = "Hello World";
    printf("%s\n", str);

    return 0;
}

ビルド時に -std=c23 オプションを指定する

clang -std=c23 test.c -o test
zig cc -std=c23 -lc test.c -o test

C++23 でサポートされた std::print も試してみた。

test.cc
#include <print>

int main()
{
  std::print("{}\n", "Hello World");
}

clang++ 18.1.4 ではエラーになってしまったが、zig c++ (clang++ 17.0.6) では正常にコンパイルできた

clang++ -std=c++23 test.cc -o test
zig c++ -std=c++23 test.cc -o test

LLVM 19 では std::println が実装される予定である

C++20 で導入された std::format も試してみる

#include <iostream>
#include <format>

int main()
{
    using namespace std;
    cout << format("{}\n", "Hello World") << endl;
}

コンパイルオプションは次のとおり

clang++ -std=c++20 test.cc -o test
zig c++ -std=c++20 test.cc -o test

Discussion