⚡
zig cc メモ
固有のはまりポイントがあるのでメモ。
zig-0.13.0
coff does not support linking multiple objects into one
zig cc -c hoge.cpp
に対して複数のソースファイルを渡すと発生。
実例。
うっかり msvc
の引数を漏らすと発生した。だいぶ悩む。
zig cc /utf-8 -c hoge.cpp
👆 "/utf-8" がファイルと誤認!
実行時に illegal instruction
zig cc
というか clang
の挙動らしい。
実例。
float x = -1.0f;
reinterpret_cast<unsinged char>(x); // 負の値を unsigned に cast できない?
meson から使う
meson-1.4.1
meson には --native-file
や --cross-file
設定で別のコンパイラを指定する機能がある。
これに、 zig cc
や zig c++
を指定できる。
# zig.ini
# 配列 [] で指定するのがポイント
[binaries]
c = ['zig', 'cc']
cpp = ['zig', 'c++']
ar = ['zig', 'ar']
dlltool = ['zig', 'dlltool']
lib = ['zig', 'lib']
ranlib = ['zig', 'ranlib']
# 'Could not find Windows resource compiler'
windres = ['zig', 'rc']
# `zig cc` をツールチェインとして指定する
$ meson setup builddir --native-file zig.ini
linker の検出
linker の検出でこける。
Unable to detect linker for compiler
meson 改造。
\Python312\lib\site-packages\mesonbuild\linkers\detect.py
elif 'Snapdragon' in e and 'LLVM' in e:
linker = linkers.QualcommLLVMDynamicLinker(
compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v)
# 👇これ
elif o.startswith('zig ld '):
linker = linkers.QualcommLLVMDynamicLinker(
compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v)
リソースコンパイラーの検出
Could not determine type of Windows resource compiler
meson 改造。
\Python312\lib\site-packages\mesonbuild\modules\windows.py
for (arg, match, rc_type) in [
('/?', '^.*Microsoft.*Resource Compiler.*$', ResourceCompilerType.rc),
('/?', 'LLVM Resource Converter.*$', ResourceCompilerType.rc),
# 👇これ
('/?', '^.*zig rc.*$', ResourceCompilerType.rc),
('--version', '^.*GNU windres.*$', ResourceCompilerType.windres),
('--version', '^.*Wine Resource Compiler.*$', ResourceCompilerType.wrc),
]:
p, o, e = mesonlib.Popen_safe(rescomp.get_command() + [arg])
# 👇 o => o or e。[zig, rc, /?] が stderr にメッセージを出すので
m = re.search(match, o or e, re.MULTILINE)
if m:
mlog.log('Windows resource compiler: %s' % m.group())
self._rescomp = (rescomp, rc_type)
break
else:
raise MesonException('Could not determine type of Windows resource compiler')
Discussion