LINUX.ORG.RU

Не компилиться llvm

 , ,


0

2
root@x:/home/x # mkdir llvmc
root@x:/home/x # cd llvmc
root@x:/home/x/llvmc # mkdir build
root@x:/home/x/llvmc # cd build
root@x:/home/x/llvmc/build # cmake -G Ninja /home/x/llvm/llvm
CMake Error: CMake was unable to find a build program corresponding to "Ninja".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_ASM_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!

Делаю как тут описано: https://llvm.org/docs/GettingStarted.html#getting-started-quickly-a-summary Если что, я работаю на freebsd и amd64. Я не под рутом, это su.

CMake was unable to find a build program corresponding to «Ninja».

ниньзя то установлена??

Deleted
()

cd /usr/ports/devel/llvm/ && make install clean

/thread

Unicode4all ★★★★★
()
Ответ на: комментарий от vasyan

Видимо хочет из FreeBSD сделать подобие LFS, только с другим ядром.

iZEN ★★★★★
()
Ответ на: комментарий от iZEN

мне больше по душе poudriere, но конечно ТС об этом знать ещё рано. Пускай сперва в стандартной миссионерской позе пособирает. :)

vasyan
()

Зачем тебе ninja, используй мейкфайлы

Просто удали параметр -G Ninja

pftBest ★★★★
()

А зачем собирать?

Сейчас во FreeBSD 11.1 clang 5 идёт...

Через pkg устанавливается, и ничего собирать не нужно...

Или прям версия 6 нужна?

fsb4000 ★★★★★
()
Ответ на: комментарий от fsb4000

Системный llvm/clang-5.0.0 и портовый llvm/clang-5.0.1 - разные, отличаются опциями сборки и составом инструментов. Хотя и тот, и этот могу использоваться в качестве системного компилятора. И ещё есть порт LLVM/Clang-6.0-devel, в котором свежие версии инструментария для разработчиков.

iZEN ★★★★★
()

russian-turist-2019, судя по всему ты начал играться с ллвм, но судя по всему - это тупиковый путь. Без хорошего бекграунда не разберёшься с его использованием и забросишь это дело, особенно без бекграунда в крестах, которого явно нет/мало.

Мой тебе совет - начинай разработку языка с dsl поверх крестов. Кресты позволят тебе реализовать многое - это не жс. Ты можешь реализовать весь рантайм и семантику любой конструкции, пусть и в синтаксисе С++, либо в вызовах функций. Это тебе позволить получить почти всё, кроме синтаксиса.

Далее, ты можешь реализовать препроцессор поверх С++. Т.к. у тебя уже будет реализация в крестовом синтаксисе, либо в виде функций, то тебе просто надо будет научить свой препроцессор понимать новый синтаксис и транслировать его в крестовый.

Далее, ты уже можешь начинать работать с ллвм/шлангом и попытаться реализовать новый синтаксис внутри крестов - в шланге.

Этот крестовый дсл по умолчанию даёт тебе интерпретатор, т.е. ты можешь выполнять логику напрямую. И далее ты точно так же можешь из него сделать генератор, который будет не исполнять логику, а генерировать код её исполняющий.

Выглядит этот как-то так:

//мы просто заменяем это
type add(type a, type b) {
    return a + b;
}
//на это
type add(type a, type b) {
    return gen_add(a, b);
}

Этот генератор ты и можешь построить на базе ллвм, а можешь руками. Лично меня ллвм не устраивает - он слишком слаб для моих задач. Можешь хоть С/С++ код генерировать.

Используя такую схему ты получаешь возможность нормально отлаживать код, писать на нормальном языке, изучать язык и пробовать своим идеи. Ты не увязнешь во всей этой ненужной синтаксической/опкодной лапше.

И уже только потом имеет смысл браться писать фронтенд для ллвм. Вернее ту его часть, что работает с синтаксисом. Всё остальное у тебя уже есть и это основная часть и самая сложная.

По какому принципу строиться фронтенд. У тебя есть некий набор базовых конструкций и есть парсер. Этот парсер разбирает код и строит из этих конструкций представление программы( в памяти). И уже далее это представление обходится и преобразуется llvm-представление(ir), которое уже живёт своей жизнью.

По сути ты реализуешь эту центральную часть, а структуру программы создаёшь статически. И далее, вместо того, чтобы генерировать ir, либо что-то ещё - просто это исполняешь.

Ты выкидываешь ненужное и делаешь нужное, а потом уже добавляешь всё остальное. Это для того, чтобы ты не думал, что подобное бесполезно и реализовав это - ты реализуешь что-то левое, а не то, что тебе нужно. Это не так - ты реализуешь именно то, что тебе нужно.

Именно эта часть и есть язык, и именно эта часть, которая в любом llvm-фроентенде никак не зависит от ллвм. И именно её ты можешь и должен реализовывать в первую очередь, а потом уже прикручивать туда всё остальное.

vcerloman
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.