Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


various minor bug fixes
[palacios.git] / scripts / Makefile.host
1 # ==========================================================================
2 # Building binaries on the host system
3 # Binaries are used during the compilation of the kernel, for example
4 # to preprocess a data file.
5 #
6 # Both C and C++ is supported, but preferred language is C for such utilities.
7 #
8 # Samle syntax (see Documentation/kbuild/makefile.txt for reference)
9 # hostprogs-y := bin2hex
10 # Will compile bin2hex.c and create an executable named bin2hex
11 #
12 # hostprogs-y    := lxdialog
13 # lxdialog-objs := checklist.o lxdialog.o
14 # Will compile lxdialog.c and checklist.c, and then link the executable
15 # lxdialog, based on checklist.o and lxdialog.o
16 #
17 # hostprogs-y      := qconf
18 # qconf-cxxobjs   := qconf.o
19 # qconf-objs      := menu.o
20 # Will compile qconf as a C++ program, and menu as a C program.
21 # They are linked as C++ code to the executable qconf
22
23 # hostprogs-y := conf
24 # conf-objs  := conf.o libkconfig.so
25 # libkconfig-objs := expr.o type.o
26 # Will create a shared library named libkconfig.so that consist of
27 # expr.o and type.o (they are both compiled as C code and the object file
28 # are made as position independent code).
29 # conf.c is compiled as a c program, and conf.o is linked together with
30 # libkconfig.so as the executable conf.
31 # Note: Shared libraries consisting of C++ files are not supported
32
33 __hostprogs := $(sort $(hostprogs-y)$(hostprogs-m))
34
35 # hostprogs-y := tools/build may have been specified. Retreive directory
36 obj-dirs += $(foreach f,$(__hostprogs), $(if $(dir $(f)),$(dir $(f))))
37 obj-dirs := $(strip $(sort $(filter-out ./,$(obj-dirs))))
38
39
40 # C code
41 # Executables compiled from a single .c file
42 host-csingle    := $(foreach m,$(__hostprogs),$(if $($(m)-objs),,$(m)))
43
44 # C executables linked based on several .o files
45 host-cmulti     := $(foreach m,$(__hostprogs),\
46                    $(if $($(m)-cxxobjs),,$(if $($(m)-objs),$(m))))
47
48 # Object (.o) files compiled from .c files
49 host-cobjs      := $(sort $(foreach m,$(__hostprogs),$($(m)-objs)))
50
51 # C++ code
52 # C++ executables compiled from at least on .cc file
53 # and zero or more .c files
54 host-cxxmulti   := $(foreach m,$(__hostprogs),$(if $($(m)-cxxobjs),$(m)))
55
56 # C++ Object (.o) files compiled from .cc files
57 host-cxxobjs    := $(sort $(foreach m,$(host-cxxmulti),$($(m)-cxxobjs)))
58
59 # Shared libaries (only .c supported)
60 # Shared libraries (.so) - all .so files referenced in "xxx-objs"
61 host-cshlib     := $(sort $(filter %.so, $(host-cobjs)))
62 # Remove .so files from "xxx-objs"
63 host-cobjs      := $(filter-out %.so,$(host-cobjs))
64
65 #Object (.o) files used by the shared libaries
66 host-cshobjs    := $(sort $(foreach m,$(host-cshlib),$($(m:.so=-objs))))
67
68 __hostprogs     := $(addprefix $(obj)/,$(__hostprogs))
69 host-csingle    := $(addprefix $(obj)/,$(host-csingle))
70 host-cmulti     := $(addprefix $(obj)/,$(host-cmulti))
71 host-cobjs      := $(addprefix $(obj)/,$(host-cobjs))
72 host-cxxmulti   := $(addprefix $(obj)/,$(host-cxxmulti))
73 host-cxxobjs    := $(addprefix $(obj)/,$(host-cxxobjs))
74 host-cshlib     := $(addprefix $(obj)/,$(host-cshlib))
75 host-cshobjs    := $(addprefix $(obj)/,$(host-cshobjs))
76 obj-dirs        := $(addprefix $(obj)/,$(obj-dirs))
77
78 #####
79 # Handle options to gcc. Support building with separate output directory
80
81 _hostc_flags   = $(HOSTCFLAGS)   $(HOST_EXTRACFLAGS)   $(HOSTCFLAGS_$(*F).o)
82 _hostcxx_flags = $(HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) $(HOSTCXXFLAGS_$(*F).o)
83
84 ifeq ($(KBUILD_SRC),)
85 __hostc_flags   = $(_hostc_flags)
86 __hostcxx_flags = $(_hostcxx_flags)
87 else
88 __hostc_flags   = -I$(obj) $(call flags,_hostc_flags)
89 __hostcxx_flags = -I$(obj) $(call flags,_hostcxx_flags)
90 endif
91
92 hostc_flags    = -Wp,-MD,$(depfile) $(__hostc_flags)
93 hostcxx_flags  = -Wp,-MD,$(depfile) $(__hostcxx_flags)
94
95 #####
96 # Compile programs on the host
97
98 # Create executable from a single .c file
99 # host-csingle -> Executable
100 quiet_cmd_host-csingle  = HOSTCC  $@
101       cmd_host-csingle  = $(HOSTCC) $(hostc_flags) -o $@ $< \
102                 $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
103 $(host-csingle): %: %.c FORCE
104         $(call if_changed_dep,host-csingle)
105
106 # Link an executable based on list of .o files, all plain c
107 # host-cmulti -> executable
108 quiet_cmd_host-cmulti   = HOSTLD  $@
109       cmd_host-cmulti   = $(HOSTCC) $(HOSTLDFLAGS) -o $@ \
110                           $(addprefix $(obj)/,$($(@F)-objs)) \
111                           $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
112 $(host-cmulti): %: $(host-cobjs) $(host-cshlib) FORCE
113         $(call if_changed,host-cmulti)
114
115 # Create .o file from a single .c file
116 # host-cobjs -> .o
117 quiet_cmd_host-cobjs    = HOSTCC  $@
118       cmd_host-cobjs    = $(HOSTCC) $(hostc_flags) -c -o $@ $<
119 $(host-cobjs): %.o: %.c FORCE
120         $(call if_changed_dep,host-cobjs)
121
122 # Link an executable based on list of .o files, a mixture of .c and .cc
123 # host-cxxmulti -> executable
124 quiet_cmd_host-cxxmulti = HOSTLD  $@
125       cmd_host-cxxmulti = $(HOSTCXX) $(HOSTLDFLAGS) -o $@ \
126                           $(foreach o,objs cxxobjs,\
127                           $(addprefix $(obj)/,$($(@F)-$(o)))) \
128                           $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
129 $(host-cxxmulti): %: $(host-cobjs) $(host-cxxobjs) $(host-cshlib) FORCE
130         $(call if_changed,host-cxxmulti)
131
132 # Create .o file from a single .cc (C++) file
133 quiet_cmd_host-cxxobjs  = HOSTCXX $@
134       cmd_host-cxxobjs  = $(HOSTCXX) $(hostcxx_flags) -c -o $@ $<
135 $(host-cxxobjs): %.o: %.cc FORCE
136         $(call if_changed_dep,host-cxxobjs)
137
138 # Compile .c file, create position independent .o file
139 # host-cshobjs -> .o
140 quiet_cmd_host-cshobjs  = HOSTCC  -fPIC $@
141       cmd_host-cshobjs  = $(HOSTCC) $(hostc_flags) -fPIC -c -o $@ $<
142 $(host-cshobjs): %.o: %.c FORCE
143         $(call if_changed_dep,host-cshobjs)
144
145 # Link a shared library, based on position independent .o files
146 # *.o -> .so shared library (host-cshlib)
147 quiet_cmd_host-cshlib   = HOSTLLD -shared $@
148       cmd_host-cshlib   = $(HOSTCC) $(HOSTLDFLAGS) -shared -o $@ \
149                           $(addprefix $(obj)/,$($(@F:.so=-objs))) \
150                           $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
151 $(host-cshlib): %: $(host-cshobjs) FORCE
152         $(call if_changed,host-cshlib)
153
154 targets += $(host-csingle)  $(host-cmulti) $(host-cobjs)\
155            $(host-cxxmulti) $(host-cxxobjs) $(host-cshlib) $(host-cshobjs) 
156