Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

8. Если не ошибаюсь - не собирать пакет (ipk) - например если используется статическая, а не динамическая библиотека при сборке зависимого пакета. Или просто нужны хедеры.

Опубликовано

@zyxmon благодарю Вас за ответы.

Цитата

4. Почему в варианте "статики" указана переменная PKG_FIXUP:=autoreconf, а в варианте "динамики" ее нет?

Цитата

4. На мой взгляд тут нет никакой связи.

Тогда поясните пожалуйста, какой смысл использования этой переменной именно в первом варианте?

 

Цитата

6. Как понять, какие mk-файлы необходимо включать в файл манифеста и в каких случаях? Речь идет о конструкциях include $(INCLUDE_DIR)/*.mk.
Цитата

6. По аналогии с другими Makefile - главное что используется для сборки make, cmake или экзотика

Где можно найти описание целей использования данных файлов при сборке пакетов?

 

Цитата

2. Как работают секции типа define Build/* при сборке нескольких приложений сразу (как в нашем случае)? Эти секции будут исполняться для всех приложений, которые прописаны в секциях define Package/*? В документации ответа на этот вопрос не нашел. Прошу пояснить данный вопрос.
52 минуты назад, zyxmon сказал:

2. Вы указываете как собрать пакет, бинарники (приложения) дело десятое.

По одному пакету понятно, не ясен момент если собираются несколько пакетов?

Опубликовано

При сборке под 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, под остальные платформы пакет соберется?

Опубликовано
27 минут назад, Zeleza сказал:

По одному пакету понятно, не ясен момент если собираются несколько пакетов?

Без разницы. Это идеология Openwrt делить одну сборку на маленькие ipk. Экономят место на флешке.

 

30 минут назад, Zeleza сказал:

 PKG_FIXUP:=autoreconf

Пакет можно собирать по разному в зависимости от того, как задумал разработчик. Инструкция означает, что сначала выполняется https://www.geeksforgeeks.org/autoreconf-command-in-linux-with-examples/

Опубликовано

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`ов категорически приветствуется )))

Опубликовано (изменено)

Отвечу сам себе, возможно пригодится кому-либо.

5 часов назад, Zeleza сказал:

Прошу подсказать, какой блок if необходимо включить в файл манифеста для mips и какой из 4 предложенных вариантов выбрать для решения данного вопроса. Если подставить флаг -fgnu89-inline, под остальные платформы пакет соберется?

Под mips флаг  -fgnu89-inline решил проблему. Добавление следующего кода помогло:

ifeq ($(findstring mips,$(ARCH)),)
	TARGET_CFLAGS += -fgnu89-inline
endif

 

Изменено пользователем Zeleza
Опубликовано (изменено)

Статика )))

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:~#

 

 

Изменено пользователем TheBB
add to log
Опубликовано (изменено)

Что-то у меня такого нет...

33 минуты назад, Zeleza сказал:

Добавление следующего кода помогло:

или

TARGET_CFLAGS += $(if $(CONFIG_mips),-fgnu89-inline)
Изменено пользователем TheBB
Опубликовано
35 минут назад, TheBB сказал:
Build/Configure:=:

^ да, сразу, чтоб закрыть вопрос, отключение (сброс) конфигурирования (косметика, сравнить вывод c/без). )))

Опубликовано
2 часа назад, TheBB сказал:

Статика )))

Получается, что для установки статики необходимо сначала собрать пакет libhttpserver, затем установить его на устройство и только затем собрать и установить my-super-prog? Все верно?

Опубликовано
1 час назад, Zeleza сказал:

установить

???

Создаете каталог libhttpserver и закидываете в него Makefile (libhttpserver) из comment=158866, свой Makefile правите, ориентируясь на Makefile (my-super-prog) из comment=158866. Собираете пакет, Дальше, если хотите, ставите на устройстро для проверки (см. лог из comment=158866).

 

 

Опубликовано

Т.е. получим на выходе один ipk со всем содержимым или два ipk?

Опубликовано (изменено)

Доброго утра,

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 минут сборку всего тулчайна дело утомительное, когда меняешь в коде всего несколько строк.
Потому прошу помочь развернутым ответом или ссылкой на источник развернутого ответа по данном вопросу - как ускорить процесс переборки пакета при внесении исправлений в код? 

Изменено пользователем Zeleza
Опубликовано
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

 

Опубликовано

ЧЯДНТ?

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*"
~ # 

 

 

Опубликовано
1 час назад, Zeleza сказал:

В приведенном Вами примере нет библиотек

Действительно нет!

~ # 
~ # opkg list | grep -E '(libebml|libmatroska|pugixml|spdlog)'
~ # 

Они, как тот суслик... Никто не видит, а они есть. )))

Опубликовано
3 часа назад, zyxmon сказал:
make package/<папка_спакетом>/clean
make package/<папка_спакетом>/compile
make package/<папка_спакетом>/prepare
make package/<папка_спакетом>/configure

Прошу пояснить.
После команды make package/<папка_спакетом>/{clean,compile} например, возникает ошибка и после ее возникновения Вы предлагаете  запустить make package/<папка_спакетом>/{prepare,configure}?
Все верно?

 

Опубликовано
17 часов назад, Zeleza сказал:

Все верно?

Нет. Это примеры того, что можно делать. Например нужно добавить патчи - выполняем prepare и делаем патчи. И т.д. Криво работает конфигурация - выполняем configure, исправляем руками, далее compile для проверки.

  • 1 месяц спустя...
Опубликовано (изменено)

Бодрого дня Всем!

При сборке возникла необходимость добавить в пакет библиотеки от 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" или нужно делать как-то совсем иначе? 

Изменено пользователем Zeleza
Опубликовано

Доброго дня всем гуру

Раз нет ответа, видимо, или не так спросил, или не хватает информации для ответа.
Направьте пожалуйста, что нужно предоставить, чтобы Вы смогли мне помочь в данном вопросе?

Опубликовано
В 19.03.2023 в 08:55, Zeleza сказал:

    $(CP) /apps/entware/staging_dir/target-aarch64_cortex-a53_glibc-2.27/opt/lib/libboost_system.so.* $(1)/opt/lib

$(CP) $(STAGING_DIR)/opt/lib/libboost_system.so.* $(1)/opt/lib

STAGING_DIR

  • 4 недели спустя...
Опубликовано (изменено)
В 22.03.2023 в 19:21, TheBB сказал:
$(CP) $(STAGING_DIR)/opt/lib/libboost_system.so.* $(1)/opt/lib

STAGING_DIR

Здравствуйте помогите пожалуйста собрать рабочий v2ray

Вот тут вроде форк рабочий но после установки ошибка

https://github.com/BI7PRK/luci-app-v2ray/releases

Версия прошивки

OpenWrt SNAPSHOT r22557-69812bf8ed / LuCI Master git-23.093.56957-2145121

Версия ядра

5.15.106

Screenshot_2023-04-14-11-15-01-957_com.mi.globalbrowser.jpg

Изменено пользователем kvsplz9860

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.