Table of Contents
Openwrt packaging
Useful commands
make package/motion/{clean,install} V=s
Openwrt Build system
Build_root
- buildroot installation:
Download build_root
svn co svn://svn.openwrt.org/openwrt/trunk/
Downloading Sources
You can either check out the OpenWrt source code via git. (see https://dev.openwrt.org/wiki/GetSource) GIT
The recommended way of checking out the OpenWrt source code is cloning the Git repository using one of the following commands: trunk (main development tree)
The development branch (trunk) contains everything from documentation to experimental patches. Main repository
git clone git://git.openwrt.org/openwrt.git
Packages feed
git clone git://git.openwrt.org/packages.git
12.09 branch (Attitude Adjustment) Main repository
git clone git://git.openwrt.org/12.09/openwrt.git
Packages feed
git clone git://git.openwrt.org/12.09/packages.git
Check out certain revision
git commits are tagged with SVN ids. git log --grep=<svn id> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@42139 3c298f89-4303-0410-b956-a3cf2f4a3e73
Download and install feed. See below for using custom feed.
cd ~/openwrt/openwrt ./scripts/feeds update -a ./scripts/feeds install -a
Make OpenWrt Buildroot check for missing packages on your build-system using ONE of the following commands:
make defconfig make prereq make menuconfig
Build
make -j 3
Show Verbose:
make -j 3 V=s BUILD_LOG=1 make -j 3 BUILD_LOG=1
BUILD_LOG=1 Write output to logfile perserving error output order. Each make-worker dumping outputs to stdout causes big mess.
Run make without -j1 and with V=s to see single compilation output.
Building in the background
If you intend to use your system while building, you can have the build process use only idle I/O and CPU capacity like this (dualcore CPU):
ionice -c 3 nice -n19 make -j 2
Building single Packages
When developing or packaging software for OpenWrt, it is convenient to be able to build only the package in question (e.g. with package cups):
make package/cups/compile V=s
For the package mc (midnight commander), which is contained the feed packages it looks like this:
make package/feeds/packages/mc/compile V=s
Note that the path start in package directory and package/feeds may not have exactly the same structure as feeds. For example package in ~/openwrt/trunk/feeds/packages/net/snort will be compiled using make ~/openwrt/trunk/package/feeds/packages/snort/compile V=s. Spotting build errors
If for some reason the build fails, the easiest way to spot the error is to do:
make V=s 2>&1 | tee build.log | grep -i error
The above saves a full verbose copy of the build output (with stdout piped to stderr) in /openwrt/trunk/build.log and only shows errors on the screen.
package/index is used after patch. What does this means?
make package/libnfc/{clean,compile} package/index V=s BUILD_LOG=1
“clean” clears the package in builddir. “compile” recreate the package (from feeds/packages/) in builddir and compile. So make changes to code in feeds then clean,compile.
More:
Clean
make clean
Deletes contents of the directories /bin and /build_dir.
make dirclean
Deletes contents of the directories /bin and /builddir and additionally /stagingdir and /toolchain (=the cross-compile tools) and /logs. 'Dirclean' is your basic “Full clean” operation.
make distclean
Nukes everything you have compiled or configured and also deletes all downloaded feeds contents and package sources.
CAUTION: In addition to all else, this will erase your build configuration (<buildroot_dir>/.config), your toolchain and all other sources. Use with care!
Clean linux objects.
make target/linux/clean
Clean package base-files objects.
make package/base-files/clean
Clean luci.
make package/feeds/luci/luci/clean
Build image
kernel_menuconfig
- Device driver
- <> Serial ATA and Parallel ATA drivers —> * [] Verbose ATA error reporting
- [*] ATA SFF support (for legacy IDE and PATA)
- Intel SCH PATA support
menuconfig
- Global build settings
- [] Compile with full language support * — Advanced configuration options (for developers) * [] Show broken platforms / packages
- — Toolchain Options
- [] Build with debug information * [] Image configuration —
>
- [*] Preinit configuration options —>
- Base system
- block-mount
- bridge
- libpthread
- libstdcpp
- libthread-db
- udev
- wireless-tools
- Administration
- sudo
- syslog-ng
- Development
- buildutil
- diffutil
- gdb
- gdb-server
- trace-cmd
- trace-cmd-extras
- Kernel module
- block device
- kmod ata core
- kmod ata piix
- kmod ide core
- kmod ide generic
- kmod nbd
- kmod scsi cdrom
- kmod scsi core
- filesystem
- fs-autofs4
- fs-ext4
- fs-nfs
- fs-vfat
- Input modules
- kmod-hid
- kmod-input-joydev
- input-matrixmap
- input-polldev
- Network support
- kmod-bridge
- kmod-tun
- Usb support
- usb-core
- usb-hid
- usb-serial
- pl2303
- usb-storage
- usb-storage-extras
- usb2-pic
- Video support
- video-core
- video-uvc
- Wireless device
- kmod-ath10k
- kmod-lib80211
- File system
- libext2fs
- Libraries
- database
- libsqlite3
- glib2 ←——– disable this Gnome graphical stuffs.
- jansson
- libarputil
- libcap
- libcunit
- libcurl
- libdaemon
- libdbus-glib
- libblkid
- libcharset
- libconfig
- libevent2-all
- libiconv-full
- libintl-full
- libcap
- librpc
- libusb-compat
- uclibcxx
- Multimedia
- ffmpeg
- motion
- Network
- IP Addr nad nameing
- avahi-autopid
- avahi-utils
- Routing and redirection
- ip
- iputils-all
- nettools-all
- netcat
- socat
- iperf
- wpasupplicatn
- Utilities
- Editor
- vim-full
- joe
- nano
- Filesystem
- resize2fs
- IMA-Carpc ←— update/install feed if not available!!!
- disc
- blkid
- fdisk
- dmesg
- hwclock
- iconv
- ldconfig
- ldd
- usbreset
- usbutils
=
Troubleshooting
When there is no clue!!!
make dirclean
make defconfig
make -j3 V=s
make V=99 tools/install
make toolchain/install
target/compile
package/compile
I can't find my <package> in menuconfig
Have you run this command? See this.
./scripts/feeds install <package>
Maybe you are not looking for it in the right submenu. See the Makefile of the package to find out.
cat package/feeds/packages/<package>/Makefile
You are looking for this:
define Package/<package>/Default SUBMENU:=Firewall SECTION:=net CATEGORY:=Network
Menuconfig appears to cache package lists and (especially) profiles. Try deleting the <buildroot_dir>/tmp directory and then running make menuconfig again.
cd ~/openwrt/trunk rm -rf tmp make menuconfig
Also try refreshing your package indexes:
./scripts/feeds update -i
The -i is important if you're not using the latest revisions of any packages, as this flag prevents updates from the feed sources.
Linaro not found on any mirror
I run openwrt trunk on a x86.
When I select the development/gcc package - build stops with an error.
maybe there is a copy and paste error in Makefile:
./package/feeds/packages/gcc/Makefile
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
results in gcc-4.6-linaro.tar.bz2
which can not be found on any server
PKG_MD5SUM:=354853e0b2da90c527e35aabb8d6f1e6
is a valid MD5 of the package make-3.81.tar.bz2
Please let me know if any further information is required.
Fix this file feeds/packages/devel/gcc/Makefile with latest MD5 from current repo: https://github.com/openwrt/packages/blob/master/devel/gcc/Makefile
Packaging
Sources:
2014-08
Available packages:
https://github.com/openwrt http://git.openwrt.org/ src-git packages https://github.com/openwrt/packages.git src-git openwrt-abandoned git://github.com/openwrt/packages-abandoned.git src-git luci http://git.openwrt.org/project/luci.git src-git routing https://github.com/openwrt-routing/packages.git src-git telephony http://git.openwrt.org/feed/telephony.git src-git management https://github.com/openwrt-management/packages.git src-svn imacarpc https://cvs.dai-labor.de/svn/dang/ima_pj/openwrt-feed/trunk/packages
Note: at this point, the packages are reorganized. Broken/ old packages are in abandoned.
Hi Valent, we decided to reorganize the packages feed in June, since lots of the packages in there were unmaintained and we had lot's of patches we couldn't review. The new feed resides on github which makes contributing more straigt-forward. See https://github.com/openwrt/packages. Now the problem with packages like python or php in "oldpackages" is that they build a version which have known security issues, so providing binaries for them without notice is a bit dubious. Note: we didn't delete any package-definitions we just stopped building binaries. Once someone takes over maintainership for them and keeps them updated we will gladly welcome them in our new packages feed and start building binariers for them again. The current status of "oldpackages" is this: If you are using trunk and want to use the possibly outdated packages you have to enable the oldpackages feed and build them manually. If you are using barrier breaker in the final version we will still build these outdated packages in binary form but won't enable the package repository in opkg.conf by default, so you have to manually opt-in to use these packages. Some packages there might be broken due to changes in the SDK but this will hopefully get addressed before the final release. The next release after barrier breaker will not include any unmaintained packages at all not even as opt-in. So if you want to see some of the old packages reappearing in trunk and future releases please adopt them and become a maintainer or convince someone else to do it. See https://github.com/openwrt/packages/blob/master/CONTRIBUTING.md
BuildPackage variables
Example: /home/td/openwrt/trunk/feeds/packages/multimedia/gstreamer/Makefile
101 define Build/InstallDev
102 $(INSTALL_DIR) $(1)/usr/include/gstreamer-$(GST_VERSION)
103 ( cd $(PKG_INSTALL_DIR); $(CP) \
104 ./usr/include/gstreamer-$(GST_VERSION)/* \
105 $(1)/usr/include/gstreamer-$(GST_VERSION)/ \
106 )
107 $(INSTALL_DIR) $(1)/usr/lib
108 ( cd $(PKG_INSTALL_DIR); $(CP) \
109 ./usr/lib/libgst*-$(GST_VERSION).{a,la,so*} \
110 $(1)/usr/lib/ \
111 )
112 $(INSTALL_DIR) $(1)/usr/lib/gstreamer-$(GST_VERSION)
113 ( cd $(PKG_INSTALL_DIR); $(CP) \
114 ./usr/lib/gstreamer-$(GST_VERSION)/libgst*.{la,so} \
115 $(1)/usr/lib/gstreamer-$(GST_VERSION)/ \
116 )
117 $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
118 ( cd $(PKG_INSTALL_DIR); $(CP) \
119 ./usr/lib/pkgconfig/gstreamer*-$(GST_VERSION).pc \
120 $(1)/usr/lib/pkgconfig/ \
121 )
122 $(INSTALL_DIR) $(2)/share/aclocal
123 ( cd $(PKG_INSTALL_DIR); $(CP) \
124 ./usr/share/aclocal/* \
125 $(2)/share/aclocal/ \
126 )
127 endef
128
129 define Package/gstreamer/install
130 /bin/true
131 endef
132
133 define Package/gstreamer-utils/install
134 $(INSTALL_DIR) $(1)/usr/bin
135 ( cd $(PKG_INSTALL_DIR); $(CP) \
136 ./usr/bin/gst-feedback* \
137 ./usr/bin/gst-launch* \
138 ./usr/bin/gst-inspect* \
139 ./usr/bin/gst-typefind* \
140 ./usr/bin/gst-xmlinspect* \
141 ./usr/bin/gst-xmllaunch* \
142 $(1)/usr/bin/ \
143 )
144 endef
145
146 define Package/libgstreamer/install
147 $(INSTALL_DIR) $(1)/usr/lib
148 ( cd $(PKG_INSTALL_DIR); $(CP) \
149 ./usr/lib/libgstbase-$(GST_VERSION).so.* \
150 ./usr/lib/libgstreamer-$(GST_VERSION).so.* \
151 $(1)/usr/lib/ \
152 )
153 endef
These lines…
133 define Package/gstreamer-utils/install 134 $(INSTALL_DIR) $(1)/usr/bin 135 ( cd $(PKG_INSTALL_DIR); $(CP) \ 136 ./usr/bin/gst-feedback* \ 137 ./usr/bin/gst-launch* \ 138 ./usr/bin/gst-inspect* \ 139 ./usr/bin/gst-typefind* \ 140 ./usr/bin/gst-xmlinspect* \ 141 ./usr/bin/gst-xmllaunch* \ 142 $(1)/usr/bin/ \ 143 ) 144 endef
… have this effect:
install -d -m0755 /home/td/openwrt/trunk/build_dir/target-i386_i486_uClibc-0.9.33.2/gstreamer-0.10.36/ipkg-x86/gstreamer-utils/usr/bin ( cd /home/td/openwrt/trunk/build_dir/target-i386_i486_uClibc-0.9.33.2/gstreamer-0.10.36/ipkg-install; cp -fpR ./u sr/bin/gst-feedback* ./usr/bin/gst-launch* ./usr/bin/gst-inspect* ./usr/bin/gst-typefind* ./usr/bin/gst-xmlinspect* ./usr/bin/gst-xmllaunch* /home/td/openwrt/trunk/build_dir/target-i386_i486_uClibc-0.9.33.2/gstreamer-0.10.36/ipk g-x86/gstreamer-utils/usr/bin/ )
As you can see, there's not much work to be done; everything is hidden in other makefiles and abstracted to the point where you only need to specify a few variables.
PKG_NAME - The name of the package, as seen via menuconfig and ipkg PKG_VERSION - The upstream version number that we're downloading PKG_RELEASE - The version of this package Makefile PKG_BUILD_DIR - Where to compile the package PKG_SOURCE - The filename of the original sources PKG_SOURCE_URL - Where to download the sources from (directory) PKG_MD5SUM - A checksum to validate the download PKG_CAT - How to decompress the sources (zcat, bzcat, unzip) PKG_BUILD_DEPENDS - Packages that need to be built before this package, but are not required at runtime. Uses the same syntax as DEPENDS below. PKG_INSTALL - Setting it to "1" will call the package's original "make install" with prefix set to PKG_INSTALL_DIR PKG_INSTALL_DIR - Where "make install" copies the compiled files e.g: /home/td/openwrt/trunk/build_dir/target-i386_i486_uClibc-0.9.33.2/gstreamer-0.10.36/ipkg-install $(1) - $(INSTALL_DIR) e.g: /home/td/openwrt/trunk/build_dir/target-i386_i486_uClibc-0.9.33.2/gstreamer-0.10.36/ipk g-x86/gstreamer-utils/ PKG_FIXUP - ???
libint/iconv
To enable full version:
- The OpenWrt menuconfig gained a new boolean symbol called
“CONFIGBUILDNLS” which is disabled by default [2]. Turning it on will enable the building of the full gettext (libintl) and libiconv packages.
- The setting can be found in the “Global Build Settings” menu, called
“Compile with full language support”.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi,
following the discussion about stubbed libintl and libiconv
implementations in OpenWrt [1], I decided to implement a switching
mechanism for those libraries in the OpenWrt buildroot.
This is a short explanation for packagers and image builders on howto
prepare packages to work with the switching.
The OpenWrt menuconfig gained a new boolean symbol called
"CONFIG_BUILD_NLS" which is disabled by default [2]. Turning it on will
enable the building of the full gettext (libintl) and libiconv packages.
The setting can be found in the "Global Build Settings" menu, called
"Compile with full language support".
Packages using either iconv or intl have been changed [3] to include the
new convenience file "include/nls.mk" which exports variables to use
within Makefiles to pull in the right iconv or intl implementation.
The exported variables are:
ICONV_FULL - set to 1 if the full iconv implementation is used,
else unset
ICONV_PREFIX - path to the location of the include/ and lib/ dirs
of the currently used iconv implementation
ICONV_DEPENDS - expands to a dependency specification that results
either in +libiconv-full or nothing, depending on the
CONFIG_BUILD_NLS symbol
ICONV_CFLAGS - contains the appropriate CFLAGS to make programs find
the iconv headers
ICONV_CPPFLAGS - alias to ICONV_CFLAGS
ICONV_LDFLAGS - contains the appropriate LDFLAGS to make programs link
to the iconv implementation
INTL_FULL - set to 1 if the full libintl implementation is used,
else unset
INTL_PREFIX - path to the location of the include/ and lib/ dirs
of the currently used libintl implementation
INTL_DEPENDS - expands to a dependency specification that results
either in +libintl-full or nothing, depending on the
CONFIG_BUILD_NLS symbol
INTL_CFLAGS - contains the appropriate CFLAGS to make programs find
the libintl headers
INTL_CPPFLAGS - alias to INTL_CFLAGS
INTL_LDFLAGS - contains the appropriate LDFLAGS to make programs link
to the libintl implementation
Additionally the include automatically extends the TARGET_CFLAGS,
TARGET_CPPFLAGS and TARGET_LDFLAGS variables so that most programs
should pick up the libs automatically in their configure/make process.
To adapt existing package Makefiles to the new mechanism, the following
changes must be made:
- Add "include $(INCLUDE_DIR)/nls.mk" below the existing "package.mk"
include
- Remove existing extensions to TARGET_CFLAGS/CPPFLAGS/LDFLAGS like
"TARGET_CFLAGS+=-I$(STAGING_DIR)/usr/lib/libintl/include/" (if any)
- Replace existing extensions to other variables with $(ICONV_PREFIX),
$(INTL_PREFIX) where applicable (e.g.
"EXTRA_CPPFLAGS+=-I$(STAGING_DIR)/usr/lib/libiconv/include" to
"EXTRA_CPPFLAGS+=$(ICONV_CPPFLAGS)" or
"EXTRA_CPPFLAGS+=-I$(ICONV_PREFIX)/include")
- Replace dependency specifications like +libiconv, +libiconv-full,
+libintl or +libintl-full with $(ICONV_DEPENDS) or $(INTL_DEPENDS)
- Some packages have configure switches like "--with-libiconv=gnu",
those should be wrapped similar to this:
"$(if $(ICONV_FULL),--with-libiconv=gnu)"
- If a program is known to fail with the stub implementation, a
dependency like "DEPENDS:=@BUILD_NLS" can be specified to hide and
disable the package from menuconfig if CONFIG_BUILD_NLS is unset
Neither the stub nor the full packages install their (shared) objects
and headers into a "standard" location ($(STAGING_DIR)/usr/...) anymore
so programs that must use them have to use the nls.mk facility.
Programs with optional iconv/intl support will just skip over them as
they're not detectable without extra flags anymore.
As the current Backfire branch and Trunk share the same packages feed,
the BUILD_NLS support has been merged into the latest branch as well.
Regards,
Jow
1)
http://lists.en.qi-hardware.com/pipermail/discussion/2011-January/006770.html
2) https://dev.openwrt.org/changeset/25302
3) https://dev.openwrt.org/changeset/25319
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAk1Jz30ACgkQdputYINPTPNeVwCdGESiq8L4sVHRzVlY0EVJNfSW
4gsAni4B2GROqtBRwYz5yKx10EPy3yQ3
=gSoQ
-----END PGP SIGNATURE-----
Fix external toolchain build: linking missing libs
Problem: libiconv not found when linking.
This patch is a new version of a patch already sent several times on the mailing-list, committed and reverted a few times by Daniel Laird, due to several imperfections. This version is a new try at finding a solution that works for everybody. Hopefully it'll work The original problem is that external toolchain builds failed because packages couldn't find their dependent libraries at configure time and could not be linked with them. To fix these two problems, two things are added: * The TARGETLDFLAGS variable was exposed as LDFLAGS at ./configure time thanks to TARGETCONFIGUREOPTS. The TARGETLDFLAGS variable contains -L options with the path in the STAGINGDIR for the libraries. It allows ./configure scripts to properly compile the small test programs testing whether a dependency is properly installed. * The TARGETCFLAGS contains a new -Wl,–rpath-link option for both $(STAGINGDIR)/lib and $(STAGINGDIR)/usr/lib. It allows library depending on other libraries to link properly. The TARGETCFLAGS is exposed as CFLAGS in TARGETCONFIGURE_OPTS. This new version fixes a problem encountered by hartleys hartleys@visionengravers.com when building the kernel. The problem was that the -Wl,–rpath-link options were added to LDFLAGS, while there are options for the C compiler, not the ld linker. Moving them to CFLAGS seems to fix the issue.
Example: TARGETLDFLAGS+=-Wl,-rpath-link=$(STAGINGDIR)/usr/lib
include $(TOPDIR)/rules.mk #include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=strongswan PKG_VERSION:=4.3.6 PKG_RELEASE:=6 PATCH_DIR=./patches PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=http://download.strongswan.org/ PKG_MD5SUM:=e071f46b6c463ce76900758734e6143e #PKG_SHA1=xxxx 17 18 #PKG_VERSION:=1.7.1 19 #PKG_RELEASE:=1 20 #PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 21 #PKG_SOURCE_URL=http://dl.bintray.com/nfc-tools/sources/ 22 #PKG_SHA1:=d77c1408f5e38f24d69778b2ff82f68b2d7bc111 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install include $(INCLUDE_DIR)/package.mk ## THIS IS IT! TARGET_LDFLAGS+=-Wl,-rpath-link=$(STAGING_DIR)/usr/lib define Package/strongswan SECTION:=net CATEGORY:=Network
Problems with linking libiconv (full)
In general add dependencies or link directive: This works most:
17 TARGET_LDFLAGS+=\ 18 -Wl,-rpath-link=$(STAGING_DIR)/usr/lib \ 19 $(if $(ICONV_FULL),-liconv) <------- here 20 21 define Package/libsoup 22 SECTION:=libs 23 CATEGORY:=Libraries 24 TITLE:=libsoup 25 URL:=http://live.gnome.org/LibSoup 26 DEPENDS:=+glib2 +libxml2 +libgnutls $(ICONV_DEPENDS) <------- here 27 endef
95 EXTRA_LDFLAGS+= \
96 -Wl,-rpath-link=$(STAGING_DIR)/usr/lib \
97 -L$(ICONV_PREFIX)/lib -L$(INTL_PREFIX)/lib
98
99 TARGET_LDFLAGS += \
-Wl,-rpath-link=$(STAGING_DIR)/usr/lib \
$(if $(ICONV_FULL),-liconv)
Compile glib2 with iconv
Don't need glib2 it's Gnome graphics stuffs.
Many other package depend on glib2 with libiconv so fix glib2.
vim feeds/packages/libs/glib2/Makefile
28 include $(INCLUDE_DIR)/nls.mk
29
30 TARGET_LDFLAGS+=\ <---------------------------- ADD these 3 lines
31 -Wl,-rpath-link=$(STAGING_DIR)/usr/lib \
32 $(if $(ICONV_FULL),-liconv)
33
TARGET_LDFLAGS+=\
-Wl,-rpath-link=$(STAGING_DIR)/usr/lib \
$(if $(ICONV_FULL),-liconv)
33
34 define Package/glib2
35 SECTION:=libs
36 CATEGORY:=Libraries
37 DEPENDS:=$(ICONV_DEPENDS) $(INTL_DEPENDS) +zlib +libpthread +libffi
38 TITLE:=glib 2.0
39 URL:=http://www.gtk.org/
40 endef
Error & meaning
Kernel config problem
Problem desc:
scripts/kconfig/conf --silentoldconfig Kconfig * * Restart config... * * * Near Field Communication (NFC) devices * PN544 NFC driver (PN544_NFC) [N/m/y/?] (NEW) aborted! Console input/output is redirected. Run 'make oldconfig' to update configuration. make[7]: *** [silentoldconfig] Error 1 make[6]: *** [silentoldconfig] Error 2 make[6]: Nothing to be done for `all'. make[6]: Nothing to be done for `relocs'.
Resolution:
Add CONFIG_X86_SPEEDSTEP_CENTRINO to target/linux/x86/config-3.3
Package gdbserver is missing dependencies for the following libraries: libthread_db.so.1
Attitude Adjustment
–
> gdbserver needs libthread_db. Select it or it's not there?
Patch:
--- trunk/package/gdb/Makefile.orig 2012-08-25 12:49:29.583032750 +0200
+++ trunk/package/gdb/Makefile 2012-08-25 12:50:40.354038948 +0200
@@ -75,8 +75,10 @@ define Package/gdb/install
endef
define Package/gdbserver/install
- $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_DIR) $(1)/usr/{bin,lib}
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/gdbserver $(1)/usr/bin/
+ $(CP) $(TOOLCHAIN_DIR)/lib/libthread_db* $(1)/usr/lib
endef
$(eval $(call BuildPackage,gdb))
+$(eval $(call BuildPackage,gdbserver))
Etcs
Eglibc vs glibc vs uclibc
- eglibc vs glibc https://forum.openwrt.org/viewtopic.php?id=31174
eglibc vs glibc was an interesting comparison between glibc and eglibc, with some mention of uClibc. In terms of final image size, glibc was largest, eglibc was 300K smaller, and uClibc 800K smaller (than glibc). (Note that the full image size was 10 MB, but this is very dependent on the set of packages). In terms of speed, there was no noticeable difference between glibc and eglibc, but uClibc was “substantially slower”. (it's not clear however exactly how the speed measurements were done) Individual libc*.so sizes followed the trend, with glibc clocking in at 1474 KB, eglibc at 1375 KB and uClibc at 331 KB.