BSDPORTAL.RU

На этом сайте обсуждаются вопросы использования ОС FreeBSD
 Портал  •  Статьи  •  Форум  •  Wiki  •  Поиск  •  FAQ  •  Обои  •   Официальная документация  •  Новые темы 

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Autoconf =► CMAKE
СообщениеДобавлено: Сб 07 май, 2016 12:32 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт 12 сен, 2003 4:34 pm
Сообщения: 373
Откуда: Минск
Здравствуйте!

Пытаюсь освоить настройку CMAKE 3.5.x. Собственно, не столько мой интерес, сколько разработчики LLVM подталкивают. Написали, что уже в 3.8.0 autoconf - deprecated, а с версии 3.9.0 сборка только с помощью CMAKE. Изучение доков по CMAKE не помогло найти ответы на некоторые вопросы (вернее отдельные куски находил, но целостная картинка не собралась). Поэтому прошу вашей помощи. А именно, мне нужно найти аналоги настроек configure в CMAKE:

Код:
--build=BUILD
--host=HOST
--target=TARGET
--programm-prefix=PREFIX
--bindir=DIR
--libdir=DIR
--includedir=DIR
--datarootdir=DIR

В идеале - просто для командной строки (не использовать CMAKE_TOOLCHAIN_FILE).

_________________
Обращаюсь на "ты". Если не устраивает - пишите в ПМ, я применю патч :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Autoconf =► CMAKE
СообщениеДобавлено: Сб 07 май, 2016 3:04 pm 
Не в сети

Зарегистрирован: Чт 14 май, 2009 6:56 pm
Сообщения: 736
Запустите cmake с дефолными параметрами, а потом посмотрите в builddir/CMakeCache.txt или через cmake-gui. Там все переменные есть. Еще есть документация https://cmake.org/cmake/help/v3.5/manua ... les.7.html


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Autoconf =► CMAKE
СообщениеДобавлено: Сб 07 май, 2016 3:38 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт 12 сен, 2003 4:34 pm
Сообщения: 373
Откуда: Минск
arrowdodger, спасибо за наводочку!

Но, увы, нашел частично. Инфы много там получается, возможно опять что то пропускаю. Ткни, плс, куда смотреть. Получился вот такой файл CMakeCache.txt (на форуме ограничения по объему знаков поста не позволяют выложить полностью, поэтому линк на яндекс.диск).

Из него я отфильтровал частично:
Код:
//user executables (bin)
CMAKE_INSTALL_BINDIR:PATH=bin

//C header files (include)
CMAKE_INSTALL_INCLUDEDIR:PATH=include

//C header files for non-gcc (/usr/include)
CMAKE_INSTALL_OLDINCLUDEDIR:PATH=/usr/include

//object code libraries (lib64)
CMAKE_INSTALL_LIBDIR:PATH=lib64

//read-only architecture-independent data root (share)
CMAKE_INSTALL_DATAROOTDIR:PATH=share


Таким образом осталось актуально:

--build=BUILD
--host=HOST
--target=TARGET
--programm-prefix=PREFIX

:?

_________________
Обращаюсь на "ты". Если не устраивает - пишите в ПМ, я применю патч :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Autoconf =► CMAKE
СообщениеДобавлено: Вт 10 май, 2016 3:37 pm 
Не в сети

Зарегистрирован: Чт 14 май, 2009 6:56 pm
Сообщения: 736
Цитата:
--build=BUILD

Если это Debug/Release, то это CMAKE_BUILD_TYPE.

Цитата:
--programm-prefix=PREFIX

Полагаю, CMAKE_INSTALL_PREFIX.

Цитата:
--host=HOST
--target=TARGET

А что они делают?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Autoconf =► CMAKE
СообщениеДобавлено: Ср 11 май, 2016 12:53 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пт 12 сен, 2003 4:34 pm
Сообщения: 373
Откуда: Минск
arrowdodger писал(а):
Цитата:
--build=BUILD

Если это Debug/Release, то это CMAKE_BUILD_TYPE.

Увы, не то. См. ниже в цитате описалово.

arrowdodger писал(а):
Цитата:
--host=HOST
--target=TARGET

