clang: a C language family frontend for LLVMThe goal of the Clang project is to create a new C, C++, Objective C and Objective C++ front-end for the LLVM compiler. http://clang.llvm.org/
clang: a C language family frontend for LLVM
The goal of the Clang project is to create a new C, C++, Objective C and Objective C++ front-end for the LLVM compiler.
表題の通り、clang-formatでフォーマットはできるが、.clang-formatの内容が反映されていない問題が発生しました なんか色々ググったり調べたりしてもわからなかったんですが、settings.jsonを修正するとうまくできました vscode clang format settingsなどでググると、"clang-format.style": "google"を設定するサイトが結構ヒットすると思います これをコメントアウトすると、ワーキングディレクトにある.clang-formatの設定が反映されました どうやらこれを設定していると、設定したスタイルが最優先されるみたいですね …
MacOSで動作を確認しました。vinとyappyの動作も確認しています。 clang, llvmはXCodeのコマンドラインツールをインストールしてください。 その他のライブラリはHomebrewを使ってください。 PATHやライブラリーの環境変数については、他に譲ります。 export PATH="/usr/local/opt/llvm/bin/:$PATH" export LDFLAGS="-L/usr/local/opt/llvm/lib" export CPPFLAGS="-I/usr/local/opt/llvm/include" を~/.profileに書けば動くと思います。 h…
リリースです。 フリーソフトウェアプログラマーを辞めると言いましたが、まだ続けます。 Pythonクローン地道に実装していきます。 Comelangは右辺値の代入時に代入する変数に%がないとエラーとなるようになりました。 これでかなりコンパイル時に動的エラーを検出できます。 オリジナルのヒープシステムはかなり完成度が高まっています。 BoehmGCでのヒープの管理も可能ですが、オリジナルのヒープシステムも使いやすいので 使ってみてください。GCが無いのでかなり高速です。 viクローンはvinディレクトリにPythonクローンはyappyにあります。 Comelang https://githu…
Qiitaの水が合わないのではてなに出戻り libclang_rt.profile-aarch64.aはLLVMの中のcompiler-rtに含まれている ClangとLLVMをbuildしてもインストールされなくて困って調べた。 compiler-rt.llvm.org -fprofile-instr-generateに出力パスを付けると結果が出力されない 原因不明
ClangとLLVMについて学習したため、そのまとめとしてここに整理する。 コンパイラのフロントエンドとバックエンドについて コンパイラはフロントエンドとバックエンドに分割し設計されているケースがあり、それぞれ役割がある フロントエンド ソースコードを解析し、中間表現・中間言語と呼ばれるデータに変換する バックエンド フロントエンドによって生成された中間表現から、環境に合わせた機械語やバイトコードを生成する その他、最適化なども行う Clang C / C++ / Objective-C / Objective-C++向けのコンパイラフロントエンド バックエンドとしてLLVMを使用 GCCの置…
木構造の取扱はプログラマなら基本なのかもだけれど、アルゴリズムとデータ構造をちゃんと勉強したことなかったので、必要ベースで勉強していく。 用語 用語説明根(root)親を持たないノード。1つの木に対して1つ根。辺(edge)親から子へのリンク。葉(leaf)子を持たないノード。兄弟(siblings)親が同じ子たち。祖先(ancestor)p → q への経路がある場合、pをqの祖先と呼ぶ。子孫(descendant)p → q への経路がある場合、qをpの子孫と呼ぶ。レベル(level)ある木の深さの全ノードの集合を木のレベルと呼ぶ。(ノードの)深さ(depth)根からノードまでの経路の長さ…
はじめに ここまで作ってきたベアメタルのLチカはGCCでビルドしてきたが、それをclangでビルドしてみる。 clang-10のインストール Ubuntu 20.04環境でClangをインストールする。バージョンは10。 $ sudo apt install -y clang-10 lld-10 make Makefile ベースはLチカのFLASH + コンパイル済みBoot Stage2バージョン まずはMakefileを下記のように変更する。 LLVM_OPT = --target=armv6-m-unknown-none-eabi -mcpu=cortex-m0plus ASMOPT …
ある日,rbenvを見ていた brew upgrade ebenvして, $ rbenv install -list 2.5.8 2.6.6 2.7.2 3.0.0 jruby-9.2.14.0 mruby-2.1.2 rbx-5.0 truffleruby-20.3.0 truffleruby+graalvm-20.3.0 昨年中にruby 3.0.0が正式にリリースされ,rbenvも対応したらしい.入れてみよっかなぁ〜俺もなぁ〜… そのruby 3.0.0を入れようとしてしくじった 当時の環境は以下の通りだった. MBP 2016 15inch macOS Catalina clang A…
BitVisor Advent Calendar 2020 13日目の記事です。 BitVisor Advent Calendar 2020 - Qiita 今回は、タイトルの通りclangでbitvisorをビルドできるか試した話です。 scan-buildとかできたら楽しそうですよね。 現状、ビルドできてませんが、途中経過を。 準備 コンパイラの指定 bitvisorのコンパイラの指定は、Makefile.commonにあるようで、現状はこんな感じ。 $ head Makefile.common # -*- makefile-gmake -*- # commands AR = ar CC …
はじめに meta-clangの使い方を調べた。 meta-clangはbitbakeでのパッケージのビルドやSDKでgccの代わりにclangを使えるようにするためのレイヤ。 meta-clangを使う 既存のビルド環境にmeta-clangを組み込むには下記のようにする。 $ git clone https://github.com/kraj/meta-clang -b dunfell ビルド対象に組み込むにはbitbake-layersを実行する。 $ bitbake-layers add-layers ../layers/meta-clang デフォルトのツールチェインを切り替える b…
github.com Assignment 1 現状の実装にbyteカウンタの機能を追加するというもの。 解いてみる xdp_stats_mapのエントリの構造体にbyteカウンタのフィールドを追加する eBPFマップは以下のように定義されている。 struct { __uint(type, BPF_MAP_TYPE_ARRAY); __type(key, __u32); __type(value, struct datarec); __uint(max_entries, XDP_ACTION_MAX); } xdp_stats_map SEC(".maps"); エントリの構造体であるdat…
初期化せずに初期化する。一見矛盾しているようにしか思えない行いはしかし、生配列の場合は次のように初期化しながら初期化しないことによって行うことができます int main() { int array_uninit[5]; // 各要素は未初期化 int array_zeroinit[5]{}; // 各要素は0で初期化 } この時std::arrayで同様に初期化しながら初期化しないことを行うにはどうすればいいのでしょうか?クラス型の場合、初期化をしない初期化(デフォルト初期化)の場合でもデフォルトコンストラクタが呼ばれてしまうため、なんとなくできないような気がしてしまいます。 先に結論を書い…
Xcode 14.2 で開発したアプリを App Store Connect にアップロードしたところ、次の問題が表示された。 SDK version issue. This app was built with the iOS 16.2 SDK. Starting April 29, 2024, all iOS and iPadOS apps must be built with the iOS 17 SDK or later, included in Xcode 15 or later, in order to be uploaded to App Store Connect or sub…
ブランチから1年以上をかけてようやくで NetBSD 10.0 リリース が出て、それとほぼ同時に pkgsrc-2024Q1 が出たものの、ここしばらくいろいろあってちょっと手を付けられていませんでしたが、 NetBSD/amd64,i386 10.0 ておくれLive Image 20240420版を作ってアップしました。 http://www.ceres.dti.ne.jp/tsutsui/netbsd/liveimage/ 更新内容は以下: 20240420版 NetBSD 10.0 Release 対応 兼 pkgsrc-2024Q1 更新バージョン pkgsrc-2024Q1 のツ…
Homebrewをアップグレードしようとしたら、下のようなエラーが起きて、できない現象に遭遇した。 % brew upgrade xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun Homebrewの状態を確認すると、下のようになっていた。 % brew config HOMEBREW_VERSION: >=2.5.0 (shallow or no…
実行環境 >swift --version swift-driver version: 1.90.11.1 Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4) Target: arm64-apple-macosx14.0 >xcodebuild -version Xcode 15.3 Build version 15E204a モチベーション まだまだSwift Concurrencyパワーが足りていない。読み、書き、動かし、クイズを作り、Swift Concurrencyを身体に馴染ませる。 過去のクイズは以下。 S…
実行環境 >swift --version swift-driver version: 1.90.11.1 Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4) Target: arm64-apple-macosx14.0 >xcodebuild -version Xcode 15.3 Build version 15E204a モチベーション tokizuoh.hatenablog.com 以前Swift Concurrencyメインスレッドクイズを書いたが、まだまだ理解が浅いなと思って関連のWWDCのセッションを見返…
環境構築をしているときに pip install pymupdf をする必要ができたのだが、ここでエラーが発生してしまった エラーメッセージを眺めるとlibclang.dylibが見つかりませんと。。。 Xcodeは使っていないけど一応インストールはされている。 homebrewでもllvmをインストールしていたはずだが? と思ったけど、そういえば今の仕事用PCではそれ以上何もしていないかも? とりあえず何もしてなくても問題なく動けやというのが本音ではあるが、 homebrewでインストールしたclangの方が優先されるようにPath設定 DYLD_LIBRARY_PATHを設定 までやってみ…
LiteXのBIOS立ち上げ環境を、独自のRTLシミュレーション環境に移植したくて、メモしておく。 基本的に、LiteXをダウンロードしたときに登場するlitex/litex/soc/software/を丸ごと別ディレクトリに移動することになる。 さらに、ライブラリを作成するの、pythondata-software-picolibcとpythondata-software-compiler_rtもコピーしておく。 LiteXのCPU環境構築用に作った、以下のファイルもすべて移動しておく。 boot-helper.S crt0.S csr-defs.h irq.h system.h 基本的には…
x86やRISC-Vなどの多くの機械語命令セットには、64ビット整数同士の積(128ビット整数になる)の上位64ビットを求める命令が存在します。 しかし、C言語やC++の言語標準には128ビット整数が存在しないため、これを簡単に得ることができません。 gccなどのコンパイラには非標準ながら__uint128_tのようなものがあり、これを使うことでそういった命令を呼び出すことができますが、標準の範囲で計算するにはどのようにすればよいかを考えます。 以下の議論はuint64_tやint64_tがない処理系でも大丈夫(64ビット以上の整数、つまりint_least64_tなどで十分)なはずですが、確…
先月kivyで動いたアプリをビルドしようと思ったのですがコンパイルエラーで止まってしまいました。 何度かリトライしたのですがどうしても出来ず放置してしまっていたのですが、この度再チャレンジしてやっと成功しました。 ビルド環境 サブ機のUbuntu desktopで作業してます。 ❯ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.4 LTS Release: 22.04 Codename: jammy ❯ uname -a Linux ubuntu-nuc…
はじめに 色々あって、M1チップ搭載のMacBook Airを手に入れました。 自分自身、WIndows上で数値計算にC# + Math.NETを用いているので、Macでも同様にMath.NETを使って書いたコードを動かせるようにしました。 しかしながら、なぜかMath.NETのManagedコード*1しか動きませんでした。 しばらく格闘した末に、Math.NETでOpenBLASを使えるようにできたので、その記録を残します。 環境 チップ: Apple M1 メモリ: 8 GBつまりは2020年のMacBook Airです。 Math.NETの導入 Windowsで導入する場合と特に変わりま…
C++言語そのものに _interrupt というキーワードや機能はありません。_interrupt は、古いDOSプログラミング環境において、割り込みベクターに関連する関数や関連機能を宣言するために使用されていました。 古いMS-DOSやWindowsのプログラムでは、割り込みハンドラを直接操作する必要がある場合がありました。その際に _interrupt キーワードが使用され、特定の割り込みベクターに関連する関数を定義しました。 現代のC++プログラミングでは、一般的にはオペレーティングシステムやライブラリが提供する機能を使用して、割り込みを扱います。例えば、Windows環境ではWind…
実際のところ VCStudio側の設定 sudo apt install clang UnrealEngine Editor側の設定 UnrealEngine Editorに移動し、「ツール」から必要なタブを選択 C++で作ったプロジェクトであれば、項目がでてくるので選択 IntelliSense 自動補完やらの素敵な機能を提供してくれる 設定がとても面倒 https://dev.epicgames.com/documentation/ja-jp/unreal-engine/setting-up-visual-studio-code-for-unreal-engine?application_…
おなじみの画像 JavaやScalaといったJVM言語のDockerイメージは、JVMを同梱しなければならない都合で肥大化しがちである。特に何もしなくても、例えば一般的なamazoncorretto:21のイメージサイズは217.7 MBもある。 hub.docker.com これにさらにビルド済みのJARファイルが載ってくるので、結構大きくなってしまうのだ。 そこで、Scalaのコンテナイメージのサイズをなんとか小さくできないかと、考えた。すると、JVMを使ったまま70 MiBくらいに縮めることができた。 github.com コンテナイメージのサイズを小さくするために、何をしたかを書いてい…