2 # Copyright (C) 2007-2014 OpenWrt.org
4 # This is free software, licensed under the GNU General Public License v2.
5 # See /LICENSE for more information.
8 include $(TOPDIR
)/rules.mk
12 PKG_MAINTAINER
:=Felix Fietkau
<nbd@nbd.name
>
13 PKG_LICENSE
:=GPL-3.0
-with-GCC-exception
15 PKG_FLAGS
:=hold essential nonshared
17 include $(INCLUDE_DIR
)/package.mk
20 LIBGCC_VERSION
:=$(GCC_VERSION
)
22 LIBC_VERSION
:=<LIBC_VERSION
>
23 LIBGCC_VERSION
:=<LIBGCC_VERSION
>
26 define Package
/gcc
/Default
29 URL
:=http
://gcc.gnu.org
/
30 VERSION
:=$(LIBGCC_VERSION
)-$(PKG_RELEASE
)
34 $(call Package
/gcc
/Default
)
35 TITLE
:=GCC support library
39 define Package
/libgcc
/config
41 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libgcc
43 config LIBGCC_ROOT_DIR
45 prompt
"libgcc shared library base directory"
46 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libgcc
47 default TOOLCHAIN_ROOT if
!NATIVE_TOOLCHAIN
48 default
"/" if NATIVE_TOOLCHAIN
50 config LIBGCC_FILE_SPEC
52 prompt
"libgcc shared library files (use wildcards)"
53 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libgcc
54 default
"./lib/libgcc_s.so.*"
59 define Package
/libatomic
60 $(call Package
/gcc
/Default
)
62 TITLE
:=Atomic support library
66 define Package
/libatomic
/config
68 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libatomic
70 config LIBATOMIC_ROOT_DIR
72 prompt
"libatomic shared library base directory"
73 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libatomic
74 default TOOLCHAIN_ROOT if
!NATIVE_TOOLCHAIN
75 default
"/" if NATIVE_TOOLCHAIN
77 config LIBATOMIC_FILE_SPEC
79 prompt
"libatomic shared library files (use wildcards)"
80 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libatomic
81 default
"./lib/libatomic.so.*"
87 $(call Package
/gcc
/Default
)
89 TITLE
:=GCC support library
92 define Package
/libssp
/config
94 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libssp
96 config LIBSSP_ROOT_DIR
98 prompt
"libssp shared library base directory"
99 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libssp
100 default TOOLCHAIN_ROOT if
!NATIVE_TOOLCHAIN
101 default
"/" if NATIVE_TOOLCHAIN
103 config LIBSSP_FILE_SPEC
105 prompt
"libssp shared library files (use wildcards)"
106 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libssp
107 default
"./lib/libssp.so.*"
113 define Package
/libstdcpp
114 $(call Package
/gcc
/Default
)
116 TITLE
:=GNU Standard C
++ Library v3
120 define Package
/libstdcpp
/config
122 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libstdcpp
124 config LIBSTDCPP_ROOT_DIR
126 prompt
"libstdcpp shared library base directory"
127 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libstdcpp
128 default TOOLCHAIN_ROOT if
!NATIVE_TOOLCHAIN
129 default
"/" if NATIVE_TOOLCHAIN
131 config LIBSTDCPP_FILE_SPEC
133 prompt
"libstdc++ shared library files (use wildcards)"
134 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libstdcpp
135 default
"./lib/libstdc++.so.*"
141 define Package
/libc
/Default
143 CATEGORY
:=Base system
144 VERSION
:=$(LIBC_VERSION
)-$(PKG_RELEASE
)
151 $(call Package
/libc
/Default
)
155 define Package
/libc
/config
157 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libc
161 prompt
"libc shared library base directory"
162 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libc
163 default TOOLCHAIN_ROOT if
!NATIVE_TOOLCHAIN
164 default
"/" if NATIVE_TOOLCHAIN
166 config LIBC_FILE_SPEC
168 prompt
"libc shared library files (use wildcards)"
169 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libc
170 default
"./lib/ld{*.so*,-linux*.so.*} ./lib/lib{anl,c,cidn,crypt,dl,m,nsl,nss_dns,nss_files,resolv,util}{-*.so,.so.*,.so}"
176 define Package
/libpthread
177 $(call Package
/libc
/Default
)
178 TITLE
:=POSIX thread library
181 define Package
/libpthread
/config
183 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libpthread
185 config LIBPTHREAD_ROOT_DIR
187 prompt
"libpthread shared library base directory"
188 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libpthread
189 default TOOLCHAIN_ROOT if
!NATIVE_TOOLCHAIN
190 default
"/" if NATIVE_TOOLCHAIN
192 config LIBPTHREAD_FILE_SPEC
194 prompt
"libpthread shared library files (use wildcards)"
195 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libpthread
196 default
"./lib/libpthread{-*.so,.so.*}"
202 define Package
/libthread-db
203 $(call Package
/libc
/Default
)
205 TITLE
:=POSIX thread library debugging support
208 define Package
/libthread-db
/config
210 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libthread-db
212 config LIBTHREAD_DB_ROOT_DIR
214 prompt
"POSIX thread debugging shared library base directory"
215 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libthread-db
216 default TOOLCHAIN_ROOT if
!NATIVE_TOOLCHAIN
217 default
"/" if NATIVE_TOOLCHAIN
219 config LIBTHREAD_DB_FILE_SPEC
221 prompt
"POSIX thread debugging shared library files (use wildcards)"
222 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libthread-db
223 default
"./lib/libthread_db{-*.so,.so.*}"
229 $(call Package
/libc
/Default
)
230 TITLE
:=POSIX
.1b RealTime extension library
234 define Package
/librt
/config
236 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_librt
238 config LIBRT_ROOT_DIR
240 prompt
"librt shared library base directory"
241 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_librt
242 default TOOLCHAIN_ROOT if
!NATIVE_TOOLCHAIN
243 default
"/" if NATIVE_TOOLCHAIN
245 config LIBRT_FILE_SPEC
247 prompt
"librt shared library files (use wildcards)"
248 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_librt
249 default
"./lib/librt{-*.so,.so.*}"
255 define Package
/libgfortran
256 $(call Package
/gcc
/Default
)
257 TITLE
:=GFortran support library
258 DEPENDS
+=@INSTALL_GFORTRAN
261 define Package
/libgfortran
/config
263 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libgfortran
265 config LIBGFORTRAN_ROOT_DIR
267 prompt
"libgfortran shared library base directory"
268 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libgfortran
269 default TOOLCHAIN_ROOT if
!NATIVE_TOOLCHAIN
270 default
"/" if NATIVE_TOOLCHAIN
272 config LIBGFORTRAN_FILE_SPEC
274 prompt
"libgfortran shared library files (use wildcards)"
275 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libgfortran
276 default
"./usr/lib/libgfortran.so.*"
281 define Package
/libgomp
282 $(call Package
/gcc
/Default
)
283 TITLE
:=OpenMP support library
286 define Package
/libgomp
/config
288 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libgomp
290 config LIBGOMP_ROOT_DIR
292 prompt
"libgomp shared library base directory"
293 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libgomp
294 default TOOLCHAIN_ROOT if
!NATIVE_TOOLCHAIN
295 default
"/" if NATIVE_TOOLCHAIN
297 config LIBGOMP_FILE_SPEC
299 prompt
"libgomp shared library files (use wildcards)"
300 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_libgomp
301 default
"./lib/libgomp.so*"
308 $(call Package
/libc
/Default
)
312 TITLE
:=LDD trace utility
315 define Package
/ldd
/config
317 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_ldd
321 prompt
"ldd trace utility base directory"
322 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_ldd
323 default TOOLCHAIN_ROOT if
!NATIVE_TOOLCHAIN
324 default
"/" if NATIVE_TOOLCHAIN
328 prompt
"ldd trace utility file"
329 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_ldd
330 default
"./usr/bin/ldd"
336 define Package
/ldconfig
337 $(call Package
/libc
/Default
)
341 TITLE
:=Shared library path configuration
344 define Package
/ldconfig
/config
346 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_ldconfig
348 config LDCONFIG_ROOT_DIR
350 prompt
"ldconfig base directory"
351 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_ldconfig
352 default TOOLCHAIN_ROOT if
!NATIVE_TOOLCHAIN
353 default
"/" if NATIVE_TOOLCHAIN
355 config LDCONFIG_FILE_SPEC
357 prompt
"ldconfig file"
358 depends on EXTERNAL_TOOLCHAIN
&& PACKAGE_ldconfig
359 default
"./sbin/ldconfig"
365 mkdir
-p
$(PKG_BUILD_DIR
)
368 LIBGCC_A
=$(lastword
$(wildcard $(TOOLCHAIN_DIR
)/lib
/gcc
/*/*/libgcc_pic.a
))
369 LIBGCC_MAP
=$(lastword
$(wildcard $(TOOLCHAIN_DIR
)/lib
/gcc
/*/*/libgcc.map
))
370 LIBGCC_SO
=$(lastword
$(wildcard $(TOOLCHAIN_DIR
)/lib
/libgcc_s.so.
*))
372 define Build
/Compile
/uClibc
374 $(TOOLCHAIN_DIR
)/lib
/libuClibc-
*.so \
377 ifneq ($(LIBGCC_SO
),)
378 define Build
/Compile
/libgcc
379 $(CP
) $(LIBGCC_SO
) $(PKG_BUILD_DIR
)/
383 define Build
/Compile
/Default
384 $(call Build
/Compile
/libgcc
)
385 $(call Build
/Compile
/$(LIBC
))
387 Build
/Compile
= $(Build
/Compile
/Default
)
389 ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN
),)
391 define Package
/libgcc
/install
392 $(INSTALL_DIR
) $(1)/lib
393 $(CP
) $(TOOLCHAIN_DIR
)/lib
/libgcc_s.so.
* $(1)/lib
/
396 define Package
/libatomic
/install
397 $(INSTALL_DIR
) $(1)/lib
398 $(CP
) $(TOOLCHAIN_DIR
)/lib
/libatomic.so.
* $(1)/lib
/
401 define Package
/libgfortran
/install
402 $(INSTALL_DIR
) $(1)/usr
/lib
403 $(CP
) $(TOOLCHAIN_DIR
)/lib
/libgfortran.so.
* $(1)/usr
/lib
/
406 define Package
/libssp
/install
407 $(INSTALL_DIR
) $(1)/lib
408 $(CP
) $(TOOLCHAIN_DIR
)/lib
/libssp.so.
* $(1)/lib
/
411 define Package
/libstdcpp
/install
412 $(INSTALL_DIR
) $(1)/usr
/lib
413 $(CP
) $(TOOLCHAIN_DIR
)/lib
/libstdc
++.so.
* $(1)/usr
/lib
/
416 define Package
/glibc
/install
417 $(CP
) .
/glibc-files
/* $(1)/
418 rm -f
$(1)/etc
/localtime
419 $(LN
) /tmp
/localtime
$(1)/etc
/localtime
420 $(INSTALL_DIR
) $(1)/lib
422 $(TOOLCHAIN_DIR
)/lib
/ld*.so.
* \
423 $(TOOLCHAIN_DIR
)/lib
/ld-
$(LIBC_SO_VERSION
).so \
425 for file in libanl libc libcidn libcrypt libdl libm libnsl libnss_dns libnss_files libresolv libutil
; do \
426 for file in
$(TOOLCHAIN_DIR
)/lib
/$$$$file.so.
* $(TOOLCHAIN_DIR
)/lib
/$$$$file-$(LIBC_SO_VERSION
).so
; do \
427 if
[ -e
"$$$$file" ]; then \
428 $(CP
) $$$$file $(1)/lib
/; \
434 define Package
/uClibc
/install
435 $(INSTALL_DIR
) $(1)/lib
437 $(TOOLCHAIN_DIR
)/lib
/ld*-uClibc.so.
* \
438 $(TOOLCHAIN_DIR
)/lib
/ld*-uClibc-
$(LIBC_SO_VERSION
).so \
441 $(TOOLCHAIN_DIR
)/lib
/libc.so.
* \
442 $(TOOLCHAIN_DIR
)/lib
/libuClibc-
$(LIBC_SO_VERSION
).so \
445 $(PKG_BUILD_DIR
)/libuClibc-
* \
449 LD_MUSL_NAME
= $(notdir $(firstword $(wildcard $(TOOLCHAIN_DIR
)/lib
/libc.so
*)))
451 define Package
/musl
/install
452 $(INSTALL_DIR
) $(1)/lib
$(1)/usr
/bin
454 $(TOOLCHAIN_DIR
)/lib
/ld-musl-
*.so
* \
457 $(TOOLCHAIN_DIR
)/lib
/libc.so
* \
459 $(LN
) ..
/..
/lib
/$(LD_MUSL_NAME
) $(1)/usr
/bin
/ldd
462 define Package
/libc
/install
463 $(call Package
/$(LIBC
)/install,$1)
466 define Package
/libc
/install_lib
467 $(CP
) $(filter-out %/libdl_pic.a
%/libpthread_pic.a
%/libresolv_pic.a
,$(wildcard $(TOOLCHAIN_DIR
)/lib
/lib
*.a
)) $(1)/lib
/
468 $(if
$(wildcard $(TOOLCHAIN_DIR
)/lib
/libc_so.a
),$(CP
) $(TOOLCHAIN_DIR
)/lib
/libc_so.a
$(1)/lib
/libc_pic.a
)
469 $(if
$(LIBGCC_MAP
), \
470 $(CP
) $(LIBGCC_A
) $(1)/lib
/libgcc_s_pic.a
; \
471 $(CP
) $(LIBGCC_MAP
) $(1)/lib
/libgcc_s_pic.map \
475 define Package
/libpthread
/install
476 $(INSTALL_DIR
) $(1)/lib
477 ifneq ($(CONFIG_USE_MUSL
)$(CONFIG_USE_UCLIBC
),y
)
479 $(TOOLCHAIN_DIR
)/lib
/libpthread.so.
* \
480 $(TOOLCHAIN_DIR
)/lib
/libpthread-
$(LIBC_SO_VERSION
).so \
485 define Package
/libthread-db
/install
486 $(INSTALL_DIR
) $(1)/lib
488 $(TOOLCHAIN_DIR
)/lib
/libthread_db.so.
* $(1)/lib
489 ifeq ($(CONFIG_USE_UCLIBC
),y
)
491 $(TOOLCHAIN_DIR
)/lib
/libthread_db-
$(LIBC_SO_VERSION
).so \
496 define Package
/libpthread
/install_lib
497 $(if
$(wildcard $(TOOLCHAIN_DIR
)/lib
/libpthread_so.a
),$(CP
) $(TOOLCHAIN_DIR
)/lib
/libpthread_so.a
$(1)/lib
/libpthread_pic.a
)
500 define Package
/librt
/install
501 $(INSTALL_DIR
) $(1)/lib
502 ifneq ($(CONFIG_USE_MUSL
)$(CONFIG_USE_UCLIBC
),y
)
504 $(TOOLCHAIN_DIR
)/lib
/librt.so.
* \
505 $(TOOLCHAIN_DIR
)/lib
/librt-
$(LIBC_SO_VERSION
).so \
510 define Package
/ldd
/install
511 $(INSTALL_DIR
) $(1)/usr
/bin
/
512 $(CP
) $(TOOLCHAIN_DIR
)/bin
/ldd
$(1)/usr
/bin
/
515 define Package
/ldconfig
/install
516 $(INSTALL_DIR
) $(1)/sbin
/
517 $(CP
) $(TOOLCHAIN_DIR
)/sbin
/ldconfig
$(1)/sbin
/
522 define Package
/libgcc
/install
523 for file in
$(call qstrip
,$(CONFIG_LIBGCC_FILE_SPEC
)); do \
524 $(INSTALL_DIR
) $(1)/lib
; \
525 $(CP
) $(call qstrip
,$(CONFIG_LIBGCC_ROOT_DIR
))/$$$$file $(1)/lib
/ ; \
530 define Package
/libgfortran
/install
531 for file in
$(call qstrip
,$(CONFIG_LIBGFORTRAN_FILE_SPEC
)); do \
532 $(INSTALL_DIR
) $(1)/lib
; \
533 $(CP
) $(call qstrip
,$(CONFIG_LIBGFORTRAN_ROOT_DIR
))/$$$$file $(1)/lib
/ ; \
537 define Package
/libssp
/install
538 for file in
$(call qstrip
,$(CONFIG_LIBSSP_FILE_SPEC
)); do \
539 $(INSTALL_DIR
) $(1)/lib
; \
540 $(CP
) $(call qstrip
,$(CONFIG_LIBSSP_ROOT_DIR
))/$$$$file $(1)/lib
/ ; \
545 define Package
/libstdcpp
/install
546 for file in
$(call qstrip
,$(CONFIG_LIBSTDCPP_FILE_SPEC
)); do \
547 $(INSTALL_DIR
) $(1)/lib
; \
548 $(CP
) $(call qstrip
,$(CONFIG_LIBSTDCPP_ROOT_DIR
))/$$$$file $(1)/lib
/ ; \
553 define Package
/libc
/install
554 for file in
$(call qstrip
,$(CONFIG_LIBC_FILE_SPEC
)); do \
555 $(INSTALL_DIR
) $(1)/lib
; \
556 $(CP
) $(call qstrip
,$(CONFIG_LIBC_ROOT_DIR
))/$$$$file $(1)/lib
/ ; \
561 define Package
/libpthread
/install
562 for file in
$(call qstrip
,$(CONFIG_LIBPTHREAD_FILE_SPEC
)); do \
563 $(INSTALL_DIR
) $(1)/lib
; \
564 $(CP
) $(call qstrip
,$(CONFIG_LIBPTHREAD_ROOT_DIR
))/$$$$file $(1)/lib
/ ; \
569 define Package
/libthread-db
/install
570 for file in
$(call qstrip
,$(CONFIG_LIBTHREAD_DB_FILE_SPEC
)); do \
571 $(INSTALL_DIR
) $(1)/lib
; \
572 $(CP
) $(call qstrip
,$(CONFIG_LIBTHREAD_DB_ROOT_DIR
))/$$$$file $(1)/lib
/ ; \
577 define Package
/librt
/install
578 for file in
$(call qstrip
,$(CONFIG_LIBRT_FILE_SPEC
)); do \
579 $(INSTALL_DIR
) $(1)/lib
; \
580 $(CP
) $(call qstrip
,$(CONFIG_LIBRT_ROOT_DIR
))/$$$$file $(1)/lib
/ ; \
585 define Package
/libatomic
/install
586 for file in
$(call qstrip
,$(CONFIG_LIBATOMIC_FILE_SPEC
)); do \
587 $(INSTALL_DIR
) $(1)/lib
; \
588 $(CP
) $(call qstrip
,$(CONFIG_LIBATOMIC_ROOT_DIR
))/$$$$file $(1)/lib
/ ; \
593 define Package
/libgomp
/install
594 for file in
$(call qstrip
,$(CONFIG_LIBGOMP_FILE_SPEC
)); do \
595 $(INSTALL_DIR
) $(1)/lib
; \
596 $(CP
) $(call qstrip
,$(CONFIG_LIBGOMP_ROOT_DIR
))/$$$$file $(1)/lib
/ ; \
601 define Package
/ldd
/install
602 for file in
$(call qstrip
,$(CONFIG_LDD_FILE_SPEC
)); do \
603 dir=`dirname $$$$file` ; \
604 $(INSTALL_DIR
) $(1)/$$$$dir ; \
605 $(CP
) $(call qstrip
,$(CONFIG_LDD_ROOT_DIR
))/$$$$file $(1)/$$$$dir/ ; \
610 define Package
/ldconfig
/install
611 for file in
$(call qstrip
,$(CONFIG_LDCONFIG_FILE_SPEC
)); do \
612 dir=`dirname $$$$file` ; \
613 $(INSTALL_DIR
) $(1)/$$$$dir ; \
614 $(CP
) $(call qstrip
,$(CONFIG_LDCONFIG_ROOT_DIR
))/$$$$file $(1)/$$$$dir/ ; \
621 $(eval
$(call BuildPackage
,libc
))
622 $(eval
$(call BuildPackage
,libgcc
))
623 $(eval
$(call BuildPackage
,libatomic
))
624 $(eval
$(call BuildPackage
,libssp
))
625 $(eval
$(call BuildPackage
,libstdcpp
))
626 $(eval
$(call BuildPackage
,libpthread
))
627 $(eval
$(call BuildPackage
,libthread-db
))
628 $(eval
$(call BuildPackage
,librt
))
629 $(eval
$(call BuildPackage
,libgfortran
))
630 $(eval
$(call BuildPackage
,libgomp
))
631 $(eval
$(call BuildPackage
,ldd
))
632 $(eval
$(call BuildPackage
,ldconfig
))