А что они делают?

Описывать долго, я приведу копипасту из доки:
Цитата:
--build=build-type
the type of system on which the package is being configured and compiled. It defaults to the result of running config.guess. Specifying a build-type that differs from host-type enables cross-compilation mode.

--host=host-type
the type of system on which the package runs. By default it is the same as the build machine. Specifying a host-type that differs from build-type, when build-type was also explicitly specified, enables cross-compilation mode.

--target=target-type
the type of system for which any compiler tools in the package produce code (rarely needed). By default, it is the same as host.


arrowdodger писал(а):
Цитата:
--programm-prefix=PREFIX

Полагаю, CMAKE_INSTALL_PREFIX.

Тоже не то. С помощью --programm-prefix можно задавать префиксы для собираемых программ. К примеру, можно в одном каталоге $HOME/dev/cross/bin поместить ranlib, i686-w64-mingw32-ranlib, x86_64-w64-mingw32-ranlib, и они не будут друг другу мешать (пересекаться по имени).

_________________
Обращаюсь на "ты". Если не устраивает - пишите в ПМ, я применю патч :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Autoconf =► CMAKE
СообщениеДобавлено: Ср 11 май, 2016 10:20 am 
Не в сети
Аватара пользователя

Зарегистрирован: Вс 07 мар, 2010 8:45 pm
Сообщения: 36
Откуда: Тилимилитрямдия
--programm-prefix=PREFIX, можно наверно так
set_target_properties(ranlib PROPERTIES PREFIX "${PROGRAM_PREFIX}")

_________________
Я всегда лгу...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Autoconf =► CMAKE
СообщениеДобавлено: Ср 11 май, 2016 10:51 am 
Не в сети

Зарегистрирован: Чт 14 май, 2009 6:56 pm
Сообщения: 736
Тогда вместо --build надо читать как делать кросс-компиляцию в СMake, а вместо --host используются условные операторы:

Код:
if(UNIX)
if(APPLE)
if(WIN32)


или же https://cmake.org/cmake/help/v3.5/varia ... YSTEM_NAME


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Autoconf =► CMAKE
СообщениеДобавлено: Ср 11 май, 2016 2:38 pm 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5115
Откуда: Москва
build/host/target - это кросс-компиляция, в CMake она сделана по другому: https://cmake.org/cmake/help/v3.5/manua ... ins.7.html
Глобального аналога program-prefix нет, такие вещи обычно реализуются в проектах кастомно, ибо у всех свои представления где и какие нужны префиксы/суффиксы и как они используются.

А вообще не понимаю почему вместо того чтобы плясать от задачи (собрать то-то и так-то CMake'ом) вы зачем-то занялись переносом configure-специфичных флагов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Autoconf =► CMAKE
СообщениеДобавлено: Ср 11 май, 2016 7:19 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт 12 сен, 2003 4:34 pm
Сообщения: 373
Откуда: Минск
AMDmi3 писал(а):
А вообще не понимаю почему вместо того чтобы плясать от задачи (собрать то-то и так-то CMake'ом) вы зачем-то занялись переносом configure-специфичных флагов.
Долгая история. Ну попробую вкратце. Как получится. Некоторое время назад я заинтересовался языком D. Даже попытался собрать русскоязычное комьюнити по нему. Но, увы, язык не сильно распространен. Хотя язык проектировался как С+++ (еще до С++11), большинство знакомых используют его в каких-то ИМХО "узко-специализируемых" (OpenGL Win only) и порой несвойственных (CMS для web) проектах. Я же хочу получить набор инструментов для кросс-платформенного создания ПО. И у меня есть хороший пример. Под Funtoo Linux я таки собрал для С++ для интересующих меня целей (Win 32/64, Linux 32/64, MacOSX 64, Android-чисто тест). Все это удобным набором интегрировалось в QtCreator. На этой связке я в течение полутора лет весьма успешно и очень удобно разработал и сдал проект госконторе. Заказчик был более чем доволен. Сервак на FreeBSD 9.0+PostgreSQL, клиенты большей части под виндой, приходил проверяющий с нотом под Manjaro Linux x64, получил клиента и офигевал от разнообразия предложенного. В общем все прошло как по маслу. Но это работа ...

С языком D хочу такое же рабочее окружение. Плагин к QtCreator'у уже есть, осталось таки собрать тулчейны. Но загвоздка в том, что выбранный мною компилятор (самый перспективный) LDC, благодаря использованию LLVM, может генерить код под большое количество архитектур и операционных систем. Но создание того, о чем я написал в начале (о тулчейнах) выворачивает мне мозг.

Последовательность нативной сборки:

1) Собираем LLVM (+опционально clang)
2) Собираем DMD
3) Собираем LDC, указывая инсталляции п.1 и п.2 (LLVM точно бэкэнд, роль DMD - пока не знаю, обязательность появилась в последней версии LDC)

