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

というわけで、とりあえずWindows版のClangをパッケージングする。これにフロントエンドのwrapperを被せてツールチェインということにする。
バイナリはLLVMが公式でビルドしている:
そのうち自前のビルドに置き換えたいけど。。
必要なファイルの抽出
Windowsで必要なのは bin
ディレクトリだけなので、それだけパッケージすれば良い。

環境の検出
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_64
と os=Windows
で、これらを対象にしたprebuiltなバイナリパッケージを作成することになる。

ビルド
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

アップロード
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%