Подтвердить что ты не робот

Можно ли напрямую использовать LLVM-сборку?

Я прочитал несколько веб-страниц и статей о llvm, и я очень заинтересован в этом проекте. (Возможно, что-то узнать о написании компилятора без необходимости бороться со сложными точками x86).

Есть страницы, которые описывают, как писать сборку llvm и как ее собирать, но я не нашел ничего о том, какая среда необходима для их фактического выполнения. Я знаю, что я могу запустить llvm-gcc в своих файлах, чтобы получить объектный файл, исполняемый в C-контексте. Но в том случае, если я не хочу использовать среду среды C (libc.so и друзей), что необходимо для запуска кода llvm? Есть ли какие-либо документы по этому поводу?

4b9b3361

Ответ 1

Как представляется, ассемблер LLVM.

llvm - как и ассемблер LLVM. Он читает файл, содержащий удобочитаемый язык ассемблера LLVM, переводит его в бит-код LLVM, и записывает результат в файл или на стандартный вывод.

Ответ 3

Быстрая настройка: (для файлов llvm 3.4.0.ll на окнах)

расширенный текстовый редактор https://notepad-plus-plus.org/

llvm из https://github.com/CRogers/LLVM-Windows-Binaries

hello.ll как "UTF-8 без спецификации" (этот код находится в формате llvm 3.4.0):

@msg = internal constant [13 x i8] c"Hello World!\00"
declare i32 @puts(i8*)
define i32 @main() {
    call i32 @puts(i8* getelementptr inbounds ([13 x i8]* @msg, i32 0, i32 0))
    ret i32 0
}

В командной строке:

lli hello.ll

Быстрая настройка: (для файлов llvm 3.8.0.ll на окнах)

расширенный текстовый редактор https://notepad-plus-plus.org/

clang двоичные файлы из: http://llvm.org/releases/download.html#3.8.0

hello.ll как "UTF-8 без спецификации" (этот код находится в формате llvm 3.8.0):

@msg = internal constant [13 x i8] c"Hello World!\00"
declare i32 @puts(i8*)
define i32 @main() {
    call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @msg, i32 0, i32 0))
    ret i32 0
}

В командной строке:

clang hello.ll -o hello.exe
hello.exe

Или как одна команда:

clang hello.ll -o hello.exe & hello.exe

Ошибки в char16_t, u16String и т.д. означают потребность в clang: -fms-compatible-version = 19