Это первый и самый простой шаг. Теперь мне нужно получить туллчейны для x86_64-w64-mingw32.static, x86_64-w64-mingw32.shared, i686-w64-mingw32.static, i686-w64-mingw32.shared (MacOSX,Android,iOS - в планах, как осилю и осознаю). Первая попытка создания была провальной, на сайте мне подсказали кое-чего, но прошло много времени, обновились версии, появилась эта "обязательность DMD". В общем, я опять в непонятках, как и что собирать, в каких форматах должны быть рантайм-либы. А тут еще "сюрприз" от LLVM (типа с версии 3.9 autotools'а больше не будет, только CMAKE). Ну вот я и вернулся к началу :-\

_________________
Обращаюсь на "ты". Если не устраивает - пишите в ПМ, я применю патч :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Autoconf =► CMAKE
СообщениеДобавлено: Чт 12 май, 2016 2:48 pm 
Не в сети

Зарегистрирован: Чт 14 май, 2009 6:56 pm
Сообщения: 736
Я не до конца уловил что вам надо. Вам нужен кросс-платформенный компилятор D? Для этого достаточно собрать LDC с LLVM, в котором были включены нужные бэкэнды.

В отличие от GCC, компиляторы на LLVM не надо собирать для каждой отдельной архитектуры. Например, clang может компилировать и под свой хост, и под другой таргет одновременно. Из того что я прочел про LDC, он работает так же.

Цитата:
3) Собираем LDC, указывая инсталляции п.1 и п.2 (LLVM точно бэкэнд, роль DMD - пока не знаю, обязательность появилась в последней версии LDC)

Полагаю, LDC сам написан на D, поэтому для его компиляции требуется собранный компилятор D. Поэтому в пункте 2 не обязательно собирать DMD, достаточно скачать бинарь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Autoconf =► CMAKE
СообщениеДобавлено: Чт 12 май, 2016 4:43 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт 12 сен, 2003 4:34 pm
Сообщения: 373
Откуда: Минск
arrowdodger писал(а):
Я не до конца уловил что вам надо. Вам нужен кросс-платформенный компилятор D?

Да.

arrowdodger писал(а):
Для этого достаточно собрать LDC с LLVM, в котором были включены нужные бэкэнды.

В отличие от GCC, компиляторы на LLVM не надо собирать для каждой отдельной архитектуры. Например, clang может компилировать и под свой хост, и под другой таргет одновременно. Из того что я прочел про LDC, он работает так же.

Вчера это уже уяснил. Нативным clang'ом скомпилировал под x86_64-w64-mingw32, потом линкером x86_64-w64-mingw32.static-ld слинковал exe-файл. Все норм.

arrowdodger писал(а):
Полагаю, LDC сам написан на D, поэтому для его компиляции требуется собранный компилятор D.

Так и есть. Хотя тулзы - частично. А либы на 100%.

arrowdodger писал(а):
Поэтому в пункте 2 не обязательно собирать DMD, достаточно скачать бинарь.

Ну эт не проблема, сборка DMD из сырцов у меня около минуты.

Пока в процессе короч ...)

_________________
Обращаюсь на "ты". Если не устраивает - пишите в ПМ, я применю патч :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Зарегистрированные пользователи: Bing [Bot], Google [Bot], Yahoo [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
Яндекс.Метрика