diff options
Diffstat (limited to 'scripts/Kbuild.install')
-rw-r--r-- | scripts/Kbuild.install | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/scripts/Kbuild.install b/scripts/Kbuild.install new file mode 100644 index 0000000..df02159 --- /dev/null +++ b/scripts/Kbuild.install @@ -0,0 +1,134 @@ +# +# Install klibc +# +# File is logically seperated in two pieces. +# First piece is used when during a recursive descend of the klibc tree +# and second piece is used to do the final steps in the install +# If KLIBC_INSTALL is defined it tells us we are descending and we +# use first piece of the file. + +# This indicates the location of the final version of the shared library. +# THIS MUST BE AN ABSOLUTE PATH WITH NO FINAL SLASH. +# Leave this empty to make it the root. +# +SHLIBDIR = /lib + +# First rule +PHONY := __install install-rule +__install: + +# Install commands +install-data := install -m 644 +install-lib := install -m 755 +install-bin := install -m 755 + +# Install command +quiet_cmd_install = INSTALL $(install-y) + cmd_install = $(install-bin) $(install-y) \ + $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)bin + +# Link install command +quiet_cmd_install_links = LN $(install-link-y) + cmd_install_links = $(foreach l, $(install-link-y), ln -f $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)bin/$(word 2,$(subst =,$(space),$(l))) $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)bin/$(word 1,$(subst =,$(space),$(l))) &&) true + +ifeq ($(KLIBC_INSTALL),1) +# First part - we are descending.. + +# Reset variables (to get right type of assingment) +subdir- := + +# Read .config if it exist, otherwise ignore +-include $(objtree)/.config + +# Include Kbuild file +include $(srctree)/scripts/Kbuild.include + +# Arch specific definitions for klibc +include $(srctree)/$(KLIBCSRC)/arch/$(KLIBCARCHDIR)/MCONFIG + +include $(srctree)/$(obj)/Kbuild + +# Directories to visit +# First find directories specified in lib-?, static-y and shared-y +find-dir = $(patsubst %/,%,$(filter %/, $(1))) + +__subdir := $(call find-dir, $(lib-)) +__subdir += $(call find-dir, $(lib-y)) + +__subdir += $(foreach e, $(static-y), $(call find-dir, $(e))) +__subdir += $(foreach e, $(shared-y), $(call find-dir, $(e))) + +# Use subdir- in Kbuild file to tell kbuild to visit a specific dir +subdir- += $(__subdir) + +# Remove duplicates and add prefix +subdir- := $(addprefix $(obj)/,$(sort $(subdir-))) + +# Files to install +install-y := $(strip $(addprefix $(obj)/, $(install-y))) + +__install: $(subdir-) install-rule +ifneq ($(install-y),) + $(call cmd,install) +else + @: +endif +ifneq ($(install-link-y),) + $(call cmd,install_links) +endif + +# Descending +PHONY += $(subdir-) +$(subdir-): + $(Q)$(MAKE) KLIBC_INSTALL=1 \ + -f $(srctree)/scripts/Kbuild.install obj=$@ + +# If quiet is set, only print short version of command +cmd = @$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))' &&) $(cmd_$(1)) + + +else +########################################################################## +# This is the first time this file is invoked, so kick off the +# install process. +# First we descend all sub-directories to let them do their install. +# Second we do the final install steps. + +# Do actual install as a three steps approach +# 1) Create directories, install headers and man pages +# 2) Tell that we now install binaries +# 3) Install binaries by descending +PHONY += header footer descend +header: + $(Q)echo " INSTALL headers + man pages to $(INSTALLROOT)$(INSTALLDIR)" + $(Q)mkdir -p $(INSTALLROOT)$(bindir) + $(Q)mkdir -p $(INSTALLROOT)$(mandir)/man1 + $(Q)mkdir -p $(INSTALLROOT)$(SHLIBDIR) + $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR) + $(Q)-rm -rf $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include + $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include + $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)lib + $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)bin + $(Q)cp -rfL $(KLIBCKERNELSRC)/include/. $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/. +ifneq ($(srctree),$(objtree)) + $(Q)cp -rf $(srctree)/usr/include/. $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/. +endif + $(Q)cp -rf usr/include/. $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/. + $(Q)chmod -R a+rX,go-w $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include + $(Q)$(install-data) $(srctree)/klcc/klcc.1 $(INSTALLROOT)$(mandir)/man1/$(KCROSS)klcc.1 + $(Q)$(install-bin) $(objtree)/klcc/$(KCROSS)klcc $(INSTALLROOT)$(bindir) + +footer: header + $(Q)echo " INSTALL binaries to $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)bin" + +descend: footer + $(Q)$(MAKE) KLIBC_INSTALL=1 \ + -f $(srctree)/scripts/Kbuild.install obj=$(obj) + +__install: descend + @: +endif + +# Declare the contents of the PHONY variable as phony. We keep the variable for +# if_changed. +.PHONY: $(PHONY) |