Author: stepan Date: Thu Feb 11 04:21:29 2010 New Revision: 5114 URL: http://tracker.coreboot.org/trac/coreboot/changeset/5114
Log: separate build.h and config.h usage (now possible because newconfig is gone)
Signed-off-by: Stefan Reinauer stepan@coresystems.de Acked-by: Patrick Georgi patrick.georgi@coresystems.de
This patch is slightly reworked to include a necessary romcc change that allows more than one -include specified on the command line, and gets rid of the explicit build.h dependencies of all files. (The files do keep an explicit config.h dependency though)
Modified: trunk/Makefile trunk/src/arch/i386/Makefile.inc trunk/src/arch/i386/lib/console.c trunk/src/lib/version.c trunk/util/romcc/romcc.c
Modified: trunk/Makefile ============================================================================== --- trunk/Makefile Wed Feb 10 21:31:38 2010 (r5113) +++ trunk/Makefile Thu Feb 11 04:21:29 2010 (r5114) @@ -148,31 +148,31 @@ endef
define objs_c_template -$(obj)/$(1)%.o: src/$(1)%.c $(obj)/build.h +$(obj)/$(1)%.o: src/$(1)%.c $(obj)/config.h @printf " CC $$(subst $$(obj)/,,$$(@))\n" $(CC) -m32 $$(CFLAGS) -c -o $$@ $$< endef
define objs_S_template -$(obj)/$(1)%.o: src/$(1)%.S $(obj)/build.h +$(obj)/$(1)%.o: src/$(1)%.S $(obj)/config.h @printf " CC $$(subst $$(obj)/,,$$(@))\n" $(CC) -m32 -DASSEMBLY $$(CFLAGS) -c -o $$@ $$< endef
define initobjs_c_template -$(obj)/$(1)%.o: src/$(1)%.c $(obj)/build.h +$(obj)/$(1)%.o: src/$(1)%.c $(obj)/config.h @printf " CC $$(subst $$(obj)/,,$$(@))\n" $(CC) -m32 $$(CFLAGS) -c -o $$@ $$< endef
define initobjs_S_template -$(obj)/$(1)%.o: src/$(1)%.S $(obj)/build.h +$(obj)/$(1)%.o: src/$(1)%.S $(obj)/config.h @printf " CC $$(subst $$(obj)/,,$$(@))\n" $(CC) -m32 -DASSEMBLY $$(CFLAGS) -c -o $$@ $$< endef
define drivers_c_template -$(obj)/$(1)%.o: src/$(1)%.c $(obj)/build.h +$(obj)/$(1)%.o: src/$(1)%.c $(obj)/config.h @printf " CC $$(subst $$(obj)/,,$$(@))\n" $(CC) -m32 $$(CFLAGS) -c -o $$@ $$< endef @@ -219,7 +219,7 @@ INCLUDES := -I$(top)/src -I$(top)/src/include -I$(obj) -I$(top)/src/arch/$(ARCHDIR-y)/include INCLUDES += -I$(shell $(CC) -print-search-dirs | head -n 1 | cut -d' ' -f2)include INCLUDES += -I$(top)/util/x86emu/include -INCLUDES += -include $(obj)/build.h +INCLUDES += -include $(obj)/config.h
CFLAGS = $(INCLUDES) -Os -nostdinc CFLAGS += -nostdlib -Wall -Wundef -Wstrict-prototypes -Wmissing-prototypes @@ -250,7 +250,10 @@ $(obj)/build.h: @printf " GEN build.h\n" rm -f $(obj)/build.h - printf "#define COREBOOT_VERSION "$(KERNELVERSION)"\n" > $(obj)/build.ht + printf "/* build system definitions (autogenerated) */\n" > $(obj)/build.ht + printf "#ifndef __BUILD_H\n" >> $(obj)/build.ht + printf "#define __BUILD_H\n\n" >> $(obj)/build.ht + printf "#define COREBOOT_VERSION "$(KERNELVERSION)"\n" >> $(obj)/build.ht printf "#define COREBOOT_EXTRA_VERSION "$(COREBOOT_EXTRA_VERSION)"\n" >> $(obj)/build.ht printf "#define COREBOOT_BUILD "`LANG= date`"\n" >> $(obj)/build.ht printf "\n" >> $(obj)/build.ht @@ -261,7 +264,7 @@ printf "#define COREBOOT_COMPILE_BY "$(subst ,@,$(shell PATH=$$PATH:/usr/ucb whoami))"\n" >> $(obj)/build.ht printf "#define COREBOOT_COMPILE_HOST "$(shell hostname -s)"\n" >> $(obj)/build.ht printf "#define COREBOOT_COMPILE_DOMAIN "$(shell test `uname -s` = "Linux" && dnsdomainname || domainname)"\n" >> $(obj)/build.ht - printf "#include "config.h"\n" >> $(obj)/build.ht + printf "#endif\n" >> $(obj)/build.ht mv $(obj)/build.ht $(obj)/build.h
doxy: doxygen
Modified: trunk/src/arch/i386/Makefile.inc ============================================================================== --- trunk/src/arch/i386/Makefile.inc Wed Feb 10 21:31:38 2010 (r5113) +++ trunk/src/arch/i386/Makefile.inc Thu Feb 11 04:21:29 2010 (r5114) @@ -79,11 +79,11 @@ $(obj)/romcc $(ROMCCFLAGS) --label-prefix=failover $(INCLUDES) $(src)/arch/i386/lib/failover.c -o $@
$(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(obj)/romcc $(OPTION_TABLE_H) $(obj)/build.h - $(obj)/romcc $(ROMCCFLAGS) $(INCLUDES) $< -o $@ + $(obj)/romcc $(ROMCCFLAGS) -include $(obj)/build.h $(INCLUDES) $< -o $@
else $(obj)/mainboard/$(MAINBOARDDIR)/romstage.inc: $(src)/mainboard/$(MAINBOARDDIR)/romstage.c $(OPTION_TABLE_H) $(obj)/build.h - $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S $< -o - | sed -e 's/.rodata/.rom.data/g' -e 's/.text/.section .rom.text/g' > $@.tmp + $(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -include $(obj)/build.h -I$(src) -I. -c -S $< -o - | sed -e 's/.rodata/.rom.data/g' -e 's/.text/.section .rom.text/g' > $@.tmp mv $@.tmp $@ endif endif
Modified: trunk/src/arch/i386/lib/console.c ============================================================================== --- trunk/src/arch/i386/lib/console.c Wed Feb 10 21:31:38 2010 (r5113) +++ trunk/src/arch/i386/lib/console.c Thu Feb 11 04:21:29 2010 (r5114) @@ -1,3 +1,4 @@ +#include <build.h> #include <console/loglevel.h>
#if CONFIG_USE_PRINTK_IN_CAR == 0 @@ -6,10 +7,6 @@ #include "console_printk.c" #endif /* CONFIG_USE_PRINTK_IN_CAR */
-#ifndef COREBOOT_EXTRA_VERSION -#define COREBOOT_EXTRA_VERSION "" -#endif - void console_init(void) { static const char console_test[] = @@ -22,7 +19,6 @@ print_info(console_test); }
- void die(const char *str) { print_emerg(str);
Modified: trunk/src/lib/version.c ============================================================================== --- trunk/src/lib/version.c Wed Feb 10 21:31:38 2010 (r5113) +++ trunk/src/lib/version.c Thu Feb 11 04:21:29 2010 (r5114) @@ -1,4 +1,5 @@ #include <version.h> +#include <build.h>
#ifndef CONFIG_MAINBOARD_VENDOR #error CONFIG_MAINBOARD_VENDOR not defined
Modified: trunk/util/romcc/romcc.c ============================================================================== --- trunk/util/romcc/romcc.c Wed Feb 10 21:31:38 2010 (r5113) +++ trunk/util/romcc/romcc.c Thu Feb 11 04:21:29 2010 (r5114) @@ -3,8 +3,8 @@ #undef RELEASE_DATE #undef VERSION #define VERSION_MAJOR "0" -#define VERSION_MINOR "71" -#define RELEASE_DATE "03 April 2009" +#define VERSION_MINOR "72" +#define RELEASE_DATE "10 February 2010" #define VERSION VERSION_MAJOR "." VERSION_MINOR
#include <stdarg.h> @@ -127,6 +127,14 @@ * Where do I place phi functions and how do I make that decision. * */ + +struct filelist { + const char *filename; + struct filelist *next; +}; + +struct filelist *include_filelist = NULL; + static void die(char *fmt, ...) { va_list args; @@ -24927,12 +24935,13 @@ } }
-static void compile(const char *filename, const char *includefile, +static void compile(const char *filename, struct compiler_state *compiler, struct arch_state *arch) { int i; struct compile_state state; struct triple *ptr; + struct filelist *includes = include_filelist; memset(&state, 0, sizeof(state)); state.compiler = compiler; state.arch = arch; @@ -25002,8 +25011,11 @@ register_builtins(&state);
compile_file(&state, filename, 1); - if (includefile) - compile_file(&state, includefile, 1); + + while (includes) { + compile_file(&state, includes->filename, 1); + includes=includes->next; + }
/* Stop if all we want is preprocessor output */ if (state.compiler->flags & COMPILER_PP_ONLY) { @@ -25070,7 +25082,6 @@ int main(int argc, char **argv) { const char *filename; - const char *includefile = NULL; struct compiler_state compiler; struct arch_state arch; int all_opts; @@ -25121,14 +25132,16 @@ result = arch_encode_flag(&arch, argv[1]+2); } else if (strncmp(argv[1], "-include", 10) == 0) { - if (includefile) { - arg_error("Only one -include option may be specified.\n"); - } else { - argv++; - argc--; - includefile = argv[1]; - result = 0; - } + struct filelist *old_head = include_filelist; + include_filelist = malloc(sizeof(struct filelist)); + if (!include_filelist) { + die("Out of memory.\n"); + } + argv++; + argc--; + include_filelist->filename = argv[1]; + include_filelist->next = old_head; + result = 0; } if (result < 0) { arg_error("Invalid option specified: %s\n", @@ -25149,7 +25162,7 @@ if (!filename) { arg_error("No filename specified\n"); } - compile(filename, includefile, &compiler, &arch); + compile(filename, &compiler, &arch);
return 0; }
repository service wrote:
+++ trunk/util/romcc/romcc.c Thu Feb 11 04:21:29 2010 (r5114)
..
else if (strncmp(argv[1], "-include", 10) == 0) {
..
struct filelist *old_head = include_filelist;
include_filelist = malloc(sizeof(struct filelist));
if (!include_filelist) {
die("Out of memory.\n");
}
argv++;
argc--;
include_filelist->filename = argv[1];
include_filelist->next = old_head;
It seems that -included files will be compiled in reverse order by this? Might that be a usability issue? I could change it.
//Peter
Am 11.02.2010 10:19, schrieb Peter Stuge:
repository service wrote:
+++ trunk/util/romcc/romcc.c Thu Feb 11 04:21:29 2010 (r5114)
..
else if (strncmp(argv[1], "-include", 10) == 0) {
..
struct filelist *old_head = include_filelist;
include_filelist = malloc(sizeof(struct filelist));
if (!include_filelist) {
die("Out of memory.\n");
}
argv++;
argc--;
include_filelist->filename = argv[1];
include_filelist->next = old_head;
It seems that -included files will be compiled in reverse order by this? Might that be a usability issue? I could change it.
romcc already requires some reverse order, so this might already be to match things up.
testcase:
test.c is empty include1.h contains "#warning inc1" include2.h contains "#warning inc2"
$ ./romcc.exe -include include1.h -include include2.h test.c include1.h:2.0: warning: inc1 include2.h:2.0: warning: inc2 test.c:2.0: warning: main :0.0: No functions to compile
So it does the right thing.
Patrick