Skip to content
Snippets Groups Projects
Select Git revision
  • 794fe7891d77fb9ee095313c60805a8ed609e2a7
  • vme-testing default
  • ci-test
  • master
  • remoteproc
  • am625-sk-ov5640
  • pcal6534-upstreaming
  • lps22df-upstreaming
  • msc-upstreaming
  • imx8mp
  • iio/noa1305
  • vme-next
  • vme-next-4.14-rc4
  • v4.14-rc4
  • v4.14-rc3
  • v4.14-rc2
  • v4.14-rc1
  • v4.13
  • vme-next-4.13-rc7
  • v4.13-rc7
  • v4.13-rc6
  • v4.13-rc5
  • v4.13-rc4
  • v4.13-rc3
  • v4.13-rc2
  • v4.13-rc1
  • v4.12
  • v4.12-rc7
  • v4.12-rc6
  • v4.12-rc5
  • v4.12-rc4
  • v4.12-rc3
32 results

Makefile.host

Blame
  • Makefile.host 6.84 KiB
    # ==========================================================================
    # Building binaries on the host system
    # Binaries are used during the compilation of the kernel, for example
    # to preprocess a data file.
    #
    # Both C and C++ are supported, but preferred language is C for such utilities.
    #
    # Sample syntax (see Documentation/kbuild/makefiles.txt for reference)
    # hostprogs-y := bin2hex
    # Will compile bin2hex.c and create an executable named bin2hex
    #
    # hostprogs-y    := lxdialog
    # lxdialog-objs := checklist.o lxdialog.o
    # Will compile lxdialog.c and checklist.c, and then link the executable
    # lxdialog, based on checklist.o and lxdialog.o
    #
    # hostprogs-y      := qconf
    # qconf-cxxobjs   := qconf.o
    # qconf-objs      := menu.o
    # Will compile qconf as a C++ program, and menu as a C program.
    # They are linked as C++ code to the executable qconf
    
    # hostcc-option
    # Usage: cflags-y += $(call hostcc-option,-march=winchip-c6,-march=i586)
    
    hostcc-option = $(call try-run,\
    	$(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
    
    __hostprogs := $(sort $(hostprogs-y) $(hostprogs-m))
    host-cshlib := $(sort $(hostlibs-y) $(hostlibs-m))
    host-cxxshlib := $(sort $(hostcxxlibs-y) $(hostcxxlibs-m))
    
    # C code
    # Executables compiled from a single .c file
    host-csingle	:= $(foreach m,$(__hostprogs), \
    			$(if $($(m)-objs)$($(m)-cxxobjs),,$(m)))
    
    # C executables linked based on several .o files
    host-cmulti	:= $(foreach m,$(__hostprogs),\
    		   $(if $($(m)-cxxobjs),,$(if $($(m)-objs),$(m))))
    
    # Object (.o) files compiled from .c files
    host-cobjs	:= $(sort $(foreach m,$(__hostprogs),$($(m)-objs)))
    
    # C++ code
    # C++ executables compiled from at least one .cc file
    # and zero or more .c files
    host-cxxmulti	:= $(foreach m,$(__hostprogs),$(if $($(m)-cxxobjs),$(m)))
    
    # C++ Object (.o) files compiled from .cc files
    host-cxxobjs	:= $(sort $(foreach m,$(host-cxxmulti),$($(m)-cxxobjs)))
    
    # Object (.o) files used by the shared libaries
    host-cshobjs	:= $(sort $(foreach m,$(host-cshlib),$($(m:.so=-objs))))
    host-cxxshobjs	:= $(sort $(foreach m,$(host-cxxshlib),$($(m:.so=-objs))))
    
    # output directory for programs/.o files
    # hostprogs-y := tools/build may have been specified.
    # Retrieve also directory of .o files from prog-objs or prog-cxxobjs notation
    host-objdirs := $(dir $(__hostprogs) $(host-cobjs) $(host-cxxobjs))
    
    host-objdirs := $(strip $(sort $(filter-out ./,$(host-objdirs))))
    
    
    __hostprogs     := $(addprefix $(obj)/,$(__hostprogs))
    host-csingle	:= $(addprefix $(obj)/,$(host-csingle))
    host-cmulti	:= $(addprefix $(obj)/,$(host-cmulti))
    host-cobjs	:= $(addprefix $(obj)/,$(host-cobjs))
    host-cxxmulti	:= $(addprefix $(obj)/,$(host-cxxmulti))
    host-cxxobjs	:= $(addprefix $(obj)/,$(host-cxxobjs))
    host-cshlib	:= $(addprefix $(obj)/,$(host-cshlib))
    host-cxxshlib	:= $(addprefix $(obj)/,$(host-cxxshlib))
    host-cshobjs	:= $(addprefix $(obj)/,$(host-cshobjs))
    host-cxxshobjs	:= $(addprefix $(obj)/,$(host-cxxshobjs))
    host-objdirs    := $(addprefix $(obj)/,$(host-objdirs))
    
    obj-dirs += $(host-objdirs)
    
    #####
    # Handle options to gcc. Support building with separate output directory
    
    _hostc_flags   = $(HOSTCFLAGS)   $(HOST_EXTRACFLAGS)   \
                     $(HOSTCFLAGS_$(basetarget).o)
    _hostcxx_flags = $(HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \
                     $(HOSTCXXFLAGS_$(basetarget).o)
    
    ifeq ($(KBUILD_SRC),)
    __hostc_flags	= $(_hostc_flags)
    __hostcxx_flags	= $(_hostcxx_flags)
    else
    __hostc_flags	= -I$(obj) $(call flags,_hostc_flags)
    __hostcxx_flags	= -I$(obj) $(call flags,_hostcxx_flags)
    endif
    
    hostc_flags    = -Wp,-MD,$(depfile) $(__hostc_flags)
    hostcxx_flags  = -Wp,-MD,$(depfile) $(__hostcxx_flags)
    
    #####
    # Compile programs on the host
    
    # Create executable from a single .c file
    # host-csingle -> Executable
    quiet_cmd_host-csingle 	= HOSTCC  $@
          cmd_host-csingle	= $(HOSTCC) $(hostc_flags) -o $@ $< \
    	  	$(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
    $(host-csingle): $(obj)/%: $(src)/%.c FORCE
    	$(call if_changed_dep,host-csingle)
    
    # Link an executable based on list of .o files, all plain c
    # host-cmulti -> executable
    quiet_cmd_host-cmulti	= HOSTLD  $@
          cmd_host-cmulti	= $(HOSTCC) $(HOSTLDFLAGS) -o $@ \
    			  $(addprefix $(obj)/,$($(@F)-objs)) \
    			  $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
    $(host-cmulti): FORCE
    	$(call if_changed,host-cmulti)
    $(call multi_depend, $(host-cmulti), , -objs)
    
    # Create .o file from a single .c file
    # host-cobjs -> .o
    quiet_cmd_host-cobjs	= HOSTCC  $@
          cmd_host-cobjs	= $(HOSTCC) $(hostc_flags) -c -o $@ $<
    $(host-cobjs): $(obj)/%.o: $(src)/%.c FORCE
    	$(call if_changed_dep,host-cobjs)
    
    # Link an executable based on list of .o files, a mixture of .c and .cc
    # host-cxxmulti -> executable
    quiet_cmd_host-cxxmulti	= HOSTLD  $@
          cmd_host-cxxmulti	= $(HOSTCXX) $(HOSTLDFLAGS) -o $@ \
    			  $(foreach o,objs cxxobjs,\
    			  $(addprefix $(obj)/,$($(@F)-$(o)))) \
    			  $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
    $(host-cxxmulti): FORCE
    	$(call if_changed,host-cxxmulti)
    $(call multi_depend, $(host-cxxmulti), , -objs -cxxobjs)
    
    # Create .o file from a single .cc (C++) file
    quiet_cmd_host-cxxobjs	= HOSTCXX $@
          cmd_host-cxxobjs	= $(HOSTCXX) $(hostcxx_flags) -c -o $@ $<
    $(host-cxxobjs): $(obj)/%.o: $(src)/%.cc FORCE
    	$(call if_changed_dep,host-cxxobjs)
    
    # Compile .c file, create position independent .o file
    # host-cshobjs -> .o
    quiet_cmd_host-cshobjs	= HOSTCC  -fPIC $@
          cmd_host-cshobjs	= $(HOSTCC) $(hostc_flags) -fPIC -c -o $@ $<
    $(host-cshobjs): $(obj)/%.o: $(src)/%.c FORCE
    	$(call if_changed_dep,host-cshobjs)
    
    # Compile .c file, create position independent .o file
    # Note that plugin capable gcc versions can be either C or C++ based
    # therefore plugin source files have to be compilable in both C and C++ mode.
    # This is why a C++ compiler is invoked on a .c file.
    # host-cxxshobjs -> .o
    quiet_cmd_host-cxxshobjs	= HOSTCXX -fPIC $@
          cmd_host-cxxshobjs	= $(HOSTCXX) $(hostcxx_flags) -fPIC -c -o $@ $<
    $(host-cxxshobjs): $(obj)/%.o: $(src)/%.c FORCE
    	$(call if_changed_dep,host-cxxshobjs)
    
    # Link a shared library, based on position independent .o files
    # *.o -> .so shared library (host-cshlib)
    quiet_cmd_host-cshlib	= HOSTLLD -shared $@
          cmd_host-cshlib	= $(HOSTCC) $(HOSTLDFLAGS) -shared -o $@ \
    			  $(addprefix $(obj)/,$($(@F:.so=-objs))) \
    			  $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
    $(host-cshlib): FORCE
    	$(call if_changed,host-cshlib)
    $(call multi_depend, $(host-cshlib), .so, -objs)
    
    # Link a shared library, based on position independent .o files
    # *.o -> .so shared library (host-cxxshlib)
    quiet_cmd_host-cxxshlib	= HOSTLLD -shared $@
          cmd_host-cxxshlib	= $(HOSTCXX) $(HOSTLDFLAGS) -shared -o $@ \
    			  $(addprefix $(obj)/,$($(@F:.so=-objs))) \
    			  $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
    $(host-cxxshlib): FORCE
    	$(call if_changed,host-cxxshlib)
    $(call multi_depend, $(host-cxxshlib), .so, -objs)
    
    targets += $(host-csingle)  $(host-cmulti) $(host-cobjs)\
    	   $(host-cxxmulti) $(host-cxxobjs) $(host-cshlib) $(host-cshobjs) $(host-cxxshlib) $(host-cxxshobjs)