mirror of
https://github.com/fail0verflow/switch-coreboot.git
synced 2025-05-04 01:39:18 -04:00
Instead unconditionally include _all_ northbridge/southbridge/superio Makefiles, but put 'ifeq's in each of them to guard against including unwanted contents. This may sound like it's very slow when there are many Makefiles, but in practice the speed difference is neglectable. A few ad hoc tests I did showed no measurable speed differences at all (I used 30 or 40 sample Makefiles). Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de> Acked-by: Stefan Reinauer <stepan@coresystems.de> git-svn-id: svn://coreboot.org/repository/LinuxBIOSv3@440 f3766cd6-281f-0410-b1cd-43a5c92072e9
166 lines
5.3 KiB
Makefile
166 lines
5.3 KiB
Makefile
##
|
|
## This file is part of the LinuxBIOS project.
|
|
##
|
|
## LinuxBIOS build system Lbuild
|
|
##
|
|
## Copyright (C) 2007 coresystems GmbH
|
|
## (Written by Stefan Reinauer <stepan@coresystems.de> for coresystems GmbH)
|
|
##
|
|
## This program is free software; you can redistribute it and/or modify
|
|
## it under the terms of the GNU General Public License as published by
|
|
## the Free Software Foundation; either version 2 of the License, or
|
|
## (at your option) any later version.
|
|
##
|
|
## This program is distributed in the hope that it will be useful,
|
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
## GNU General Public License for more details.
|
|
##
|
|
## You should have received a copy of the GNU General Public License
|
|
## along with this program; if not, write to the Free Software
|
|
## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
##
|
|
|
|
VERSION = 3
|
|
PATCHLEVEL = 0
|
|
SUBLEVEL = 0
|
|
|
|
have_dotconfig := $(wildcard .config)
|
|
have_dotxcompile := $(wildcard .xcompile)
|
|
|
|
src := $(shell pwd)
|
|
obj := $(shell pwd)/build
|
|
export src obj
|
|
|
|
# Do not print "Entering directory ...".
|
|
MAKEFLAGS += --no-print-directory
|
|
|
|
CC := gcc
|
|
CFLAGS := -Os -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
|
-Werror-implicit-function-declaration -Wstrict-aliasing \
|
|
-fno-common -ffreestanding -fno-builtin -fomit-frame-pointer \
|
|
-mpreferred-stack-boundary=2 -mregparm=3 -pipe
|
|
# FIXME: Does stack boundary or regparm break the code on real hardware?
|
|
|
|
HOSTCC := gcc
|
|
HOSTCXX := g++
|
|
HOSTCFLAGS := -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \
|
|
-Wno-unused -Wno-sign-compare
|
|
|
|
LEX := flex
|
|
LYX := lyx
|
|
DOXYGEN := doxygen
|
|
DOXYGEN_OUTPUT_DIR := doxygen
|
|
|
|
# Make is silent per default, but 'make V=1' will show all compiler calls.
|
|
ifneq ($(V),1)
|
|
Q := @
|
|
endif
|
|
|
|
KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)
|
|
export KERNELVERSION
|
|
|
|
ifeq ($(strip $(have_dotconfig)),)
|
|
|
|
all:
|
|
$(Q)printf "Please run make menuconfig, xconfig or config first.\n"
|
|
|
|
else
|
|
|
|
include $(src)/.config
|
|
|
|
ifneq ($(CONFIG_LOCALVERSION),"")
|
|
LINUXBIOS_EXTRA_VERSION := -$(shell echo $(CONFIG_LOCALVERSION))
|
|
endif
|
|
|
|
all: prepare prepare2 $(obj)/linuxbios.rom
|
|
$(Q)printf " DONE\n"
|
|
|
|
ARCH:=$(shell echo $(CONFIG_ARCH))
|
|
MAINBOARDDIR=$(shell echo $(CONFIG_MAINBOARD_NAME))
|
|
|
|
LINUXBIOSINCLUDE := -I$(src) -Iinclude \
|
|
-I$(src)/include \
|
|
-I$(src)/include/arch/$(ARCH)/ \
|
|
-include $(obj)/config.h \
|
|
-include $(obj)/build.h
|
|
|
|
ifneq ($(strip $(have_dotxcompile)),)
|
|
include $(src)/.xcompile
|
|
else
|
|
include $(shell $(src)/util/xcompile/xcompile > $(src)/.xcompile || \
|
|
{ echo "complete\\ toolchain" && rm -f $(src)/.xcompile && exit 1; }; echo $(src)/.xcompile)
|
|
endif
|
|
|
|
CC := $(CC_$(ARCH))
|
|
AS := $(AS_$(ARCH))
|
|
LD := $(LD_$(ARCH))
|
|
OBJCOPY := $(OBJCOPY_$(ARCH))
|
|
CFLAGS += $(CFLAGS_$(ARCH))
|
|
|
|
CPPFLAGS := $(LINUXBIOSINCLUDE)
|
|
CFLAGS += $(LINUXBIOSINCLUDE)
|
|
|
|
# Note: This _must_ come after 'CC' is set for the second time in this
|
|
# Makefile (see above), otherwise the build would break if 'gcc' isn't
|
|
# the compiler actually used for the build (e.g. on cross compiler setups).
|
|
CFLAGS += -nostdinc -isystem `$(CC) -print-file-name=include`
|
|
|
|
include lib/Makefile
|
|
include device/Makefile
|
|
include mainboard/$(MAINBOARDDIR)/Makefile
|
|
include northbridge/*/*/Makefile
|
|
include southbridge/*/*/Makefile
|
|
include superio/*/*/Makefile
|
|
include arch/$(ARCH)/Makefile
|
|
|
|
endif
|
|
|
|
include util/Makefile
|
|
|
|
doc:
|
|
$(Q)$(LYX) -e pdf doc/design/newboot.lyx
|
|
|
|
doxy: doxygen
|
|
doxygen:
|
|
$(Q)$(DOXYGEN) util/doxygen/Doxyfile.LinuxBIOS
|
|
|
|
prepare:
|
|
$(Q)mkdir -p $(obj)
|
|
|
|
# FIXME: If .config changed, a rebuild is required.
|
|
|
|
prepare2:
|
|
$(Q)printf " CP $(subst $(shell pwd)/,,$(obj)/config.h)\n"
|
|
$(Q)cp $(src)/.tmpconfig.h $(obj)/config.h
|
|
$(Q)printf " GEN $(subst $(shell pwd)/,,$(obj)/build.h)\n"
|
|
$(Q)printf "#define LINUXBIOS_VERSION \"$(KERNELVERSION)\"\n" > $(obj)/build.h
|
|
$(Q)printf "#define LINUXBIOS_EXTRA_VERSION \"$(LINUXBIOS_EXTRA_VERSION)\"\n" >> $(obj)/build.h
|
|
$(Q)printf "#define LINUXBIOS_BUILD \"`LANG= date`\"\n" >> $(obj)/build.h
|
|
$(Q)printf "\n" >> $(obj)/build.h
|
|
$(Q)printf "#define LINUXBIOS_COMPILER \"$(shell LANG= $(CC) --version | head -n1)\"\n" >> $(obj)/build.h
|
|
$(Q)printf "#define LINUXBIOS_ASSEMBLER \"$(shell LANG= $(AS) --version | head -n1)\"\n" >> $(obj)/build.h
|
|
$(Q)printf "#define LINUXBIOS_LINKER \"$(shell LANG= $(LD) --version | head -n1)\"\n" >> $(obj)/build.h
|
|
$(Q)printf "#define LINUXBIOS_COMPILE_TIME \"`LANG= date +%T`\"\n" >> $(obj)/build.h
|
|
$(Q)printf "#define LINUXBIOS_COMPILE_BY \"$(shell PATH=$$PATH:/usr/ucb whoami)\"\n" >> $(obj)/build.h
|
|
$(Q)printf "#define LINUXBIOS_COMPILE_HOST \"$(shell hostname)\"\n" >> $(obj)/build.h
|
|
$(Q)printf "#define LINUXBIOS_COMPILE_DOMAIN \"$(shell which dnsdomainname 1>/dev/null && dnsdomainname || domainname)\"\n" >> $(obj)/build.h
|
|
|
|
clean:
|
|
$(Q)printf " CLEAN $(subst $(shell pwd)/,,$(obj))\n"
|
|
$(Q)rm -rf $(obj)
|
|
$(Q)printf " CLEAN $(subst $(shell pwd)/,,$(DOXYGEN_OUTPUT_DIR))\n"
|
|
$(Q)rm -rf $(DOXYGEN_OUTPUT_DIR)
|
|
$(Q)printf " CLEAN doc/design/newboot.pdf\n"
|
|
$(Q)rm -f doc/design/newboot.pdf
|
|
|
|
distclean: clean
|
|
$(Q)printf " CLEAN .kconfig.d .config .tmpconfig.h .config.old .xcompile\n"
|
|
$(Q)rm -f .kconfig.d .config .tmpconfig.h .config.old .xcompile
|
|
|
|
%.o: %.c
|
|
$(Q)printf " CC $(subst $(shell pwd)/,,$(@))\n"
|
|
$(Q)$(CC) $(CFLAGS) -o $@ -c $<
|
|
|
|
.PHONY: doc doxygen depends prepare prepare2 clean distclean
|
|
|