Open4

warp: LLVM+Clang等のパッケージング

okuokuokuoku

というわけで、とりあえずWindows版のClangをパッケージングする。これにフロントエンドのwrapperを被せてツールチェインということにする。

バイナリはLLVMが公式でビルドしている:

そのうち自前のビルドに置き換えたいけど。。

必要なファイルの抽出

Windowsで必要なのは bin ディレクトリだけなので、それだけパッケージすれば良い。

okuokuokuoku

環境の検出

conan profile detect で環境を検出できる。

$ conan profile detect
detect_api: Found msvc 17

Detected profile:
[settings]
arch=x86_64
build_type=Release
compiler=msvc
compiler.cppstd=14
compiler.runtime=dynamic
compiler.version=194
os=Windows

WARN: This profile is a guess of your environment, please check it.
WARN: The output of this command is not guaranteed to be stable and can change i
n future Conan versions.
WARN: Use your own profile files for stability.
Saving detected profile to e:\conan_home\profiles\default

(Conan2は基本的に環境を常に破壊するコンセプトになっているため、 conan profile detect は検出したプロファイルを自動的に保存する。)

ここで必要なのは arch=x86_64os=Windows で、これらを対象にしたprebuiltなバイナリパッケージを作成することになる。

okuokuokuoku

ビルド

Conan2ではパッケージの作成は conan create コマンドで行う。適当にconanfile.pyを書いて、 conan create . すればパッケージが作成され、ローカルに自動的にインストールされる。

import os
from conan import ConanFile
from conan.tools.files import get, copy, download
from conan.errors import ConanInvalidConfiguration
from conan.tools.scm import Version


class WarpLlvmClangPackage(ConanFile):
    name = "llvmtoolchain-warp"
    version = "20.1.8.warp0"
    license = "DO_NOT_EXPORT"
    description = "(internal use only LLVM/Clang package)"
    settings = "os", "arch"
    package_type = "application"

    # FIXME: Download and extract on build phases
    extracted_path = "e:/clang+llvm-20.1.8-x86_64-pc-windows-msvc"

    def validate(self):
        if self.settings.arch != "x86_64" or self.settings.os != "Windows":
            raise ConanInvalidConfiguration("Only applicable for Windows/x86_64")

    def package(self):
        dirs_to_copy = ["bin"]
        for dir_name in dirs_to_copy:
            copy(self, pattern=f"{dir_name}/*", src=self.extracted_path, dst=self.package_folder, keep_path=True)
$ conan create .

======== Exporting recipe to the cache ========
llvmtoolchain-warp/20.1.8.warp0: Exporting package recipe: E:\repos\warpsdk\packaging\llvm-temp\conanfile.py
llvmtoolchain-warp/20.1.8.warp0: Copied 1 '.py' file: conanfile.py
llvmtoolchain-warp/20.1.8.warp0: Exported to cache folder: e:\conan_home\p\llvmt75082f6f83d24\e
llvmtoolchain-warp/20.1.8.warp0: Exported: llvmtoolchain-warp/20.1.8.warp0#e2c2d7d7b8143b873c560c9f94e8bc3d (2025-07-26 07:50:48 UTC)

======== Input profiles ========
Profile host:
[settings]
arch=x86_64
build_type=Release
compiler=msvc
compiler.cppstd=14
compiler.runtime=dynamic
compiler.runtime_type=Release
compiler.version=194
os=Windows

Profile build:
[settings]
arch=x86_64
build_type=Release
compiler=msvc
compiler.cppstd=14
compiler.runtime=dynamic
compiler.runtime_type=Release
compiler.version=194
os=Windows


======== Computing dependency graph ========
Graph root
    cli
Requirements
    llvmtoolchain-warp/20.1.8.warp0#e2c2d7d7b8143b873c560c9f94e8bc3d - Cache

======== Computing necessary packages ========
llvmtoolchain-warp/20.1.8.warp0: Forced build from source
Requirements
    llvmtoolchain-warp/20.1.8.warp0#e2c2d7d7b8143b873c560c9f94e8bc3d:522dcea5982a3f8a5b624c16477e47195da2f84f - Build

======== Installing packages ========

