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.


imported SEABIOS source tree
[palacios.git] / bios / seabios / tools / kconfig / Makefile
1 # ===========================================================================
2 # Kernel configuration targets
3 # These targets are used from top-level makefile
4
5 PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config \
6         localmodconfig localyesconfig
7
8 ifdef KBUILD_KCONFIG
9 Kconfig := $(KBUILD_KCONFIG)
10 else
11 Kconfig := Kconfig
12 endif
13
14 xconfig: $(obj)/qconf
15         $< $(Kconfig)
16
17 gconfig: $(obj)/gconf
18         $< $(Kconfig)
19
20 menuconfig: $(obj)/mconf
21         $< $(Kconfig)
22
23 config: $(obj)/conf
24         $< --oldaskconfig $(Kconfig)
25
26 nconfig: $(obj)/nconf
27         $< $(Kconfig)
28
29 oldconfig: $(obj)/conf
30         $< --$@ $(Kconfig)
31
32 silentoldconfig: $(obj)/conf
33         @echo "  Build Kconfig config file"
34         $(Q)mkdir -p include/generated
35         $(Q)$< --$@ $(Kconfig)
36
37 # if no path is given, then use src directory to find file
38 ifdef LSMOD
39 LSMOD_F := $(LSMOD)
40 ifeq ($(findstring /,$(LSMOD)),)
41   LSMOD_F := $(objtree)/$(LSMOD)
42 endif
43 endif
44
45 localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
46         $(Q)mkdir -p include/generated
47         $(Q)perl $< $(srctree) $(Kconfig) $(LSMOD_F) > .tmp.config
48         $(Q)if [ -f .config ]; then                                     \
49                         cmp -s .tmp.config .config ||                   \
50                         (mv -f .config .config.old.1;                   \
51                          mv -f .tmp.config .config;                     \
52                          $(obj)/conf --silentoldconfig $(Kconfig);      \
53                          mv -f .config.old.1 .config.old)               \
54         else                                                            \
55                         mv -f .tmp.config .config;                      \
56                         $(obj)/conf --silentoldconfig $(Kconfig);       \
57         fi
58         $(Q)rm -f .tmp.config
59
60 localyesconfig: $(obj)/streamline_config.pl $(obj)/conf
61         $(Q)mkdir -p include/generated
62         $(Q)perl $< $(srctree) $(Kconfig) $(LSMOD_F) > .tmp.config
63         $(Q)sed -i s/=m/=y/ .tmp.config
64         $(Q)if [ -f .config ]; then                                     \
65                         cmp -s .tmp.config .config ||                   \
66                         (mv -f .config .config.old.1;                   \
67                          mv -f .tmp.config .config;                     \
68                          $(obj)/conf --silentoldconfig $(Kconfig);      \
69                          mv -f .config.old.1 .config.old)               \
70         else                                                            \
71                         mv -f .tmp.config .config;                      \
72                         $(obj)/conf --silentoldconfig $(Kconfig);       \
73         fi
74         $(Q)rm -f .tmp.config
75
76 # Create new linux.pot file
77 # Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
78 # The symlink is used to repair a deficiency in arch/um
79 update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
80         $(Q)echo "  GEN config"
81         $(Q)xgettext --default-domain=linux              \
82             --add-comments --keyword=_ --keyword=N_      \
83             --from-code=UTF-8                            \
84             --files-from=tools/kconfig/POTFILES.in     \
85             --output $(obj)/config.pot
86         $(Q)sed -i s/CHARSET/UTF-8/ $(obj)/config.pot
87         $(Q)ln -fs Kconfig.i386 arch/um/Kconfig.arch
88         $(Q)(for i in `ls arch/*/Kconfig`;               \
89             do                                           \
90                 echo "  GEN $$i";                        \
91                 $(obj)/kxgettext $$i                     \
92                      >> $(obj)/config.pot;               \
93             done )
94         $(Q)msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
95             --output $(obj)/linux.pot
96         $(Q)rm -f arch/um/Kconfig.arch
97         $(Q)rm -f $(obj)/config.pot
98
99 PHONY += allnoconfig allyesconfig allmodconfig alldefconfig randconfig
100
101 allnoconfig allyesconfig allmodconfig alldefconfig randconfig: $(obj)/conf
102         $< --$@ $(Kconfig)
103
104 PHONY += listnewconfig oldnoconfig savedefconfig defconfig
105
106 listnewconfig oldnoconfig: $(obj)/conf
107         $< --$@ $(Kconfig)
108
109 savedefconfig: $(obj)/conf
110         $< --$@=defconfig $(Kconfig)
111
112 defconfig: $(obj)/conf
113         @echo "  Build default config"
114         $(Q)$< --defconfig=/dev/null $(Kconfig)
115
116 # Help text used by make help
117 help:
118         @echo  '  config          - Update current config utilising a line-oriented program'
119         @echo  '  nconfig         - Update current config utilising a ncurses menu based program'
120         @echo  '  menuconfig      - Update current config utilising a menu based program'
121         @echo  '  xconfig         - Update current config utilising a QT based front-end'
122         @echo  '  gconfig         - Update current config utilising a GTK based front-end'
123         @echo  '  oldconfig       - Update current config utilising a provided .config as base'
124         @echo  '  localmodconfig  - Update current config disabling modules not loaded'
125         @echo  '  localyesconfig  - Update current config converting local mods to core'
126         @echo  '  silentoldconfig - Same as oldconfig, but quietly, additionally update deps'
127         @echo  '  defconfig       - New config with default from ARCH supplied defconfig'
128         @echo  '  savedefconfig   - Save current config as ./defconfig (minimal config)'
129         @echo  '  allnoconfig     - New config where all options are answered with no'
130         @echo  '  allyesconfig    - New config where all options are accepted with yes'
131         @echo  '  allmodconfig    - New config selecting modules when possible'
132         @echo  '  alldefconfig    - New config with all symbols set to default'
133         @echo  '  randconfig      - New config with random answer to all options'
134         @echo  '  listnewconfig   - List new options'
135         @echo  '  oldnoconfig     - Same as silentoldconfig but set new symbols to n (unset)'
136
137 # lxdialog stuff
138 check-lxdialog  := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
139
140 # Use recursively expanded variables so we do not call gcc unless
141 # we really need to do so. (Do not call gcc as part of make mrproper)
142 HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags) \
143                     -DLOCALE
144
145 # ===========================================================================
146 # Shared Makefile for the various kconfig executables:
147 # conf:   Used for defconfig, oldconfig and related targets
148 # nconf:  Used for the nconfig target.
149 #         Utilizes ncurses
150 # mconf:  Used for the menuconfig target
151 #         Utilizes the lxdialog package
152 # qconf:  Used for the xconfig target
153 #         Based on QT which needs to be installed to compile it
154 # gconf:  Used for the gconfig target
155 #         Based on GTK which needs to be installed to compile it
156 # object files used by all kconfig flavours
157
158 lxdialog := lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o
159 lxdialog += lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o
160
161 conf-objs       := conf.o  zconf.tab.o
162 mconf-objs     := mconf.o zconf.tab.o $(lxdialog)
163 nconf-objs     := nconf.o zconf.tab.o nconf.gui.o
164 kxgettext-objs  := kxgettext.o zconf.tab.o
165
166 hostprogs-y := conf qconf gconf kxgettext
167
168 ifeq ($(MAKECMDGOALS),nconfig)
169         hostprogs-y += nconf
170 endif
171
172 ifeq ($(MAKECMDGOALS),menuconfig)
173         hostprogs-y += mconf
174 endif
175
176 ifeq ($(MAKECMDGOALS),xconfig)
177         qconf-target := 1
178 endif
179 ifeq ($(MAKECMDGOALS),gconfig)
180         gconf-target := 1
181 endif
182
183
184 ifeq ($(qconf-target),1)
185 qconf-cxxobjs   := qconf.o
186 qconf-objs      := kconfig_load.o zconf.tab.o
187 endif
188
189 ifeq ($(gconf-target),1)
190 gconf-objs      := gconf.o kconfig_load.o zconf.tab.o
191 endif
192
193 clean-files     := lkc_defs.h qconf.moc .tmp_qtcheck \
194                    .tmp_gtkcheck zconf.tab.c lex.zconf.c zconf.hash.c gconf.glade.h
195 clean-files     += mconf qconf gconf nconf
196 clean-files     += config.pot linux.pot
197
198 # Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
199 PHONY += $(obj)/dochecklxdialog
200 $(addprefix $(obj)/,$(lxdialog)): $(obj)/dochecklxdialog
201 $(obj)/dochecklxdialog:
202         $(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTLOADLIBES_mconf)
203
204 always := dochecklxdialog
205
206 # Add environment specific flags
207 HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(srctree)/$(src)/check.sh $(HOSTCC) $(HOSTCFLAGS))
208
209 # generated files seem to need this to find local include files
210 HOSTCFLAGS_lex.zconf.o  := -I$(src)
211 HOSTCFLAGS_zconf.tab.o  := -I$(src)
212
213 HOSTLOADLIBES_qconf     = $(KC_QT_LIBS) -ldl
214 HOSTCXXFLAGS_qconf.o    = $(KC_QT_CFLAGS) -D LKC_DIRECT_LINK
215
216 HOSTLOADLIBES_gconf     = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0` -ldl
217 HOSTCFLAGS_gconf.o      = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
218                           -D LKC_DIRECT_LINK
219
220 HOSTLOADLIBES_mconf   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
221
222 HOSTLOADLIBES_nconf     = -lmenu -lpanel -lncurses
223 $(obj)/qconf.o: $(obj)/.tmp_qtcheck
224
225 ifeq ($(qconf-target),1)
226 $(obj)/.tmp_qtcheck: $(src)/Makefile
227 -include $(obj)/.tmp_qtcheck
228
229 # QT needs some extra effort...
230 $(obj)/.tmp_qtcheck:
231         @set -e; echo "  CHECK   qt"; dir=""; pkg=""; \
232         if ! pkg-config --exists QtCore 2> /dev/null; then \
233             echo "* Unable to find the QT4 tool qmake. Trying to use QT3"; \
234             pkg-config --exists qt 2> /dev/null && pkg=qt; \
235             pkg-config --exists qt-mt 2> /dev/null && pkg=qt-mt; \
236             if [ -n "$$pkg" ]; then \
237               cflags="\$$(shell pkg-config $$pkg --cflags)"; \
238               libs="\$$(shell pkg-config $$pkg --libs)"; \
239               moc="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \
240               dir="$$(pkg-config $$pkg --variable=prefix)"; \
241             else \
242               for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \
243                 if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \
244               done; \
245               if [ -z "$$dir" ]; then \
246                 echo "*"; \
247                 echo "* Unable to find any QT installation. Please make sure that"; \
248                 echo "* the QT4 or QT3 development package is correctly installed and"; \
249                 echo "* either qmake can be found or install pkg-config or set"; \
250                 echo "* the QTDIR environment variable to the correct location."; \
251                 echo "*"; \
252                 false; \
253               fi; \
254               libpath=$$dir/lib; lib=qt; osdir=""; \
255               $(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \
256                 osdir=x$$($(HOSTCXX) -print-multi-os-directory); \
257               test -d $$libpath/$$osdir && libpath=$$libpath/$$osdir; \
258               test -f $$libpath/libqt-mt.so && lib=qt-mt; \
259               cflags="-I$$dir/include"; \
260               libs="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \
261               moc="$$dir/bin/moc"; \
262             fi; \
263             if [ ! -x $$dir/bin/moc -a -x /usr/bin/moc ]; then \
264               echo "*"; \
265               echo "* Unable to find $$dir/bin/moc, using /usr/bin/moc instead."; \
266               echo "*"; \
267               moc="/usr/bin/moc"; \
268             fi; \
269         else \
270           cflags="\$$(shell pkg-config QtCore QtGui Qt3Support --cflags)"; \
271           libs="\$$(shell pkg-config QtCore QtGui Qt3Support --libs)"; \
272           binpath="\$$(shell pkg-config QtCore --variable=prefix)"; \
273           moc="$$binpath/bin/moc"; \
274         fi; \
275         echo "KC_QT_CFLAGS=$$cflags" > $@; \
276         echo "KC_QT_LIBS=$$libs" >> $@; \
277         echo "KC_QT_MOC=$$moc" >> $@
278 endif
279
280 $(obj)/gconf.o: $(obj)/.tmp_gtkcheck
281
282 ifeq ($(gconf-target),1)
283 -include $(obj)/.tmp_gtkcheck
284
285 # GTK needs some extra effort, too...
286 $(obj)/.tmp_gtkcheck:
287         @if `pkg-config --exists gtk+-2.0 gmodule-2.0 libglade-2.0`; then               \
288                 if `pkg-config --atleast-version=2.0.0 gtk+-2.0`; then                  \
289                         touch $@;                                                               \
290                 else                                                                    \
291                         echo "*";                                                       \
292                         echo "* GTK+ is present but version >= 2.0.0 is required.";     \
293                         echo "*";                                                       \
294                         false;                                                          \
295                 fi                                                                      \
296         else                                                                            \
297                 echo "*";                                                               \
298                 echo "* Unable to find the GTK+ installation. Please make sure that";   \
299                 echo "* the GTK+ 2.0 development package is correctly installed...";    \
300                 echo "* You need gtk+-2.0, glib-2.0 and libglade-2.0.";                 \
301                 echo "*";                                                               \
302                 false;                                                                  \
303         fi
304 endif
305
306 $(obj)/zconf.tab.o: $(obj)/lex.zconf.c $(obj)/zconf.hash.c
307
308 $(obj)/kconfig_load.o: $(obj)/lkc_defs.h
309
310 $(obj)/qconf.o: $(obj)/qconf.moc $(obj)/lkc_defs.h
311
312 $(obj)/gconf.o: $(obj)/lkc_defs.h
313
314 $(obj)/%.moc: $(src)/%.h
315         $(KC_QT_MOC) -i $< -o $@
316
317 $(obj)/lkc_defs.h: $(src)/lkc_proto.h
318         sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
319
320 # Extract gconf menu items for I18N support
321 $(obj)/gconf.glade.h: $(obj)/gconf.glade
322         intltool-extract --type=gettext/glade $(obj)/gconf.glade
323
324 ###
325 # The following requires flex/bison/gperf
326 # By default we use the _shipped versions, uncomment the following line if
327 # you are modifying the flex/bison src.
328 # LKC_GENPARSER := 1
329
330 ifdef LKC_GENPARSER
331
332 $(obj)/zconf.tab.c: $(src)/zconf.y
333 $(obj)/lex.zconf.c: $(src)/zconf.l
334 $(obj)/zconf.hash.c: $(src)/zconf.gperf
335
336 %.tab.c: %.y
337         bison -l -b $* -p $(notdir $*) $<
338         cp $@ $@_shipped
339
340 lex.%.c: %.l
341         flex -L -P$(notdir $*) -o$@ $<
342         cp $@ $@_shipped
343
344 %.hash.c: %.gperf
345         gperf < $< > $@
346         cp $@ $@_shipped
347
348 endif
349
350 VPATH := $(srctree)
351
352 $(obj)/%:: $(src)/%_shipped
353         $(Q)cat $< > $@
354
355 host-cobjs      := $(sort $(foreach m,$(hostprogs-y),$($(m)-objs)))
356 host-cobjs      := $(addprefix $(obj)/,$(host-cobjs))
357 hostprogs-y     := $(addprefix $(obj)/,$(hostprogs-y))
358 $(host-cobjs) : $(obj)/%.o : $(src)/%.c
359         $(Q)$(HOSTCC) -I$(obj) -I$(srctree)/$(src) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) $(HOST_EXTRACFLAGS) -c -o $@ $<
360 $(hostprogs-y) : $(obj)/% : $(host-cobjs)
361         $(Q)$(HOSTCC) $(HOSTLDFLAGS) -o $@ $(addprefix $(obj)/,$($(@F)-objs)) $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))