20090310-1-paths:
[coreboot.git] / src / config / Config.lb
index 7202d7f44ee558521af85c05ffbbf74ea73ef0dc..6abef504e4814ab50eef0e543c5027a7a9eb27c5 100644 (file)
@@ -2,6 +2,7 @@
 
 uses HAVE_OPTION_TABLE
 uses CONFIG_AP_CODE_IN_CAR
+uses ASSEMBLER_DEBUG
 
 makedefine CPP:= $(CC) -x assembler-with-cpp -DASSEMBLY -E
 makedefine LIBGCC_FILE_NAME := $(shell $(CC) -print-libgcc-file-name)
@@ -10,6 +11,10 @@ makedefine GCC_INC_DIR := $(shell LC_ALL=C $(CC) -print-search-dirs | sed -ne "s
 makedefine CPPFLAGS := -I$(TOP)/src/include -I$(TOP)/src/arch/$(ARCH)/include -I$(GCC_INC_DIR) $(CPUFLAGS)
 makedefine CFLAGS := $(CPU_OPT) $(DISTRO_CFLAGS) $(CPPFLAGS) -Os -nostdinc -nostdlib -fno-builtin  -Wall
 
+if ASSEMBLER_DEBUG
+makedefine DEBUG_CFLAGS := -g -dA -fverbose-asm
+end
+
 makedefine HOSTCFLAGS:= -Os -Wall
 
 makerule ldscript.ld   
@@ -35,13 +40,13 @@ end
 makerule coreboot.a
         depends "$(OBJECTS)"
         action  "rm -f coreboot.a"
-        action  "ar cr coreboot.a $(OBJECTS)"
+        action  "$(CROSS_COMPILE)ar cr coreboot.a $(OBJECTS)"
 end
 
 
 makerule coreboot_ram.o
-       depends "$(DRIVER) coreboot.a $(LIBGCC_FILE_NAME)" 
-       action  "$(CC) $(DISTRO_LFLAGS) -nostdlib -r -o $@ c_start.o $(DRIVER) coreboot.a $(LIBGCC_FILE_NAME)"
+       depends "src/arch/$(ARCH)/lib/c_start.o $(DRIVER) coreboot.a $(LIBGCC_FILE_NAME)" 
+       action  "$(CC) $(DISTRO_LFLAGS) -nostdlib -r -o $@ $^"
 end
 
 makerule coreboot_ram
@@ -79,12 +84,12 @@ if CONFIG_AP_CODE_IN_CAR
        makerule coreboot_apc.a
                depends "apc_auto.o"
                action  "rm -f coreboot_apc.a"
-               action  "ar cr coreboot_apc.a apc_auto.o"
+               action  "$(CROSS_COMPILE)ar cr coreboot_apc.a apc_auto.o"
        end
 
        makerule coreboot_apc.o
-               depends "coreboot_apc.a c_start.o $(LIBGCC_FILE_NAME)"
-        action  "$(CC) $(DISTRO_LFLAGS) -nostdlib -r -o $@ c_start.o coreboot_apc.a $(LIBGCC_FILE_NAME)"
+               depends "src/arch/$(ARCH)/lib/c_start.o coreboot_apc.a $(LIBGCC_FILE_NAME)"
+               action  "$(CC) $(DISTRO_LFLAGS) -nostdlib -r -o $@ $^"
        end
 
        makerule coreboot_apc
@@ -124,13 +129,9 @@ makerule coreboot
        depends "crt0.o $(INIT-OBJECTS) $(COREBOOT_APC) $(COREBOOT_RAM_ROM) ldscript.ld"
        action  "$(CC) $(DISTRO_LFLAGS) -nostdlib -nostartfiles -static -o $@ -T ldscript.ld crt0.o $(INIT-OBJECTS)"
        action  "$(CROSS_COMPILE)nm -n coreboot | sort > coreboot.map"
+       action  "$(CROSS_COMPILE)objdump -dS coreboot > coreboot.disasm"        
 end
 
-#makerule crt0.S   
-#      depends "$(CRT0)" 
-#      action          "cp $< $@"
-#end
-
 # the buildrom tool
 makerule buildrom 
        depends "$(TOP)/util/buildrom/buildrom.c" 
@@ -141,14 +142,13 @@ end
 makedefine .PHONY : crt0.s
 makerule crt0.s   
        depends "crt0.S $(CRT0_INCLUDES)" 
-       action  "@echo \"$(CPP) ... $< > $@ \""
        action  "$(CPP) $(CPPFLAGS) -I. -I$(TOP)/src  $< > $@.new && mv $@.new $@"
 end
 
+# generate an assembly listing via -a switch.
 makerule crt0.o  
        depends "crt0.s" 
-       action  "@echo $(CC) ... -o $@ $<"
-       action  "@$(CC) -c $(CPU_OPT) -o $@ $<"
+       action  "$(CC) -Wa,-acdlns -c $(CPU_OPT) -o $@ $< >crt0.disasm"
 end
 
 makerule etags   
@@ -169,9 +169,16 @@ makerule documentation
        action  "doxygen corebootDoc.config"
 end
 
-makerule ./romcc   
+# Yes, the rule doesn't seem to make sense, but multiple images could try to
+# create a romcc binary at the same time, clobbering each other.
+# Our makefile architecture won't allow us to easily have the romcc target
+# in the main makefile, so keep it here and move the race condition winner
+# in place. That way, romcc may get compiled twice, but the binary will always
+# be in a correct and valid state if it exists because the move is atomic.
+makerule ../romcc   
        depends "$(TOP)/util/romcc/romcc.c" 
-       action  "$(HOSTCC) -g $(HOSTCFLAGS) $< -o $@"
+       action  "$(HOSTCC) -g $(HOSTCFLAGS) $< -o romcc.tmpfile"
+       action  "mv romcc.tmpfile $@"
 end
 
 makerule build_opt_tbl   
@@ -179,39 +186,28 @@ makerule build_opt_tbl
        action  "$(HOSTCC) $(HOSTCFLAGS) $(CPUFLAGS) $< -o $@" 
 end
 
-#makerule /$(TARGET_DIR)/option_table.c
-#      depends "build_opt_tbl $(MAINBOARD)/cmos.layout" 
-#      action  "./build_opt_tbl -b  --config $(MAINBOARD)/cmos.layout"
-#end
-
-makerule option_table.c
-       depends "build_opt_tbl $(MAINBOARD)/cmos.layout" 
-       action  "./build_opt_tbl -b  --config $(MAINBOARD)/cmos.layout --header option_table.h"
-end
-
-makerule option_table.h
+makerule option_table.h option_table.c
        depends "build_opt_tbl $(MAINBOARD)/cmos.layout" 
-       action  "./build_opt_tbl -b  --config $(MAINBOARD)/cmos.layout --header option_table.h"
+       action  "./build_opt_tbl --config $(MAINBOARD)/cmos.layout --header option_table.h --option option_table.c"
 end
 
 if HAVE_OPTION_TABLE
 object ./option_table.o 
-#special rule
-#makerule option_table.o 
-#      depends "option_table.c" 
-#      action  "$(CC) -c $(CFLAGS) -o $@ $<"
-#end
-# object option_table.o 
 end
 
-makerule clean  
+makerule clean 
+       action  "rm -f $(OBJECTS)"
+       action  "rm -f $(DRIVER)"
        action  "rm -f coreboot.* *~"
        action  "rm -f coreboot"
        action  "rm -f ldscript.ld"
        action  "rm -f a.out *.s *.l *.o *.E *.inc"
        action  "rm -f TAGS tags romcc*"
        action  "rm -f docipl buildrom* chips.c *chip.c coreboot_apc* coreboot_ram* coreboot_pay*"
-       action  "rm -f build_opt_tbl* nrv2b* option_table.c crt0.S"
+       action  "rm -f build_opt_tbl* nrv2b* option_table.c option_table.h crt0.S crt0.disasm"
+       action  "rm -f smm smm.elf smm.map smm_bin.c"
+       action  "rm -f dsdt.aml dsdt.c"
+       action  "rm -f payload"
 end
 
 # do standard config files that the user need not specify