lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame] | 1 | # Makefile for uClibc |
| 2 | # |
| 3 | # Copyright (C) 2000-2008 Erik Andersen <andersen@uclibc.org> |
| 4 | # |
| 5 | # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. |
| 6 | # |
| 7 | |
| 8 | #-------------------------------------------------------------- |
| 9 | # You shouldn't need to mess with anything beyond this point... |
| 10 | #-------------------------------------------------------------- |
| 11 | clean_targets := clean realclean distclean \ |
| 12 | objclean-y headers_clean-y CLEAN_utils |
| 13 | noconfig_targets := menuconfig config oldconfig silentoldconfig randconfig \ |
| 14 | defconfig allyesconfig allnoconfig \ |
| 15 | release dist tags help |
| 16 | |
| 17 | include $(top_srcdir)Rules.mak |
| 18 | sub_headers := headers |
| 19 | ifndef KCONFIG_CONFIG |
| 20 | KCONFIG_CONFIG := $(top_builddir).config |
| 21 | endif |
| 22 | export KCONFIG_CONFIG |
| 23 | |
| 24 | ifeq ($(HAVE_DOT_CONFIG),y) |
| 25 | |
| 26 | all: pregen libs |
| 27 | libs: pregen |
| 28 | |
| 29 | # In this section, we need .config |
| 30 | -include $(top_builddir).config.cmd |
| 31 | |
| 32 | else # ifeq ($(HAVE_DOT_CONFIG),y) |
| 33 | |
| 34 | all: menuconfig |
| 35 | |
| 36 | headers: |
| 37 | @echo "Need to make a config file first, run: make menuconfig" |
| 38 | @false |
| 39 | |
| 40 | endif # ifeq ($(HAVE_DOT_CONFIG),y) |
| 41 | |
| 42 | include $(top_srcdir)ldso/Makefile.in |
| 43 | include $(top_srcdir)libcrypt/Makefile.in |
| 44 | include $(top_srcdir)libintl/Makefile.in |
| 45 | include $(top_srcdir)libm/Makefile.in |
| 46 | include $(top_srcdir)libnsl/Makefile.in |
| 47 | include $(top_srcdir)libresolv/Makefile.in |
| 48 | include $(top_srcdir)libutil/Makefile.in |
| 49 | include $(top_srcdir)libpthread/Makefile.in |
| 50 | include $(top_srcdir)librt/Makefile.in |
| 51 | include $(top_srcdir)libubacktrace/Makefile.in |
| 52 | include $(top_srcdir)extra/locale/Makefile.in |
| 53 | |
| 54 | # last included to catch all the objects added by others (locales/threads) |
| 55 | include $(top_srcdir)libc/Makefile.in |
| 56 | |
| 57 | conf := $(top_builddir)extra/config/conf |
| 58 | mconf := $(top_builddir)extra/config/mconf |
| 59 | |
| 60 | ifeq ($(HAVE_DOT_CONFIG),y) |
| 61 | # If the .config changes then we have to make sure that our includes are |
| 62 | # updated properly. This would normally work by saying that the headers |
| 63 | # have uClibc_config.h as prerequisite but since we _symlink_ the headers |
| 64 | # and do not (?) want to rely on 'make -L' we better update them right here, |
| 65 | # on spot to save us from alot of hazzle. |
| 66 | $(top_builddir)include/bits/uClibc_config.h: $(conf) $(KCONFIG_CONFIG) $(top_srcdir)extra/scripts/conf-header.sh | $(top_builddir)include/bits $(top_builddir)include/config |
| 67 | @$(disp_gen) |
| 68 | $(Q)@$< -s $(top_srcdir)extra/Configs/Config.in |
| 69 | $(Q)$(top_srcdir)extra/scripts/conf-header.sh $(KCONFIG_CONFIG) > $@ |
| 70 | $(Q)$(MAKE) headers-y |
| 71 | |
| 72 | # The above doesn't work for threads, though. Just using check-symlinks for now. |
| 73 | # XXX: FIXME: this is ugly |
| 74 | MAKEFLAGS += -L |
| 75 | |
| 76 | $(top_builddir)include/config/linuxthreads/old.h $(top_builddir)include/config/linuxthreads/new.h: |
| 77 | @true |
| 78 | |
| 79 | # For the moment, we have to keep re-running this target |
| 80 | # because the fix includes scripts rely on pre-processers |
| 81 | # in order to generate the headers correctly :(. That |
| 82 | # means we can't use the $(HOSTCC) in order to get the |
| 83 | # correct output. |
| 84 | ifeq ($(ARCH_USE_MMU),y) |
| 85 | export header_extra_args = |
| 86 | else |
| 87 | export header_extra_args = -n |
| 88 | endif |
| 89 | HEADERS_BITS_COMMON := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/common/bits/*.h)) |
| 90 | HEADERS_BITS_ARCH := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/bits/*.h)) |
| 91 | HEADERS_BITS_SUBARCH := |
| 92 | ifneq ($(TARGET_SUBARCH),) |
| 93 | HEADERS_BITS_SUBARCH := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/bits/$(TARGET_SUBARCH)/*.h)) |
| 94 | endif |
| 95 | HEADERS_BITS_COMMON := $(filter-out $(HEADERS_BITS_ARCH) $(HEADERS_BITS_SUBARCH) $(HEADERS_BITS_PTHREAD),$(HEADERS_BITS_COMMON)) |
| 96 | |
| 97 | HEADERS_SYS_COMMON := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/common/sys/*.h)) |
| 98 | HEADERS_SYS_ARCH := $(notdir $(wildcard $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/sys/*.h)) |
| 99 | HEADERS_SYS_COMMON := $(filter-out $(HEADERS_SYS_ARCH),$(HEADERS_SYS_COMMON)) |
| 100 | |
| 101 | ALL_HEADERS_COMMON := $(top_builddir)include/fpu_control.h \ |
| 102 | $(top_builddir)include/dl-osinfo.h \ |
| 103 | $(top_builddir)include/hp-timing.h |
| 104 | ALL_HEADERS_BITS_COMMON := $(addprefix $(top_builddir)include/bits/,$(HEADERS_BITS_COMMON)) |
| 105 | ALL_HEADERS_BITS_ARCH := $(addprefix $(top_builddir)include/bits/,$(HEADERS_BITS_ARCH)) |
| 106 | ifneq ($(TARGET_SUBARCH),) |
| 107 | ALL_HEADERS_BITS_SUBARCH := $(addprefix $(top_builddir)include/bits/,$(HEADERS_BITS_SUBARCH)) |
| 108 | else |
| 109 | ALL_HEADERS_BITS_SUBARCH := |
| 110 | endif |
| 111 | ALL_HEADERS_SYS_COMMON := $(addprefix $(top_builddir)include/sys/,$(HEADERS_SYS_COMMON)) |
| 112 | ALL_HEADERS_SYS_ARCH := $(addprefix $(top_builddir)include/sys/,$(HEADERS_SYS_ARCH)) |
| 113 | |
| 114 | target-headers-sysdep := \ |
| 115 | $(ALL_HEADERS_COMMON) \ |
| 116 | $(ALL_HEADERS_BITS_COMMON) \ |
| 117 | $(ALL_HEADERS_BITS_ARCH) \ |
| 118 | $(ALL_HEADERS_BITS_SUBARCH) \ |
| 119 | $(ALL_HEADERS_SYS_COMMON) \ |
| 120 | $(ALL_HEADERS_SYS_ARCH) \ |
| 121 | $(ALL_HEADERS_BITS_PTHREAD) |
| 122 | |
| 123 | $(top_builddir)include/fpu_control.h: |
| 124 | @$(disp_ln) |
| 125 | $(Q)[ -r $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/$(@F) ] && \ |
| 126 | $(LN) -fs $(call rel_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/$(@F) $@ || \ |
| 127 | $(LN) -fs $(call rel_srcdir)libc/sysdeps/linux/common/$(@F) $@ |
| 128 | |
| 129 | $(top_builddir)include/dl-osinfo.h $(top_builddir)include/hp-timing.h: |
| 130 | $(do_ln) $(call rel_srcdir)libc/sysdeps/linux/common/$(@F) $@ |
| 131 | |
| 132 | $(ALL_HEADERS_BITS_COMMON): |
| 133 | $(do_ln) $(call rel_srcdir)libc/sysdeps/linux/common/bits/$(@F) $@ |
| 134 | |
| 135 | $(ALL_HEADERS_BITS_ARCH): |
| 136 | $(do_ln) $(call rel_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/bits/$(@F) $@ |
| 137 | |
| 138 | ifneq ($(TARGET_SUBARCH),) |
| 139 | $(ALL_HEADERS_BITS_SUBARCH): |
| 140 | $(do_ln) $(call rel_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/bits/$(TARGET_SUBARCH)/$(@F) $@ |
| 141 | endif |
| 142 | |
| 143 | ifneq ($(strip $(ALL_HEADERS_SYS_COMMON)),) |
| 144 | $(ALL_HEADERS_SYS_COMMON): |
| 145 | $(do_ln) $(call rel_srcdir)libc/sysdeps/linux/common/sys/$(@F) $@ |
| 146 | endif |
| 147 | |
| 148 | ifneq ($(strip $(ALL_HEADERS_SYS_ARCH)),) |
| 149 | $(ALL_HEADERS_SYS_ARCH): |
| 150 | $(do_ln) $(call rel_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/sys/$(@F) $@ |
| 151 | endif |
| 152 | |
| 153 | $(target-headers-sysdep) $(pregen-headers-y): | $(top_builddir)include/bits $(top_builddir)include/sys |
| 154 | |
| 155 | HEADERCLEAN_common: |
| 156 | $(do_rm) $(ALL_HEADERS_COMMON) |
| 157 | headers_clean-y += HEADERCLEAN_common |
| 158 | |
| 159 | # The headers. Arch specific headers are specified via ARCH_HEADERS in |
| 160 | # libc/sysdeps/linux/$(TARGET_ARCH)/Makefile.arch which appends those via |
| 161 | # libc/sysdeps/linux/Makefile.commonarch to headers-y |
| 162 | headers-y += $(target-headers-sysdep) |
| 163 | |
| 164 | headers: $(top_builddir)include/bits/uClibc_config.h | subdirs |
| 165 | subdirs: $(addprefix $(top_builddir),$(subdirs)) |
| 166 | pregen-headers: $(top_builddir)include/bits/sysnum.h $(pregen-headers-y) |
| 167 | pregen: headers pregen-headers |
| 168 | $(Q)$(if $(UCLIBC_HAS_LOCALE),$(MAKE) -C extra/locale locale_headers) |
| 169 | |
| 170 | $(top_builddir)include/bits/sysnum.h: $(top_srcdir)extra/scripts/gen_bits_syscall_h.sh | $(top_builddir)include/bits |
| 171 | @$(disp_gen) |
| 172 | $(Q)set -e; \ |
| 173 | tmp=`mktemp $(top_builddir)include/bits/sysnum.h.XXXXXX 2>/dev/null || true`; \ |
| 174 | [ -z "$$tmp" ] && tmp='$(top_builddir)include/bits/sysnum.h.new'; \ |
| 175 | KERNEL_HEADERS="${KERNEL_HEADERS}" top_builddir="$(top_builddir)" CC="$(CC) $(CPU_CFLAGS)" $(SHELL) $< > $$tmp; \ |
| 176 | if cmp $(top_builddir)include/bits/sysnum.h $$tmp >/dev/null 2>&1; then \ |
| 177 | $(RM) $$tmp; \ |
| 178 | else \ |
| 179 | mv -f $$tmp $(top_builddir)include/bits/sysnum.h; \ |
| 180 | fi |
| 181 | @# Ugly linux specific hack.. |
| 182 | $(Q)if grep -q __NR_ $@; then true; else \ |
| 183 | rm -f $@; \ |
| 184 | echo "ERROR: Could not generate syscalls."; \ |
| 185 | echo "Make sure that you have proper kernel headers."; \ |
| 186 | echo "Your .config in KERNEL_HEADERS=\"\" was set to:"; \ |
| 187 | echo "${KERNEL_HEADERS}"; \ |
| 188 | exit 1; \ |
| 189 | fi |
| 190 | |
| 191 | .PHONY: $(LOCAL_INSTALL_PATH) |
| 192 | $(LOCAL_INSTALL_PATH): |
| 193 | $(Q)$(MAKE) PREFIX=$(shell pwd)/$(LOCAL_INSTALL_PATH) RUNTIME_PREFIX=/ \ |
| 194 | DEVEL_PREFIX=/usr/ \ |
| 195 | HOSTCC="$(HOSTCC)" \ |
| 196 | install |
| 197 | |
| 198 | install: install_runtime install_dev |
| 199 | |
| 200 | |
| 201 | RUNTIME_PREFIX_LIB_FROM_DEVEL_PREFIX_LIB=$(shell $(top_srcdir)extra/scripts/relative_path.sh $(DEVEL_PREFIX)$(MULTILIB_DIR) $(RUNTIME_PREFIX)$(MULTILIB_DIR)) |
| 202 | |
| 203 | startfiles: $(crt-y) |
| 204 | |
| 205 | $(top_builddir)extra/scripts/unifdef: |$(top_builddir)extra/scripts |
| 206 | $(top_builddir)extra/scripts/unifdef: $(top_srcdir)extra/scripts/unifdef.c |
| 207 | $(hcompile.u) |
| 208 | |
| 209 | # Installs header files. |
| 210 | # a "y" here means the feature is enabled and so we should *not* rm it. |
| 211 | # if the option expands to nothing though, we can punt the headers. |
| 212 | HEADERS_RM- := \ |
| 213 | dl-osinfo.h \ |
| 214 | hp-timing.h \ |
| 215 | _lfs_64.h \ |
| 216 | bits/uClibc_arch_features.h \ |
| 217 | bits/kernel_sigaction.h \ |
| 218 | bits/kernel_stat.h \ |
| 219 | bits/kernel_types.h \ |
| 220 | bits/syscalls.h \ |
| 221 | bits/syscalls-common.h \ |
| 222 | bits/uClibc_fpmax.h \ |
| 223 | bits/uClibc_uintmaxtostr.h \ |
| 224 | bits/uClibc_uwchar.h \ |
| 225 | bits/uClibc_va_copy.h \ |
| 226 | bits/sigcontextinfo.h \ |
| 227 | bits/stackinfo.h \ |
| 228 | tls.h \ |
| 229 | rpc/des_crypt.h \ |
| 230 | rpc/key_prot.h \ |
| 231 | rpc/rpc_des.h |
| 232 | ifeq ($(UCLIBC_STRICT_HEADERS),y) |
| 233 | HEADERS_RM- += sgtty.h |
| 234 | endif |
| 235 | HEADERS_RM-$(HAVE_SHARED) += dlfcn.h bits/dlfcn.h |
| 236 | HEADERS_RM-$(PTHREADS_DEBUG_SUPPORT) += thread_db.h |
| 237 | HEADERS_RM-$(UCLIBC_HAS_BSD_ERR) += err.h |
| 238 | HEADERS_RM-$(UCLIBC_HAS_CRYPT) += crypt.h |
| 239 | HEADERS_RM-$(UCLIBC_HAS_EPOLL) += sys/epoll.h |
| 240 | HEADERS_RM-$(UCLIBC_HAS_FENV) += fenv.h bits/fenv.h bits/fenvinline.h |
| 241 | HEADERS_RM-$(UCLIBC_HAS_FLOATS) += complex.h fpu_control.h ieee754.h \ |
| 242 | math.h \ |
| 243 | tgmath.h \ |
| 244 | bits/math*.h |
| 245 | HEADERS_RM-$(findstring y,$(UCLIBC_HAS_FTW)$(UCLIBC_HAS_NFTW)) += ftw.h |
| 246 | HEADERS_RM-$(UCLIBC_HAS_FTS) += fts.h |
| 247 | HEADERS_RM-$(UCLIBC_HAS_GETTEXT_AWARENESS) += libintl.h |
| 248 | HEADERS_RM-$(UCLIBC_HAS_GLIBC_CUSTOM_PRINTF) += printf.h |
| 249 | HEADERS_RM-$(UCLIBC_HAS_GLOB) += glob.h |
| 250 | HEADERS_RM-$(UCLIBC_HAS_GNU_ERROR) += error.h |
| 251 | HEADERS_RM-$(UCLIBC_HAS_GNU_GETOPT)$(UCLIBC_HAS_GETOPT_LONG) += getopt.h |
| 252 | HEADERS_RM-$(UCLIBC_HAS_IPV6) += netinet/ip6.h netinet/icmp6.h |
| 253 | HEADERS_RM-$(UCLIBC_HAS_BACKTRACE) += execinfo.h |
| 254 | HEADERS_RM-$(UCLIBC_HAS_LOCALE) += iconv.h bits/uClibc_ctype.h |
| 255 | HEADERS_RM-$(UCLIBC_HAS_PTY) += pty.h |
| 256 | HEADERS_RM-$(UCLIBC_HAS_REALTIME) += mqueue.h bits/mqueue.h sched.h \ |
| 257 | bits/sched.h \ |
| 258 | semaphore.h |
| 259 | HEADERS_RM-$(UCLIBC_HAS_REGEX) += regex.h regexp.h |
| 260 | HEADERS_RM-$(UCLIBC_HAS_RPC) += rpc |
| 261 | HEADERS_RM-$(UCLIBC_HAS_SHADOW) += shadow.h |
| 262 | HEADERS_RM-$(UCLIBC_HAS_SOCKET) += sys/socket.h bits/socket.h sys/socketvar.h |
| 263 | HEADERS_RM-$(UCLIBC_HAS_SYSLOG) += syslog.h sys/syslog.h bits/syslog*.h |
| 264 | HEADERS_RM-$(UCLIBC_HAS_THREADS) += *thread*.h semaphore.h \ |
| 265 | bits/*thread*.h \ |
| 266 | bits/initspin.h |
| 267 | HEADERS_RM-$(UCLIBC_HAS_THREADS_NATIVE) += atomic.h bits/atomic.h |
| 268 | HEADERS_RM-$(UCLIBC_HAS_UTMPX) += bits/utmpx.h utmpx.h |
| 269 | HEADERS_RM-$(UCLIBC_HAS_WCHAR) += wchar.h wctype.h |
| 270 | HEADERS_RM-$(UCLIBC_HAS_WORDEXP) += wordexp.h |
| 271 | HEADERS_RM-$(UCLIBC_HAS_XATTR) += sys/xattr.h |
| 272 | HEADERS_RM-$(UCLIBC_HAS_XLOCALE) += xlocale.h |
| 273 | HEADERS_RM-$(UCLIBC_LINUX_SPECIFIC) += sys/eventfd.h sys/fsuid.h \ |
| 274 | bits/inotify.h \ |
| 275 | sys/inotify.h \ |
| 276 | sys/kdaemon.h \ |
| 277 | sys/perm.h \ |
| 278 | sys/personality.h \ |
| 279 | sys/prctl.h \ |
| 280 | sys/reboot.h \ |
| 281 | sys/sendfile.h \ |
| 282 | bits/signalfd.h \ |
| 283 | sys/signalfd.h \ |
| 284 | bits/statfs.h \ |
| 285 | sys/statfs.h \ |
| 286 | sys/swap.h \ |
| 287 | sys/sysctl.h \ |
| 288 | sys/sysinfo.h \ |
| 289 | bits/timerfd.h \ |
| 290 | sys/timerfd.h \ |
| 291 | sys/vfs.h |
| 292 | HEADERS_RM-$(UCLIBC_SUPPORT_AI_ADDRCONFIG) += ifaddrs.h |
| 293 | HEADERS_RM-$(UCLIBC_SV4_DEPRECATED) += ustat.h sys/ustat.h bits/ustat.h |
| 294 | HEADERS_RM-$(UCLIBC_SUSV3_LEGACY) += sys/timeb.h regexp.h |
| 295 | HEADERS_RM-$(UCLIBC_SUSV4_LEGACY) += utime.h ucontext.h |
| 296 | |
| 297 | ifneq ($(findstring install,$(MAKECMDGOALS)),) |
| 298 | $(addprefix $(PREFIX)$(DEVEL_PREFIX),include $(MULTILIB_DIR)): |
| 299 | $(do_mkdir) |
| 300 | # avoid warning about duplicate targets in rule or overrides |
| 301 | ifneq ($(abspath $(RUNTIME_PREFIX)$(MULTILIB_DIR)),$(abspath $(DEVEL_PREFIX)$(MULTILIB_DIR))) |
| 302 | $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR): |
| 303 | $(do_mkdir) |
| 304 | endif |
| 305 | endif |
| 306 | install_headers: headers $(top_builddir)extra/scripts/unifdef | $(PREFIX)$(DEVEL_PREFIX)include |
| 307 | @$(call disp_install,"include -> $(PREFIX)$(DEVEL_PREFIX)include") |
| 308 | $(Q)top_builddir=$(top_builddir) \ |
| 309 | $(top_srcdir)extra/scripts/install_headers.sh \ |
| 310 | include $(PREFIX)$(DEVEL_PREFIX)include |
| 311 | ifneq ($(O),) # only run this step in O is set i.e. make O=/my/builddir/ .. |
| 312 | @$(call disp_install,"$(top_builddir)/include -> $(PREFIX)$(DEVEL_PREFIX)include") |
| 313 | $(Q)top_builddir=$(top_builddir) \ |
| 314 | $(top_srcdir)extra/scripts/install_headers.sh \ |
| 315 | $(top_builddir)/include $(PREFIX)$(DEVEL_PREFIX)include |
| 316 | endif |
| 317 | $(Q)cd $(PREFIX)$(DEVEL_PREFIX)include && $(RM) -r $(HEADERS_RM-) |
| 318 | ifeq ($(UCLIBC_HAS_WCHAR),) |
| 319 | $(Q)cd $(PREFIX)$(DEVEL_PREFIX)include && mv -f wchar-stub.h wchar.h |
| 320 | else |
| 321 | $(Q)cd $(PREFIX)$(DEVEL_PREFIX)include && $(RM) -f wchar-stub.h |
| 322 | endif |
| 323 | |
| 324 | # Installs startfiles |
| 325 | install_startfiles: startfiles | $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR) |
| 326 | -$(INSTALL) -m 644 $(startfiles) $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/ |
| 327 | |
| 328 | # Installs development library links. |
| 329 | install_dev: install_headers install_runtime install_startfiles | $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR) |
| 330 | -$(INSTALL) -m 644 $(top_builddir)lib/*.a $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/ |
| 331 | ifeq ($(HAVE_SHARED),y) |
| 332 | for i in `cd $(top_builddir) && find lib/ -type l -name 'lib[a-zA-Z]*.so' | \ |
| 333 | $(SED) -e 's/lib\///'` ; do \ |
| 334 | $(LN) -sf $(RUNTIME_PREFIX_LIB_FROM_DEVEL_PREFIX_LIB)$$i.$(ABI_VERSION) \ |
| 335 | $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/$$i; \ |
| 336 | done |
| 337 | ifeq ($(HARDWIRED_ABSPATH),y) |
| 338 | if [ -f $(top_builddir)lib/libc.so -a -f $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(SHARED_LIBNAME) ] ; then \ |
| 339 | $(RM) $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libc.so; \ |
| 340 | $(SED) -e 's:$(NONSHARED_LIBNAME):$(DEVEL_PREFIX)$(MULTILIB_DIR)/$(NONSHARED_LIBNAME):' \ |
| 341 | -e 's:$(SHARED_LIBNAME):$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(SHARED_LIBNAME):' \ |
| 342 | -e 's:$(UCLIBC_LDSO):$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(UCLIBC_LDSO):' \ |
| 343 | $(top_builddir)lib/libc.so > $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libc.so; \ |
| 344 | $(SED) -i -e 's://:/:g' $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libc.so; \ |
| 345 | fi |
| 346 | else |
| 347 | -$(INSTALL) -m 755 $(top_builddir)lib/libc.so $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/ |
| 348 | endif |
| 349 | ifeq ($(UCLIBC_HAS_BACKTRACE),y) |
| 350 | # Add the AS_NEEDED entry for libubacktrace.so |
| 351 | if [ -f $(top_builddir)lib/libc.so -a -f $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(SHARED_LIBNAME) ] ; then \ |
| 352 | echo "GROUP ( $(UBACKTRACE_ASNEEDED) )" >> $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libc.so; \ |
| 353 | fi |
| 354 | endif |
| 355 | ifeq ($(UCLIBC_HAS_THREADS),y) |
| 356 | ifneq ($(LINUXTHREADS_OLD),y) |
| 357 | ifeq ($(HARDWIRED_ABSPATH),y) |
| 358 | if [ -f $(top_builddir)lib/libpthread.so -a -f $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR)/libpthread.so.$(ABI_VERSION) ] ; then \ |
| 359 | $(RM) $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libpthread.so; \ |
| 360 | cp $(top_srcdir)extra/scripts/format.lds $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libpthread.so; \ |
| 361 | echo "GROUP ( $(RUNTIME_PREFIX)$(MULTILIB_DIR)/libpthread.so.$(ABI_VERSION) $(DEVEL_PREFIX)$(MULTILIB_DIR)/libpthread_nonshared.a )" \ |
| 362 | >> $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libpthread.so; \ |
| 363 | $(SED) -i -e 's://:/:g' $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libpthread.so; \ |
| 364 | fi |
| 365 | else |
| 366 | -$(INSTALL) -m 755 $(top_builddir)lib/libpthread.so $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/ |
| 367 | endif |
| 368 | endif |
| 369 | endif |
| 370 | ifeq ($(PTHREADS_DEBUG_SUPPORT),y) |
| 371 | $(LN) -sf $(RUNTIME_PREFIX_LIB_FROM_DEVEL_PREFIX_LIB)libthread_db.so.1 \ |
| 372 | $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libthread_db.so |
| 373 | endif |
| 374 | ifeq ($(DOPIC),y) |
| 375 | # # If we build shared libraries then the static libs are PIC... |
| 376 | # # Make _pic.a symlinks to make mklibs.py and similar tools happy. |
| 377 | if [ -d $(top_builddir)lib ] ; then \ |
| 378 | for i in `cd $(top_builddir) && find lib/ -type f -name 'lib*.a' | $(SED) -e 's/lib\///'` ; do \ |
| 379 | $(LN) -sf $$i $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/`echo $$i \ |
| 380 | | $(SED) -e 's/\.a$$/_pic.a/'`; \ |
| 381 | done ; \ |
| 382 | fi |
| 383 | endif |
| 384 | endif |
| 385 | ifeq ($(UCLIBC_FORMAT_SHARED_FLAT),y) |
| 386 | for file in $(top_builddir)lib/lib*.gdb; do \ |
| 387 | if test -f $$file; then \ |
| 388 | $(INSTALL) -m 755 $$file $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR); \ |
| 389 | $(INSTALL) -m 755 `echo $$file | $(SED) 's/\.gdb$$//'` \ |
| 390 | $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR); \ |
| 391 | fi; \ |
| 392 | done |
| 393 | endif |
| 394 | |
| 395 | # Installs run-time libraries |
| 396 | install_runtime: all | $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR) |
| 397 | ifeq ($(HAVE_SHARED),y) |
| 398 | $(INSTALL) -m 755 $(top_builddir)lib/lib*-$(VERSION).so \ |
| 399 | $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR) |
| 400 | (cd $(top_builddir)lib && $(TAR) --exclude=$(UCLIBC_LDSO_NAME).so.lds -cf - *.so.*) \ |
| 401 | | $(TAR) -xf - -C $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR) |
| 402 | @if [ -x $(top_builddir)lib/$(UCLIBC_LDSO_NAME)-$(VERSION).so ] ; then \ |
| 403 | set -e; \ |
| 404 | $(SHELL_SET_X); \ |
| 405 | $(INSTALL) -m 755 $(top_builddir)lib/$(UCLIBC_LDSO_NAME)-$(VERSION).so \ |
| 406 | $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR); \ |
| 407 | fi |
| 408 | endif |
| 409 | |
| 410 | utils: | pregen |
| 411 | $(Q)$(MAKE) CROSS_COMPILE="$(CROSS_COMPILE)" CC="$(CC)" -C utils $@ |
| 412 | |
| 413 | # Installs helper applications, such as 'ldd' and 'ldconfig' |
| 414 | install_utils: utils |
| 415 | $(Q)$(MAKE) CROSS_COMPILE="$(CROSS_COMPILE)" CC="$(CC)" -C utils utils_install |
| 416 | |
| 417 | endif # ifeq ($(HAVE_DOT_CONFIG),y) |
| 418 | |
| 419 | hostutils: | pregen |
| 420 | $(Q)$(MAKE) CROSS_COMPILE="$(CROSS_COMPILE)" CC="$(CC)" HOSTCC="$(HOSTCC)" DOTHOST=.host -C utils $@ |
| 421 | |
| 422 | install_hostutils: hostutils |
| 423 | $(Q)$(MAKE) CROSS_COMPILE="$(CROSS_COMPILE)" CC="$(CC)" HOSTCC="$(HOSTCC)" DOTHOST=.host -C utils utils_install |
| 424 | |
| 425 | $(addprefix $(top_builddir),include include/bits include/sys include/config lib extra/config/lxdialog extra/locale extra/scripts $(subdirs)): |
| 426 | $(do_mkdir) |
| 427 | |
| 428 | # configuration |
| 429 | # --------------------------------------------------------------------------- |
| 430 | $(conf) $(mconf): | $(top_builddir)include/config $(top_builddir)extra/config/lxdialog |
| 431 | $(Q)$(MAKE) -C extra/config $(@F) |
| 432 | |
| 433 | arch-defconfigs := $(notdir $(wildcard $(top_srcdir)extra/Configs/defconfigs/$(ARCH)/*_defconfig)) |
| 434 | |
| 435 | menuconfig: $(mconf) |
| 436 | $(Q)$< extra/Configs/Config.in |
| 437 | |
| 438 | config: $(conf) |
| 439 | $(Q)$< extra/Configs/Config.in |
| 440 | |
| 441 | oldconfig: $(conf) |
| 442 | $(Q)$< -o extra/Configs/Config.in |
| 443 | |
| 444 | silentoldconfig: $(conf) |
| 445 | $(Q)$< -s extra/Configs/Config.in |
| 446 | |
| 447 | randconfig: $(conf) |
| 448 | $(Q)$< -r extra/Configs/Config.in |
| 449 | |
| 450 | allyesconfig: $(conf) |
| 451 | $(Q)$< -y extra/Configs/Config.in |
| 452 | $(SED) -i -e "s/^DODEBUG=.*/# DODEBUG is not set/" \ |
| 453 | -e "s/^DOASSERTS=.*/# DOASSERTS is not set/" \ |
| 454 | -e "s/^SUPPORT_LD_DEBUG_EARLY=.*/# SUPPORT_LD_DEBUG_EARLY is not set/" \ |
| 455 | -e "s/^SUPPORT_LD_DEBUG=.*/# SUPPORT_LD_DEBUG is not set/" \ |
| 456 | -e "s/^UCLIBC_MJN3_ONLY=.*/# UCLIBC_MJN3_ONLY is not set/" \ |
| 457 | $(KCONFIG_CONFIG) |
| 458 | $(Q)$< -o extra/Configs/Config.in |
| 459 | |
| 460 | allnoconfig: $(conf) |
| 461 | $(Q)$< -n extra/Configs/Config.in |
| 462 | |
| 463 | defconfig: $(conf) |
| 464 | $(Q)$< -D extra/Configs/defconfigs/$(ARCH)/$@ extra/Configs/Config.in |
| 465 | |
| 466 | %_defconfig: $(conf) |
| 467 | $(Q)$< -D extra/Configs/defconfigs/$(ARCH)/$@ extra/Configs/Config.in |
| 468 | |
| 469 | menuconfig-clean-y: |
| 470 | $(Q)$(MAKE) -C extra/config CLEAN_extra/config |
| 471 | |
| 472 | # The find here should continue to work as long as we are only symlinking |
| 473 | # headers in to include/. I don't see this changing to anything else, so |
| 474 | # it should be fine. |
| 475 | include_clean: |
| 476 | $(SECHO) " CLEAN include" |
| 477 | $(Q)$(RM) -r $(top_builddir)include/bits |
| 478 | $(Q)find $(top_builddir)include/ -type l -exec rm -f {} + |
| 479 | |
| 480 | clean: include_clean |
| 481 | $(Q)$(RM) -r $(top_builddir)lib |
| 482 | @$(MAKE) -C utils CLEAN_utils |
| 483 | +$(MAKE) -s -C test clean |
| 484 | $(Q)$(RM) $(top_builddir)extra/scripts/unifdef |
| 485 | $(Q)$(RM) -r $(LOCAL_INSTALL_PATH) |
| 486 | |
| 487 | # |
| 488 | # Target for uClinux distro |
| 489 | # |
| 490 | UCLIBC_VERSION := $(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL)$(EXTRAVERSION) |
| 491 | .PHONY: romfs |
| 492 | romfs: |
| 493 | [ -e $(ROMFSDIR)/lib ] || mkdir $(ROMFSDIR)/lib |
| 494 | if [ "$(SHARED_TARGET)" ]; then \ |
| 495 | $(ROMFSINST) $(SHARED_TARGET) /lib/lib$(LIBID).so; \ |
| 496 | fi |
| 497 | ifeq ($(strip $(HAVE_SHARED)),y) |
| 498 | set -e; for i in lib/lib*-$(UCLIBC_VERSION).so lib/*.so.*; do \ |
| 499 | if [ -L $$i ]; then \ |
| 500 | $(ROMFSINST) -s `readlink $$i` /$$i; \ |
| 501 | else \ |
| 502 | $(ROMFSINST) -p 755 $$i /lib; \ |
| 503 | fi; \ |
| 504 | done |
| 505 | set -e; if [ -x lib/ld-uClibc-$(UCLIBC_VERSION).so ] ; then \ |
| 506 | $(ROMFSINST) -p 755 lib/ld-uClibc-$(UCLIBC_VERSION).so /lib; \ |
| 507 | #$(ROMFSINST) -s \ |
| 508 | # /lib/ld-uClibc-$(UCLIBC_VERSION).so \ |
| 509 | # $(LDSOGCC) ; \ |
| 510 | fi |
| 511 | endif |
| 512 | |
| 513 | distclean: clean |
| 514 | -find . \( -name core -o -name \*.orig -o -name \*~ -o -name .\*.dep \) -exec $(RM) {} \; |
| 515 | $(RM) $(top_builddir).config $(top_builddir).config.old $(top_builddir).config.cmd |
| 516 | $(RM) $(top_builddir)extra/locale/*.tgz |
| 517 | $(MAKE) -C extra/config distclean |
| 518 | |
| 519 | dist release: |
| 520 | $(RM) ../uClibc-$(VERSION).tar |
| 521 | git archive --format=tar --prefix=uClibc-$(VERSION)/ HEAD \ |
| 522 | > ../uClibc-$(VERSION).tar |
| 523 | cat ../uClibc-$(VERSION).tar | bzip2 -c9 > ../uClibc-$(VERSION).tar.bz2 |
| 524 | cat ../uClibc-$(VERSION).tar | xz -e -c8 > ../uClibc-$(VERSION).tar.xz |
| 525 | du -b ../uClibc-$(VERSION).tar.{bz2,xz} |
| 526 | |
| 527 | test check: test_compile |
| 528 | $(Q)$(MAKE) -C test |
| 529 | |
| 530 | test_compile: $(LOCAL_INSTALL_PATH) |
| 531 | $(Q)$(MAKE) -C test compile |