zyxmon Posted January 20 Share Posted January 20 2. Вы указываете как собрать пакет, бинарники (приложения) дело десятое. Quote Link to comment Share on other sites More sharing options...
zyxmon Posted January 20 Share Posted January 20 8. Если не ошибаюсь - не собирать пакет (ipk) - например если используется статическая, а не динамическая библиотека при сборке зависимого пакета. Или просто нужны хедеры. 1 Quote Link to comment Share on other sites More sharing options...
Zeleza Posted January 20 Author Share Posted January 20 @zyxmon благодарю Вас за ответы. Цитата 4. Почему в варианте "статики" указана переменная PKG_FIXUP:=autoreconf, а в варианте "динамики" ее нет? Цитата 4. На мой взгляд тут нет никакой связи. Тогда поясните пожалуйста, какой смысл использования этой переменной именно в первом варианте? Цитата 6. Как понять, какие mk-файлы необходимо включать в файл манифеста и в каких случаях? Речь идет о конструкциях include $(INCLUDE_DIR)/*.mk. Цитата 6. По аналогии с другими Makefile - главное что используется для сборки make, cmake или экзотика Где можно найти описание целей использования данных файлов при сборке пакетов? Цитата 2. Как работают секции типа define Build/* при сборке нескольких приложений сразу (как в нашем случае)? Эти секции будут исполняться для всех приложений, которые прописаны в секциях define Package/*? В документации ответа на этот вопрос не нашел. Прошу пояснить данный вопрос. 52 минуты назад, zyxmon сказал: 2. Вы указываете как собрать пакет, бинарники (приложения) дело десятое. По одному пакету понятно, не ясен момент если собираются несколько пакетов? Quote Link to comment Share on other sites More sharing options...
Zeleza Posted January 20 Author Share Posted January 20 При сборке под mips возникла проблема следующая (под остальные две платформы - собралось без ошибок): checking whether <wchar.h> uses 'inline' correctly... no configure: error: <wchar.h> cannot be used with this compiler (mips-openwrt-linux-gnu-gcc -EB -O2 -pipe -mno-branch-likely -mips32r2 -mtune=mips32r2 -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -msoft-float -I/apps/entware/staging_dir/toolchain-mips_mips32r2_gcc-8.4.0_glibc-2.27/include ). This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in C99 mode. You have four options: - Add the flag -fgnu89-inline to CC and reconfigure, or - Fix your include files, using parts of <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or - Use a gcc version older than 4.3, or - Don't use the flags -std=c99 or -std=gnu99. Configuration aborted. Прошу подсказать, какой блок if необходимо включить в файл манифеста для mips и какой из 4 предложенных вариантов выбрать для решения данного вопроса. Если подставить флаг -fgnu89-inline, под остальные платформы пакет соберется? Quote Link to comment Share on other sites More sharing options...
zyxmon Posted January 20 Share Posted January 20 27 минут назад, Zeleza сказал: По одному пакету понятно, не ясен момент если собираются несколько пакетов? Без разницы. Это идеология Openwrt делить одну сборку на маленькие ipk. Экономят место на флешке. 30 минут назад, Zeleza сказал: PKG_FIXUP:=autoreconf Пакет можно собирать по разному в зависимости от того, как задумал разработчик. Инструкция означает, что сначала выполняется https://www.geeksforgeeks.org/autoreconf-command-in-linux-with-examples/ 1 Quote Link to comment Share on other sites More sharing options...
TheBB Posted January 20 Share Posted January 20 0. Намерено приведено неск. вариантов, чтоб показать разные способы. 1. Всё от Вас зависит. Выкинуть из проекта сборку libhttpserver (отдельно собирать статикой, см. BUILDONLY (gerbera+libebml+libmatroska+...)), изменить флаги сборки. 2. Выполняется последовательно, шаг за шагом. Как распишите, так и будет собираться. 3. Уже ответили. Для защиты файлов от перезаписи/удаления (если вносились изменения) при обновлении/удалении пакета (`opkg --force-overwrite` перезапишет). 4. Автогенерация. Используется, если отсутствует файл "configure" (чтоб сгенерировать) или патчатся configure.{ac,in} (чтоб переконфигурировать). Или расписываете ручками (2-4 Makefile`ы). 5. Уже ответили. А CMAKE_INSTALL служит для другого - аналог Build/InstallDev. 6. Уже ответили. По аналогии. Второй пост в теме: определить язык/систему сборки (см. пакеты: perl-*, php8-pecl-*, python*, samba4(waf), serf(scons), gensio(swig), mariadb(cmake), mpd(meson), torrserver(go), ...) 7. Т.к. производятся доп. действия (распаковка внешней зависимости и генерация файлов). Если перенесёте их в др. секцию, этап Build/Prepare можно выкинуть (будут выполнены действия по умолчанию). 8. Уже ответили. Собрать что-то, но без создания пакета. 9. Cм., во что разворачивается URL запроса (удалите dl/libhttpserver*, удалите знак "?" и попробуйте собрать пакет). Втыкание по ссылкам и насилование Makefile`ов категорически приветствуется ))) 1 Quote Link to comment Share on other sites More sharing options...
Zeleza Posted January 20 Author Share Posted January 20 (edited) Отвечу сам себе, возможно пригодится кому-либо. 5 часов назад, Zeleza сказал: Прошу подсказать, какой блок if необходимо включить в файл манифеста для mips и какой из 4 предложенных вариантов выбрать для решения данного вопроса. Если подставить флаг -fgnu89-inline, под остальные платформы пакет соберется? Под mips флаг -fgnu89-inline решил проблему. Добавление следующего кода помогло: ifeq ($(findstring mips,$(ARCH)),) TARGET_CFLAGS += -fgnu89-inline endif Edited January 20 by Zeleza Quote Link to comment Share on other sites More sharing options...
TheBB Posted January 20 Share Posted January 20 (edited) Статика ))) 1. libhttpserver Скрытый текст # SPDX-License-Identifier: WTFPL include $(TOPDIR)/rules.mk PKG_NAME:=libhttpserver PKG_VERSION:=0.18.2 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/etr/libhttpserver/tar.gz/refs/tags/$(PKG_VERSION)? PKG_HASH:=1dfe548ac2add77fcb6c05bd00222c55650ffd02b209f4e3f133a6e3eb29c89d PKG_FIXUP:=autoreconf PKG_LICENSE:=LGPL-2.1-or-later PKG_LICENSE_FILES:=LICENSE PKG_INSTALL:=1 include $(INCLUDE_DIR)/package.mk define Package/libhttpserver SECTION:=libs CATEGORY:=Libraries TITLE:=C++ library for creating an embedded Rest HTTP server URL:=https://github.com/etr/libhttpserver DEPENDS:=+libmicrohttpd +libstdcpp BUILDONLY:=1 endef define Package/libhttpserver/description libhttpserver is a C++ library for building high performance RESTful web servers. endef CONFIGURE_ARGS += \ --disable-doxygen-doc \ --disable-examples \ --disable-shared \ --enable-same-directory-build define Build/InstallDev $(INSTALL_DIR) $(1)/opt/include $(CP) $(PKG_INSTALL_DIR)/opt/include/* $(1)/opt/include $(INSTALL_DIR) $(1)/opt/lib $(CP) $(PKG_INSTALL_DIR)/opt/lib/libhttpserver.a $(1)/opt/lib $(INSTALL_DIR) $(1)/opt/lib/pkgconfig $(CP) $(PKG_INSTALL_DIR)/opt/lib/pkgconfig/*.pc $(1)/opt/lib/pkgconfig endef $(eval $(call BuildPackage,libhttpserver)) 2. my-super-prog (заменить на) Скрытый текст # SPDX-License-Identifier: WTFPL include $(TOPDIR)/rules.mk PKG_NAME:=my-super-prog PKG_VERSION:=0.0.0 PKG_RELEASE:=1 PKG_LICENSE:=WTFPL PKG_LICENSE_FILES:=LICENSE.txt PKG_BUILD_DEPENDS:=libhttpserver include $(INCLUDE_DIR)/package.mk define Package/my-super-prog SECTION:=My section CATEGORY:=My utils SUBMENU:=Super TITLE:=My super cool proga URL:= DEPENDS:=+libmicrohttpd +libstdcpp endef define Package/my-super-prog/description My super cool program. endef Build/Configure:=: TARGET_LDFLAGS += -lhttpserver -lmicrohttpd define Build/Compile ( cd $(PKG_BUILD_DIR); \ $(TARGET_CXX) $(TARGET_CPPFLAGS) $(TARGET_CXXFLAGS) \ -o my-super-prog my-super-prog.cpp $(TARGET_LDFLAGS); \ ) endef define Package/my-super-prog/install $(INSTALL_DIR) $(1)/opt/sbin $(INSTALL_BIN) $(PKG_BUILD_DIR)/my-super-prog $(1)/opt/sbin/my-super-cool-prog endef $(eval $(call BuildPackage,my-super-prog)) Скрытый текст root@Entware:~# opkg install my-super-prog_0.0.0-1_mips-3.4.ipk Installing my-super-prog (0.0.0-1) to root... Installing libgcrypt (1.10.1-1) to root... Downloading http://bin.entware.net/mipssf-k3.4/libgcrypt_1.10.1-1_mips-3.4.ipk Installing libmicrohttpd-ssl (0.9.75-1) to root... Downloading http://bin.entware.net/mipssf-k3.4/libmicrohttpd-ssl_0.9.75-1_mips-3.4.ipk Configuring libgcrypt. Configuring libmicrohttpd-ssl. Configuring my-super-prog. root@Entware:~# root@Entware:~# ldd /opt/sbin/my-super-cool-prog linux-vdso.so.1 (0x77381000) libmicrohttpd.so.12 => /opt/lib/libmicrohttpd.so.12 (0x7731a000) libstdc++.so.6 => /opt/lib/libstdc++.so.6 (0x77176000) libm.so.6 => /opt/lib/libm.so.6 (0x7706e000) libgcc_s.so.1 => /opt/lib/libgcc_s.so.1 (0x77048000) libc.so.6 => /opt/lib/libc.so.6 (0x76eb4000) libpthread.so.0 => /opt/lib/libpthread.so.0 (0x76e86000) libgnutls.so.30 => /opt/lib/libgnutls.so.30 (0x76c7e000) /opt/lib/ld.so.1 (0x77350000) libnettle.so.8 => /opt/lib/libnettle.so.8 (0x76c28000) libhogweed.so.6 => /opt/lib/libhogweed.so.6 (0x76bd6000) libgmp.so.10 => /opt/lib/libgmp.so.10 (0x76b4e000) root@Entware:~# root@Entware:~# opkg info my-super-prog Package: my-super-prog Version: 0.0.0-1 Depends: libc, libssp, librt, libpthread, libmicrohttpd, libstdcpp Status: install user installed Architecture: mips-3.4 Installed-Time: 1674216789 root@Entware:~# root@Entware:~# curl -XGET -v http://localhost:8080/hello Note: Unnecessary use of -X or --request, GET is already inferred. * Failed to connect to localhost port 8080 after 1 ms: Connection refused curl: (7) Failed to connect to localhost port 8080 after 1 ms: Connection refused root@Entware:~# root@Entware:~# my-super-cool-prog & root@Entware:~# root@Entware:~# ps | grep -v grep | grep my-super 7253 root 52940 S my-super-cool-prog root@Entware:~# root@Entware:~# curl -XGET -v http://localhost:8080/hello Note: Unnecessary use of -X or --request, GET is already inferred. > GET /hello HTTP/1.1 > Host: localhost:8080 > User-Agent: curl/7.82.0 > Accept: */* > Data was: Now data is:no data passed!!! < HTTP/1.1 200 OK < Date: Fri, 20 Jan 2023 12:45:53 GMT < Content-Type: text/plain < Content-Length: 14 < Hello World!!!root@Entware:~# root@Entware:~# Edited January 20 by TheBB add to log 1 Quote Link to comment Share on other sites More sharing options...
TheBB Posted January 20 Share Posted January 20 (edited) Что-то у меня такого нет... 33 минуты назад, Zeleza сказал: Добавление следующего кода помогло: или TARGET_CFLAGS += $(if $(CONFIG_mips),-fgnu89-inline) Edited January 20 by TheBB 1 Quote Link to comment Share on other sites More sharing options...
TheBB Posted January 20 Share Posted January 20 35 минут назад, TheBB сказал: Build/Configure:=: ^ да, сразу, чтоб закрыть вопрос, отключение (сброс) конфигурирования (косметика, сравнить вывод c/без). ))) Quote Link to comment Share on other sites More sharing options...
Zeleza Posted January 20 Author Share Posted January 20 2 часа назад, TheBB сказал: Статика ))) Получается, что для установки статики необходимо сначала собрать пакет libhttpserver, затем установить его на устройство и только затем собрать и установить my-super-prog? Все верно? Quote Link to comment Share on other sites More sharing options...
TheBB Posted January 20 Share Posted January 20 1 час назад, Zeleza сказал: установить ??? Создаете каталог libhttpserver и закидываете в него Makefile (libhttpserver) из comment=158866, свой Makefile правите, ориентируясь на Makefile (my-super-prog) из comment=158866. Собираете пакет, Дальше, если хотите, ставите на устройстро для проверки (см. лог из comment=158866). Quote Link to comment Share on other sites More sharing options...
Zeleza Posted January 20 Author Share Posted January 20 Т.е. получим на выходе один ipk со всем содержимым или два ipk? Quote Link to comment Share on other sites More sharing options...
TheBB Posted January 20 Share Posted January 20 Я пример с gerbera (см. 1 из comment=158862) не зря привёл (https://github.com/Entware/entware-oldpackages-ports/blob/master/gerbera/Makefile#L22) Quote Link to comment Share on other sites More sharing options...
Zeleza Posted January 21 Author Share Posted January 21 (edited) Доброго утра, 16 часов назад, TheBB сказал: Я пример с gerbera (см. 1 из comment=158862) не зря привёл (https://github.com/Entware/entware-oldpackages-ports/blob/master/gerbera/Makefile#L22) В приведенном Вами примере все используемые библиотеки присутствуют в стандартном репозитории, в моем же примере - библиотеки в стандартном репозитории нет, потому ответ Ваш мне не ясен. Если мы собираем по "статике" два пакета и один из них библиотека, то получим на выходе два ipk и тогда пользователю необходимо будет заботится о том, чтобы сначала скачать один пакет и затем второй, я же хочу этого избежать и сделать (как варианте с динамикой) автоматическую сборку библиотеки и затем сборку пакета в одном флаконе. Можно ли такого достичь в варианте со "статикой"? ------------- Так же, по возможности, прошу помочь в вопросе повторной компиляции при исправлении ошибок в коде. Делал make clean, make package./my-super-prog/clean, обновлял feeds, но все едино - возникают ошибки при компиляции, причем при компиляции сопутствующих пакетов, а не целевого. Потому каждый раз приходится собирать все заново после make dirclean. Тогда ошибки появляются только при компиляции целевой программы, если они есть или пакет собирается на ура, но каждый раз ждать по 30-40 минут сборку всего тулчайна дело утомительное, когда меняешь в коде всего несколько строк. Потому прошу помочь развернутым ответом или ссылкой на источник развернутого ответа по данном вопросу - как ускорить процесс переборки пакета при внесении исправлений в код? Edited January 21 by Zeleza Quote Link to comment Share on other sites More sharing options...
zyxmon Posted January 21 Share Posted January 21 12 минуты назад, Zeleza сказал: то получим на выходе получается два ipk и тогда пользователю необходимо будет заботится о том, чтобы сначала скачать один пакет и затем второй И это правильно. 12 минуты назад, Zeleza сказал: Можно ли такого достичь в варианте со "статикой"? А что Вы называете "статикой" - если статическую линковку - то нужен один пакет с бинарником. 13 минуты назад, Zeleza сказал: Делал make clean, make package./my-super-prog/clean, обновлял feeds make package/<папка_спакетом>/clean make package/<папка_спакетом>/compile make package/<папка_спакетом>/prepare make package/<папка_спакетом>/configure Quote Link to comment Share on other sites More sharing options...
TheBB Posted January 21 Share Posted January 21 ЧЯДНТ? 9999.tar https://pastebin.com/AhueqJYM my-super-prog_0.0.0-1_aarch64-3.10.ipk my-super-prog_0.0.0-1_mipsel-3.4.ipk my-super-prog_0.0.0-1_mips-3.4.ipk Скрытый текст ~ # ~ # find /opt -name "*libhttpserver*" ~ # ~ # opkg install my-super-prog_0.0.0-1_aarch64-3.10.ipk Installing my-super-prog (0.0.0-1) to root... Configuring my-super-prog. ~ # ~ # ldd /opt/sbin/my-super-cool-prog linux-vdso.so.1 (0x0000007f8880f000) libmicrohttpd.so.12 => /opt/lib/libmicrohttpd.so.12 (0x0000007f887a9000) libstdc++.so.6 => /opt/lib/libstdc++.so.6 (0x0000007f885fd000) libm.so.6 => /opt/lib/libm.so.6 (0x0000007f88539000) libgcc_s.so.1 => /opt/lib/libgcc_s.so.1 (0x0000007f88514000) libc.so.6 => /opt/lib/libc.so.6 (0x0000007f883a4000) libpthread.so.0 => /opt/lib/libpthread.so.0 (0x0000007f88376000) libgnutls.so.30 => /opt/lib/libgnutls.so.30 (0x0000007f88114000) /opt/lib/ld-linux-aarch64.so.1 (0x0000007f887e1000) libnettle.so.8 => /opt/lib/libnettle.so.8 (0x0000007f880b9000) libhogweed.so.6 => /opt/lib/libhogweed.so.6 (0x0000007f8805f000) libgmp.so.10 => /opt/lib/libgmp.so.10 (0x0000007f87fdf000) ~ # ~ # my-super-cool-prog & ~ # ~ # curl -GET -v http://localhost:8080/hello > GET /hello HTTP/1.1 > Host: localhost:8080 > User-Agent: curl/7.86.0 > Accept: */* > Data was: Now data is:no data passed!!! < HTTP/1.1 200 OK < Date: Sat, 21 Jan 2023 10:10:47 GMT < Content-Type: text/plain < Content-Length: 14 < Hello World!!!~ # ~ # ~ # ps | grep -v grep | grep my-super 30397 pts/0 00:00:00 my-super-cool-p ~ # ~ # find /opt -name "*libhttpserver*" ~ # Quote Link to comment Share on other sites More sharing options...
TheBB Posted January 21 Share Posted January 21 1 час назад, Zeleza сказал: В приведенном Вами примере нет библиотек Действительно нет! ~ # ~ # opkg list | grep -E '(libebml|libmatroska|pugixml|spdlog)' ~ # Они, как тот суслик... Никто не видит, а они есть. ))) Quote Link to comment Share on other sites More sharing options...
Zeleza Posted January 21 Author Share Posted January 21 3 часа назад, zyxmon сказал: make package/<папка_спакетом>/clean make package/<папка_спакетом>/compile make package/<папка_спакетом>/prepare make package/<папка_спакетом>/configure Прошу пояснить. После команды make package/<папка_спакетом>/{clean,compile} например, возникает ошибка и после ее возникновения Вы предлагаете запустить make package/<папка_спакетом>/{prepare,configure}? Все верно? Quote Link to comment Share on other sites More sharing options...
zyxmon Posted January 22 Share Posted January 22 17 часов назад, Zeleza сказал: Все верно? Нет. Это примеры того, что можно делать. Например нужно добавить патчи - выполняем prepare и делаем патчи. И т.д. Криво работает конфигурация - выполняем configure, исправляем руками, далее compile для проверки. Quote Link to comment Share on other sites More sharing options...
Zeleza Posted Sunday at 05:55 AM Author Share Posted Sunday at 05:55 AM (edited) Бодрого дня Всем! При сборке возникла необходимость добавить в пакет библиотеки от boost: boost_system и boost_filesystem. Вопрос - где и что нужно прописать в Makefile, чтобы их добавить? Костыль нашел: в секцию define Package/my_package/install добавил ... $(CP) /apps/entware/staging_dir/target-aarch64_cortex-a53_glibc-2.27/opt/lib/libboost_system.so.* $(1)/opt/lib $(CP) /apps/entware/staging_dir/target-aarch64_cortex-a53_glibc-2.27/opt/lib/libboost_filesystem.so.* $(1)/opt/lib и все собирается и запускается, но это же костыль)) Знающие люди помогите понять, какую нужно использовать автоматическую переменную вместо "/apps/entware/staging_dir/target-aarch64_cortex-a53_glibc-2.27" или нужно делать как-то совсем иначе? Edited Sunday at 07:38 AM by Zeleza Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.