Posting singkat ini mungkin berguna bagi mereka yang ingin cepat mulai bekerja dengan
LLVM , tanpa repot-repot mengunduh kode sumber dan membangun kerangka kerja. Siapa yang tidak ingin melihat-lihat skrip CMake yang tidak jelas untuk mencapai hasil yang diharapkan, dan akhirnya, hanya untuk yang malas :)
Saya akan memberi tahu Anda cara melakukannya dengan anggun, hanya beberapa baris dalam skrip pembuatan Gradle.
Dihadapkan dengan kebutuhan untuk menulis kode di bawah LLVM, saya menyadari bahwa "hit". :) "Hit" sudah berada pada tahap konfigurasi build untuk proyek. Saya membutuhkan proyek yang akan dibangun secara seragam di bawah Linux dan Windows. Tak perlu dikatakan, setiap kali bersama dengan proyek saya tidak ingin membangun seluruh LLVM sama sekali. Dan, pada awalnya, saya mengandalkan versi pra-dibangun dari perpustakaan dari situs resmi mereka, tetapi ternyata, pada kenyataannya, hanya ada binari Linux yang dibangun tanpa RTTI dan pengecualian. Di bawah Windows ada installer, tetapi terlepas dari kenyataan bahwa itu disebut
LLVM-xxx-win64.exe di dalam hanya dentang.
Nah, dalam lampiran build, ada sistem CMake di mana untuk membangun dalam versi rilis untuk Linux Anda perlu mengatur pada tahap konfigurasi:
cmake -DCMAKE_BUILD_TYPE=Release
Dan di bawah Windows ini, untuk beberapa alasan, tidak cukup dan Anda masih harus mengubah konfigurasi di perintah build itu sendiri:
cmake --build . --config Release
Secara umum, saya memutuskan untuk mengalihkan pandangan ke
Gradle dan menulis plugin yang bagus yang akan menyulitkan untuk mengkonfigurasi build untuk saya dan menyelamatkan saya dari rutinitas yang tidak perlu, hanya menyisakan hal-hal yang paling perlu dan tingkat tinggi yang terlihat.
Sebenarnya, diskusi di bawah ini akan secara eksklusif tentang dia:
cpp-llvm .
Berikut adalah konfigurasi minimum yang diperlukan untuk berintegrasi dengan LLVM:
plugins { id 'org.bitbucket.akornilov.cpp-llvm' version '0.1' } llvm { version = '9.0.0'
Persyaratan untuk bekerja:
- Java Terpasang (8 dan lebih tinggi).
- Installed Gradle (Saya menggunakan versi terbaru 5.6.2 pada saat penulisan artikel dan tidak menguji plug-in pada versi yang lebih lama)
- Gcc / Dentang (versi yang mendukung setidaknya C ++ 11) di Linux.
- MSVC 2019 (mis. Edisi Komunitas) di Windows.
- Plugin harus digunakan bersama dengan 'cpp-application' atau 'cpp-library'.
- Akses ke jaringan pada saat pembangunan pertama untuk mengunduh file biner LLVM (atau mode offline, lihat di bawah).
Versi LLVM yang didukung:
Build tidak resmi untuk x86_64 pada Windows (msvc 2019) dan Linux (Debian 10.0 + CLang 10.0). Dibangun dengan RTTI diaktifkan dan pengecualian dalam dua versi Rilis dan Debug.
- 7.1.0
- 7.0.1
- 7.0.0
- 6.0.1
- 6.0.0
- 5.0.2
- 5.0.1
- 5.0.0
- 4.0.1
- 4.0.0
- 3.9.1
- 3.9.0
- 3.8.1
- 3.8.0
- 3.7.1
- 3.7.0
- 3.6.2
- 3.6.1
- 3.6.0
- 3.5.2
- 3.5.1
- 3.5.0
- 3.4.2
- 3.4.1
- 3.4
- 3.3
- 3.2
- 3.1
- 3.0
Pembuatan resmi dari server LLVM, hanya x86_64 di Linux dengan RTTI dimatikan dan pengecualian.
Untuk melihat daftar versi yang didukung untuk platform saat ini, Anda dapat menggunakan perintah berikut:
gradle llvmVersions
> Task :llvm-app:llvmVersions 9.0.0 8.0.0 BUILD SUCCESSFUL in 2s 1 actionable task: 1 executed
Semua binari LLVM yang diperlukan untuk build dimuat ke cache lokal (dalam folder gradle di direktori pengguna) dan digunakan kembali untuk build lainnya.
Pada mulanya, persiapan untuk pembangunan bisa memakan waktu yang cukup lama, karena sekitar 300MB untuk versi debug atau 30MB untuk versi rilis akan diunduh dari jaringan (versi resmi juga memiliki berat sekitar 300MB).
Hanya penghubungan statis yang digunakan. untuk beberapa alasan yang tidak diketahui, build LLVM binding tidak dapat membuat pustaka dinamis di bawah MSVC.
Konfigurasi plugin lainnya
Anda dapat menentukan alamat spesifik untuk mengunduh arsip dengan binari (.tar.xz atau .tar.gz).
llvm { version = '7.0.1' serverUrl = 'http://releases.llvm.org/7.0.1/clang%2bllvm-7.0.1-x86_64-linux-gnu-ubuntu-18.04.tar.xz' }
Hal utama adalah bahwa versi yang ditentukan (versi = xxx) bertepatan dengan yang asli dalam arsip yang dipilih untuk diunduh, jika tidak konfigurasi konfigurasi mungkin salah.
Anda dapat bekerja dengan binari LLVM siap pakai (diunduh atau dibuat sendiri) secara mandiri
llvm { version = '7.0.1' localPath = '<path to unpacked LLVM build>' }
localPath harus menunjuk ke folder yang ada pada sistem file lokal di mana plugin mengharapkan untuk melihat subdirektori 'include' dan 'lib', mis. struktur direktori yang digunakan dalam bangunan resmi. Jika setelah mengatur sendiri Anda memiliki struktur folder yang berbeda, Anda perlu "menyisir" nya. :)
Versi-versi ini juga harus cocok, seperti yang sudah disebutkan, pada paragraf sebelumnya.
Dalam hal ini, tidak ada yang terkait dengan LLVM yang akan dimuat dari jaringan.
Bekerja dengan komponen individual:
llvm { version = '9.0.0' components = ['Engine', 'OrcJIT'] }
Jika Anda hanya bekerja dengan bagian tertentu dari LLVM, maka Anda tentu perlu memperhatikan parameter ini. Jika, misalnya, Anda hanya perlu OrcJIT, mengapa menautkan semua seratus empat puluh lima perpustakaan statis? Pilihan komponen tertentu akan sangat memudahkan masa pakai tautan, dan Anda akan menghemat waktu.
Daftar semua komponen yang tersedia dapat ditemukan seperti ini:
gradle llvmComponents
Di Linux, Anda dapat secara signifikan mengurangi waktu tautan dalam versi debug, jika Anda menggunakan opsi ini
llvm { version = '9.0.0' forceReleaseLinux = true }
Dalam hal ini, versi paksa LLVM digunakan untuk versi debug bangunan Anda. Dalam kebanyakan kasus, saya akan merekomendasikan menggunakannya kecuali Anda perlu men-debug LLVM itu sendiri. Parameter ini tidak mempengaruhi rakitan pada Windows, karena, sayangnya, MSVC 2019 tidak mengizinkan pencampuran rilis dan debug pustaka dalam satu build.
Yah, sebagai kesimpulan, tentu saja, saya akan merekomendasikan menggunakan plugin ini bersama dengan plugin saya yang lain :), yang dapat dibaca di
artikel ini .
cpp-build-tuner akan membantu mengoptimalkan waktu kompilasi dan ukuran biner yang dihasilkan.
cpp-ide-generator akan memberi Anda integrasi yang mudah dengan beberapa IDE, dalam konfigurasi yang sudah ada path ke header LLVM dan IDE akan dapat mengindeks dengan benar.

