# # 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 ifeq ($(KLIBC_INSTALL),1) # First part - we are descending.. # Reset variables (to get right type of assingment) subdir- := # Include Kbuild file include $(srctree)/scripts/Kbuild.include 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 # 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)make -C $(KLIBCKERNELSRC) ARCH=$(KLIBCARCH) INSTALL_HDR_PATH=$(INSTALLROOT)$(INSTALLDIR)/$(KCROSS) headers_install $(Q)cp -rf usr/include/. $(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