-------- Installing package llvmtoolchain-warp/20.1.8.warp0 (1 of 1) --------
llvmtoolchain-warp/20.1.8.warp0: Building from source
llvmtoolchain-warp/20.1.8.warp0: Package llvmtoolchain-warp/20.1.8.warp0:522dcea5982a3f8a5b624c16477e47195da2f84f
llvmtoolchain-warp/20.1.8.warp0: settings: os=Windows arch=x86_64
llvmtoolchain-warp/20.1.8.warp0: Copying sources to build folder
llvmtoolchain-warp/20.1.8.warp0: Building your package in e:\conan_home\p\b\llvmtebf955e964e33\b
llvmtoolchain-warp/20.1.8.warp0: Generating aggregated env files
llvmtoolchain-warp/20.1.8.warp0: Generated aggregated env files: ['conanbuild.bat', 'conanrun.bat']
llvmtoolchain-warp/20.1.8.warp0: Package '522dcea5982a3f8a5b624c16477e47195da2f84f' built
llvmtoolchain-warp/20.1.8.warp0: Build folder e:\conan_home\p\b\llvmtebf955e964e33\b
llvmtoolchain-warp/20.1.8.warp0: Generating the package
llvmtoolchain-warp/20.1.8.warp0: Packaging in folder e:\conan_home\p\b\llvmtebf955e964e33\p
llvmtoolchain-warp/20.1.8.warp0: Calling package()
llvmtoolchain-warp/20.1.8.warp0: package(): WARN: No files in this package!
llvmtoolchain-warp/20.1.8.warp0: Created package revision e723156a1fbff1e96acae76fa43021ef
llvmtoolchain-warp/20.1.8.warp0: Package '522dcea5982a3f8a5b624c16477e47195da2f84f' created
llvmtoolchain-warp/20.1.8.warp0: Full package reference: llvmtoolchain-warp/20.1.8.warp0#e2c2d7d7b8143b873c560c9f94e8bc3d:522dcea5982a3f8a5b624c16477e47195da2f84f#e723156a1fbff1e96acae76fa
43021ef
llvmtoolchain-warp/20.1.8.warp0: Package folder e:\conan_home\p\b\llvmtebf955e964e33\p
okuokuokuoku

アップロード

conan upload -r local llvmtoolchain-warp

おい100%越えたぞ...

llvmtoolchain-warp/20.1.8.warp0:522dcea5982a3f8a5b624c16477e47195da2f84f: Uploading conan_package.tgz: 92%
llvmtoolchain-warp/20.1.8.warp0:522dcea5982a3f8a5b624c16477e47195da2f84f: Uploading conan_package.tgz: 94%
llvmtoolchain-warp/20.1.8.warp0:522dcea5982a3f8a5b624c16477e47195da2f84f: Uploading conan_package.tgz: 97%
llvmtoolchain-warp/20.1.8.warp0:522dcea5982a3f8a5b624c16477e47195da2f84f: Uploading conan_package.tgz: 99%
llvmtoolchain-warp/20.1.8.warp0:522dcea5982a3f8a5b624c16477e47195da2f84f: Uploading conan_package.tgz: 102%
llvmtoolchain-warp/20.1.8.warp0:522dcea5982a3f8a5b624c16477e47195da2f84f: Uploading conan_package.tgz: 104%
llvmtoolchain-warp/20.1.8.warp0:522dcea5982a3f8a5b624c16477e47195da2f84f: Uploading conan_package.tgz: 106%
llvmtoolchain-warp/20.1.8.warp0:522dcea5982a3f8a5b624c16477e47195da2f84f: Uploading conan_package.tgz: 109%
llvmtoolchain-warp/20.1.8.warp0:522dcea5982a3f8a5b624c16477e47195da2f84f: Uploading conan_package.tgz: 111%
llvmtoolchain-warp/20.1.8.warp0:522dcea5982a3f8a5b624c16477e47195da2f84f: Uploading conan_package.tgz: 114%
llvmtoolchain-warp/20.1.8.warp0:522dcea5982a3f8a5b624c16477e47195da2f84f: Uploading conan_package.tgz: 116%
llvmtoolchain-warp/20.1.8.warp0:522dcea5982a3f8a5b624c16477e47195da2f84f: Uploading conan_package.tgz: 118%
llvmtoolchain-warp/20.1.8.warp0:522dcea5982a3f8a5b624c16477e47195da2f84f: Uploading conan_package.tgz: 121%
llvmtoolchain-warp/20.1.8.warp0:522dcea5982a3f8a5b624c16477e47195da2f84f: Uploading conan_package.tgz: 123%