Kemungkinan masalah saat menggunakan cpp-ide-generator:
FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring project ':llvm-app'. > Cannot change dependencies of configuration ':llvm-app:cppCompileDebug' after it has been resolved.
Jika Anda melihat ini, itu artinya cpp-ide-generator harus ditambahkan setelah cpp-llvm, seperti ini:
plugins { id 'cpp-application' id 'org.bitbucket.akornilov.cpp-build-tuner' version '0.7' id 'org.bitbucket.akornilov.cpp-llvm' version '0.1' id 'org.bitbucket.akornilov.cpp-ide-generator' version '0.5' }
Contoh lengkap menggunakan plugin dapat ditemukan di
sini .
UPD:Plugin
cpp-llvm v0.3 versi baru
dirilis :
- Tugas
llvmCleanCache
telah llvmCleanCache
untuk menghapus semua unduhan LLVM di cache lokal pengguna. - Dukungan tambahan untuk penautan dinamis. Hanya versi 9.0.0 Windows / Linux, GCC / MinGW-W64 / CLang dan MSVC yang saat ini didukung.
llvm { version = '9.0.0' linkage = Linkage.SHARED }
UPDSehubungan dengan perubahan plugin hosting, grup diubah:
plugins { id 'loggersoft.cpp-llvm' version '0.5' }
Alamat proyek baru:
gradle-cpp.sourceforge.ioDokumentasi:
sourceforge.net/p/gradle-cpp/wiki/cpp-llvm