genode/libports/ports/libc.mk

470 lines
18 KiB
Makefile

LIBC := libc-8.2.0
#
# Interface to top-level prepare Makefile
#
PORTS += $(LIBC)
#
# Subdirectories to check out from FreeBSD's Subversion repository
#
LIBC_SVN_BASE = http://svn.freebsd.org/base/release/8.2.0
LIBC_CONTRIB_SUB_DIRS = libc include sys_sys sys_netinet sys_netinet6 \
sys_bsm sys_vm sys_arm sys_i386 sys_amd64 \
msun gdtoa
LIBC_SVN_libc = lib/libc
LIBC_SVN_include = include
LIBC_SVN_sys_sys = sys/sys
LIBC_SVN_sys_netinet = sys/netinet
LIBC_SVN_sys_netinet6 = sys/netinet6
LIBC_SVN_sys_bsm = sys/bsm
LIBC_SVN_sys_vm = sys/vm
LIBC_SVN_sys_arm = sys/arm/include
LIBC_SVN_sys_i386 = sys/i386/include
LIBC_SVN_sys_amd64 = sys/amd64/include
LIBC_SVN_msun = lib/msun
LIBC_SVN_gdtoa = contrib/gdtoa
LIBC_DIRS_TO_CHECKOUT = $(addprefix $(CONTRIB_DIR)/$(LIBC)/,$(LIBC_CONTRIB_SUB_DIRS))
$(LIBC_DIRS_TO_CHECKOUT):
$(ECHO) "checking out '$(LIBC_SVN_$(notdir $@))' to '$@'"
$(VERBOSE)mkdir -p $(CONTRIB_DIR)/$(LIBC)
$(VERBOSE)svn export $(LIBC_SVN_BASE)/$(LIBC_SVN_$(notdir $@)) $@
checkout-libc: $(LIBC_DIRS_TO_CHECKOUT)
#
# Files coming from the include directory
#
LIBC_IMPORT_INCLUDES = include/libc/strings.h \
include/libc/limits.h \
include/libc/string.h \
include/libc/ctype.h \
include/libc/_ctype.h \
include/libc/runetype.h \
include/libc/stdlib.h \
include/libc/stdio.h \
include/libc/signal.h \
include/libc/unistd.h \
include/libc/wchar.h \
include/libc/time.h \
include/libc/sysexits.h \
include/libc/arpa/inet.h \
include/libc/arpa/nameser.h \
include/libc/arpa/nameser_compat.h \
include/libc/resolv.h \
include/libc/wctype.h \
include/libc/fcntl.h \
include/libc/locale.h \
include/libc/langinfo.h \
include/libc/regex.h \
include/libc/paths.h \
include/libc/inttypes.h \
include/libc/fstab.h \
include/libc/netdb.h \
include/libc/ar.h \
include/libc/stdint.h \
include/libc/ieeefp.h \
include/libc/memory.h
#
# Files from include directory needed for stdlib
#
# We have to make sure to shadow all gcc headers to avoid conflicts.
#
LIBC_IMPORT_INCLUDES += include/libc/pthread.h \
include/libc/sched.h \
include/libc/err.h \
include/libc/getopt.h \
include/libc/search.h \
include/libc/ktrace.h \
include/libc/varargs.h \
include/libc/stddef.h \
include/libc/stdbool.h \
include/libc/assert.h \
include/libc/monetary.h \
include/libc/printf.h \
include/libc/math.h
#
# Files from include directory needed for gen lib
#
LIBC_IMPORT_INCLUDES += include/libc/vis.h \
include/libc/libgen.h \
include/libc/dirent.h \
include/libc/dlfcn.h \
include/libc/link.h \
include/libc/fmtmsg.h \
include/libc/fnmatch.h \
include/libc/fts.h \
include/libc/ftw.h \
include/libc/db.h \
include/libc/grp.h \
include/libc/nsswitch.h \
include/libc/pthread_np.h \
include/libc/syslog.h \
include/libc/pwd.h \
include/libc/utmp.h \
include/libc/ttyent.h \
include/libc/stringlist.h \
include/libc/glob.h \
include/libc/termios.h \
include/libc/a.out.h \
include/libc/elf-hints.h \
include/libc/nlist.h \
include/libc/spawn.h \
include/libc/readpassphrase.h \
include/libc/semaphore.h \
include/libc/_semaphore.h \
include/libc/setjmp.h \
include/libc/elf.h \
include/libc/ulimit.h \
include/libc/utime.h \
include/libc/wordexp.h
#
# Files from sys/vm needed for gen lib
#
LIBC_IMPORT_INCLUDES += include/libc/vm/vm_param.h \
include/libc/vm/vm.h \
include/libc/vm/pmap.h
#
# Files coming from the sys/netinet and sys/netinet6 directories
#
LIBC_IMPORT_INCLUDES += include/libc/netinet/in.h \
include/libc/netinet6/in6.h \
include/libc/netinet/tcp.h
#
# Files coming from the sys/sys directory
#
LIBC_IMPORT_INCLUDES += include/libc/sys/_types.h \
include/libc/sys/limits.h \
include/libc/sys/cdefs.h \
include/libc/sys/_null.h \
include/libc/sys/types.h \
include/libc/sys/_pthreadtypes.h \
include/libc/sys/syslimits.h \
include/libc/sys/select.h \
include/libc/sys/_sigset.h \
include/libc/sys/_timeval.h \
include/libc/sys/timespec.h \
include/libc/sys/_timespec.h \
include/libc/sys/stat.h \
include/libc/sys/signal.h \
include/libc/sys/unistd.h \
include/libc/sys/time.h \
include/libc/sys/param.h \
include/libc/sys/stdint.h \
include/libc/errno.h
#
# Files from sys/sys needed for stdlib and stdio and gen lib
#
LIBC_IMPORT_INCLUDES += include/libc/sys/queue.h \
include/libc/sys/mman.h \
include/libc/sys/stddef.h \
include/libc/sys/sysctl.h \
include/libc/sys/uio.h \
include/libc/sys/_iovec.h \
include/libc/sys/ktrace.h \
include/libc/sys/ioctl.h \
include/libc/sys/ttycom.h \
include/libc/sys/ioccom.h \
include/libc/sys/filio.h \
include/libc/sys/sockio.h \
include/libc/sys/wait.h \
include/libc/sys/file.h \
include/libc/sys/fcntl.h \
include/libc/sys/resource.h \
include/libc/sys/disklabel.h \
include/libc/sys/link_elf.h \
include/libc/sys/endian.h \
include/libc/sys/mount.h \
include/libc/sys/ucred.h \
include/libc/sys/dirent.h \
include/libc/sys/cpuset.h \
include/libc/sys/socket.h \
include/libc/sys/un.h \
include/libc/sys/ttydefaults.h \
include/libc/sys/imgact_aout.h \
include/libc/sys/elf32.h \
include/libc/sys/elf64.h \
include/libc/sys/elf_generic.h \
include/libc/sys/elf_common.h \
include/libc/sys/nlist_aout.h \
include/libc/sys/ipc.h \
include/libc/sys/sem.h \
include/libc/sys/exec.h \
include/libc/sys/_lock.h \
include/libc/sys/_mutex.h \
include/libc/sys/statvfs.h \
include/libc/sys/ucontext.h \
include/libc/sys/syslog.h \
include/libc/sys/times.h \
include/libc/sys/utsname.h \
include/libc/sys/elf.h \
include/libc/sys/mtio.h
#
# Files coming from the sys/arm/include directory
#
LIBC_IMPORT_INCLUDES += include/libc-arm/machine/_types.h \
include/libc-arm/machine/endian.h \
include/libc-arm/machine/_limits.h \
include/libc-arm/machine/signal.h \
include/libc-arm/machine/trap.h \
include/libc-arm/machine/_stdint.h \
include/libc-arm/machine/pte.h \
include/libc-arm/machine/cpuconf.h \
include/libc-arm/machine/sysarch.h \
include/libc-arm/machine/armreg.h \
include/libc-arm/machine/ieee.h \
include/libc-arm/machine/frame.h \
include/libc-arm/machine/sigframe.h \
include/libc-arm/machine/vm.h \
include/libc-arm/stdarg.h \
include/libc-arm/float.h
#
# Files coming from the sys/i386/include directory
#
LIBC_IMPORT_INCLUDES += include/libc-i386/machine/_types.h \
include/libc-i386/machine/endian.h \
include/libc-i386/machine/_limits.h \
include/libc-i386/machine/signal.h \
include/libc-i386/machine/trap.h \
include/libc-i386/machine/_inttypes.h \
include/libc-i386/machine/_stdint.h \
include/libc-i386/machine/param.h \
include/libc-i386/machine/vm.h \
include/libc-i386/machine/specialreg.h \
include/libc-i386/stdarg.h \
include/libc-i386/float.h
#
# Files coming from the sys/amd64/include directory
#
LIBC_IMPORT_INCLUDES += include/libc-amd64/machine/_types.h \
include/libc-amd64/machine/endian.h \
include/libc-amd64/machine/_limits.h \
include/libc-amd64/machine/signal.h \
include/libc-amd64/machine/trap.h \
include/libc-amd64/machine/_inttypes.h \
include/libc-amd64/machine/_stdint.h \
include/libc-amd64/machine/param.h \
include/libc-amd64/machine/vm.h \
include/libc-amd64/machine/specialreg.h \
include/libc-amd64/stdarg.h \
include/libc-amd64/float.h
#
# Files from sys/arm/include needed for stdlib and stdio
#
LIBC_IMPORT_INCLUDES += include/libc-arm/machine/cpufunc.h \
include/libc-arm/machine/vmparam.h \
include/libc-arm/machine/atomic.h \
include/libc-arm/arith.h \
include/libc-arm/_fpmath.h \
#
# Files from sys/i386/include needed for stdlib and stdio
#
LIBC_IMPORT_INCLUDES += include/libc-i386/machine/cpufunc.h \
include/libc-i386/machine/vmparam.h \
include/libc-i386/machine/atomic.h \
include/libc-i386/arith.h \
include/libc-i386/_fpmath.h \
#
# Files from sys/amd64/include needed for stdlib and stdio
#
LIBC_IMPORT_INCLUDES += include/libc-amd64/machine/cpufunc.h \
include/libc-amd64/machine/vmparam.h \
include/libc-amd64/machine/atomic.h \
include/libc-amd64/arith.h \
include/libc-amd64/_fpmath.h \
#
# Files from sys/arm/include needed for gen lib
#
LIBC_IMPORT_INCLUDES += include/libc-arm/machine/elf.h \
include/libc-arm/machine/exec.h \
include/libc-arm/machine/reloc.h \
include/libc-arm/machine/pmap.h \
include/libc-arm/machine/ucontext.h \
include/libc-arm/machine/setjmp.h \
include/libc-arm/machine/asm.h \
include/libc-arm/machine/param.h \
include/libc-arm/machine/_inttypes.h \
include/libc-arm/machine/ieeefp.h \
include/libc-arm/SYS.h
#
# Files from sys/i386/include needed for gen lib
#
LIBC_IMPORT_INCLUDES += include/libc-i386/machine/elf.h \
include/libc-i386/machine/exec.h \
include/libc-i386/machine/reloc.h \
include/libc-i386/machine/pmap.h \
include/libc-i386/machine/ucontext.h \
include/libc-i386/machine/setjmp.h \
include/libc-i386/machine/asm.h \
include/libc-i386/machine/ieeefp.h \
include/libc-i386/SYS.h
#
# Files from sys/amd64/include needed for gen lib
#
LIBC_IMPORT_INCLUDES += include/libc-amd64/machine/elf.h \
include/libc-amd64/machine/exec.h \
include/libc-amd64/machine/reloc.h \
include/libc-amd64/machine/pmap.h \
include/libc-amd64/machine/ucontext.h \
include/libc-amd64/machine/setjmp.h \
include/libc-amd64/machine/asm.h \
include/libc-amd64/machine/ieeefp.h \
include/libc-amd64/SYS.h
#
# Files needed for math lib
#
LIBC_IMPORT_INCLUDES += include/libc/complex.h
#
# Files from libc/arm needed for gdtoa lib
#
LIBC_IMPORT_INCLUDES += include/libc-arm/gd_qnan.h
#
# Files from libc/i386 needed for gdtoa lib
#
LIBC_IMPORT_INCLUDES += include/libc-i386/gd_qnan.h
#
# Files from libc/amd64 needed for gdtoa lib
#
LIBC_IMPORT_INCLUDES += include/libc-amd64/gd_qnan.h
#
# Files from msun/arm needed for gdtoa lib
#
LIBC_IMPORT_INCLUDES += include/libc-arm/fenv.h
#
# Files from msun/i387 needed for gdtoa lib
#
LIBC_IMPORT_INCLUDES += include/libc-i386/fenv.h
#
# Files from msun/amd64 needed for gdtoa lib
#
LIBC_IMPORT_INCLUDES += include/libc-amd64/fenv.h
#
# Files from sys/bsm for gen lib
#
LIBC_IMPORT_INCLUDES += include/libc/bsm/audit.h
##
# Shortcut for creating a symlink
#
# \param $(1) prefix prepended to symlink origin, used for creating relative
# symlinks
#
libc_gen_symlink_subsub = $(VERBOSE)mkdir -p $(dir $@); ln -sf ../../$< $@
libc_gen_symlink_subsubsub = $(VERBOSE)mkdir -p $(dir $@); ln -sf ../../../$< $@
include/libc/arpa/%.h: $(CONTRIB_DIR)/$(LIBC)/include/arpa/%.h
$(libc_gen_symlink_subsubsub)
include/libc/%.h: $(CONTRIB_DIR)/$(LIBC)/include/%.h
$(libc_gen_symlink_subsub)
include/libc/netinet/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_netinet/%.h
$(libc_gen_symlink_subsubsub)
include/libc/netinet6/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_netinet6/%.h
$(libc_gen_symlink_subsubsub)
include/libc/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_sys/%.h
$(libc_gen_symlink_subsub)
include/libc/%.h: $(CONTRIB_DIR)/$(LIBC)/msun/src/%.h
$(libc_gen_symlink_subsub)
include/libc-arm/%.h: $(CONTRIB_DIR)/$(LIBC)/msun/arm/%.h
$(libc_gen_symlink_subsub)
include/libc-i386/%.h: $(CONTRIB_DIR)/$(LIBC)/msun/i387/%.h
$(libc_gen_symlink_subsub)
include/libc-amd64/%.h: $(CONTRIB_DIR)/$(LIBC)/msun/amd64/%.h
$(libc_gen_symlink_subsub)
include/libc/sys/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_sys/%.h
$(libc_gen_symlink_subsubsub)
include/libc-arm/machine/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_arm/%.h
$(libc_gen_symlink_subsubsub)
include/libc-i386/machine/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_i386/%.h
$(libc_gen_symlink_subsubsub)
include/libc-amd64/machine/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_amd64/%.h
$(libc_gen_symlink_subsubsub)
include/libc-arm/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_arm/%.h
$(libc_gen_symlink_subsub)
include/libc-i386/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_i386/%.h
$(libc_gen_symlink_subsub)
include/libc-amd64/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_amd64/%.h
$(libc_gen_symlink_subsub)
include/libc-arm/%.h: $(CONTRIB_DIR)/$(LIBC)/libc/arm/%.h
$(libc_gen_symlink_subsub)
include/libc-i386/%.h: $(CONTRIB_DIR)/$(LIBC)/libc/i386/%.h
$(libc_gen_symlink_subsub)
include/libc-amd64/%.h: $(CONTRIB_DIR)/$(LIBC)/libc/amd64/%.h
$(libc_gen_symlink_subsub)
include/libc/bsm/audit.h: $(CONTRIB_DIR)/$(LIBC)/sys_bsm/audit.h
$(libc_gen_symlink_subsubsub)
include/libc/vm/%.h: $(CONTRIB_DIR)/$(LIBC)/sys_vm/%.h
$(libc_gen_symlink_subsubsub)
apply_patches-libc: checkout-libc
$(VERBOSE)find ./src/lib/libc/patches/ -name "*.patch" |\
xargs -ixxx sh -c "patch -p0 -r - -N -d $(CONTRIB_DIR)/$(LIBC) < xxx" || true
#
# Use new make instance for symlink creation. Otherwise the implicit rules
# above do not work as expected (because the dependent names do not exist
# at the invokation time of the original make instance and are created
# as side effect of the 'LIBC_DIRS_TO_CHECKOUT' out rule).
#
create_include_symlinks-libc: checkout-libc
$(VERBOSE)make -s $(LIBC_IMPORT_INCLUDES)
prepare-libc: create_include_symlinks-libc apply_patches-libc
clean_include_symlinks-libc:
$(VERBOSE)find include -type l -delete
clean_include_subdirs-libc: clean_include_symlinks-libc
$(VERBOSE)find include -type d -empty -delete
clean-libc: clean_include_subdirs-libc
$(VERBOSE)rm -rf $(CONTRIB_DIR)/$(LIBC)