blob: 3a2aa9c2a72a907b1074ae2da5c6324dcf26c07f [file] [log] [blame]
Jordan Crouse7249f792008-03-20 00:11:05 +00001##
2## This file is part of the coreinfo project.
3##
4## Copyright (C) 2008 Advanced Micro Devices, Inc.
Uwe Hermann2216d1b2008-03-24 15:47:49 +00005## Copyright (C) 2008 Uwe Hermann <uwe@hermann-uwe.de>
Jordan Crouse7249f792008-03-20 00:11:05 +00006##
7## This program is free software; you can redistribute it and/or modify
8## it under the terms of the GNU General Public License as published by
9## the Free Software Foundation; version 2 of the License.
10##
11## This program is distributed in the hope that it will be useful,
12## but WITHOUT ANY WARRANTY; without even the implied warranty of
13## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14## GNU General Public License for more details.
15##
16## You should have received a copy of the GNU General Public License
17## along with this program; if not, write to the Free Software
Paul Menzela46a7122013-02-23 18:37:27 +010018## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Jordan Crouse7249f792008-03-20 00:11:05 +000019##
20
Marc Jones5d01b762012-11-30 17:04:58 -070021src := $(shell pwd)
22srctree := $(src)
23srck := $(src)/util/kconfig
24obj := $(src)/build
25objk := $(src)/build/util/kconfig
Uwe Hermann2216d1b2008-03-24 15:47:49 +000026
27export KERNELVERSION := 0.1.0
28export KCONFIG_AUTOHEADER := $(obj)/config.h
29export KCONFIG_AUTOCONFIG := $(obj)/auto.conf
Marc Jones5d01b762012-11-30 17:04:58 -070030export V := $(V)
Uwe Hermann2216d1b2008-03-24 15:47:49 +000031
32CONFIG_SHELL := sh
33KBUILD_DEFCONFIG := configs/defconfig
34UNAME_RELEASE := $(shell uname -r)
35HAVE_DOTCONFIG := $(wildcard .config)
36MAKEFLAGS += -rR --no-print-directory
37
38# Make is silent per default, but 'make V=1' will show all compiler calls.
39ifneq ($(V),1)
40Q := @
41endif
42
Marc Jones5d01b762012-11-30 17:04:58 -070043HOSTCC ?= gcc
44HOSTCXX ?= g++
Uwe Hermann2216d1b2008-03-24 15:47:49 +000045HOSTCFLAGS := -I$(srck) -I$(objk)
46HOSTCXXFLAGS := -I$(srck) -I$(objk)
47
Marc Jones9915b372012-11-30 17:15:36 -070048LIBCONFIG_PATH := ../libpayload
49LIBPAYLOAD_DIR := ./libpayloadbin
50LPCC := $(LIBPAYLOAD_DIR)/libpayload/bin/lpgcc
51LPAS := $(LIBPAYLOAD_DIR)/libpayload/bin/lpas
52HAVE_LIBPAYLOAD := $(wildcard $(LIBPAYLOAD_DIR)/libpayload/lib/libpayload.a)
53LIB_CONFIG ?= defconfig
Marc Jones5d01b762012-11-30 17:04:58 -070054OBJCOPY ?= objcopy
Jordan Crouse1cb92bc2008-04-10 00:05:41 +000055
Marc Jones5d01b762012-11-30 17:04:58 -070056INCLUDES = -I$(obj)
Jordan Crouse1cb92bc2008-04-10 00:05:41 +000057CFLAGS := -Wall -Werror -Os $(INCLUDES)
Uwe Hermannab5b3e02008-03-31 20:30:18 +000058OBJECTS = cpuinfo_module.o cpuid.S.o pci_module.o coreboot_module.o \
Uwe Hermann2fbbb292008-07-08 16:18:38 +000059 nvram_module.o bootlog_module.o ramdump_module.o lar_module.o \
Uwe Hermann941c1fd2009-07-07 15:10:13 +000060 multiboot_module.o cbfs_module.o coreinfo.o
Uwe Hermannab5b3e02008-03-31 20:30:18 +000061OBJS = $(patsubst %,$(obj)/%,$(OBJECTS))
Uwe Hermann2216d1b2008-03-24 15:47:49 +000062TARGET = $(obj)/coreinfo.elf
63
Marc Jones5d01b762012-11-30 17:04:58 -070064ifneq ($(strip $(HAVE_DOTCONFIG)),)
Uwe Hermann2216d1b2008-03-24 15:47:49 +000065include $(src)/.config
Robert Millanc1f404f2008-11-11 23:41:08 +000066all: $(TARGET)
Jordan Crouse7249f792008-03-20 00:11:05 +000067
Marc Jones9915b372012-11-30 17:15:36 -070068$(TARGET): $(src)/.config $(OBJS) prepare libpayload
Marc Jones5d01b762012-11-30 17:04:58 -070069 $(Q)printf " LPCC $(subst $(shell pwd)/,,$(@))\n"
70 $(Q)$(LPCC) -o $@ $(OBJS)
71 $(Q)$(OBJCOPY) --only-keep-debug $@ $(TARGET).debug
72 $(Q)$(OBJCOPY) --strip-debug $@
73 $(Q)$(OBJCOPY) --add-gnu-debuglink=$(TARGET).debug $@
Uwe Hermann2216d1b2008-03-24 15:47:49 +000074
Marc Jones9915b372012-11-30 17:15:36 -070075$(obj)/%.S.o: $(src)/%.S libpayload
Marc Jones5d01b762012-11-30 17:04:58 -070076 $(Q)printf " LPAS $(subst $(shell pwd)/,,$(@))\n"
77 $(Q)$(LPAS) -o $@ $<
Uwe Hermann2216d1b2008-03-24 15:47:49 +000078
Marc Jones9915b372012-11-30 17:15:36 -070079$(obj)/%.o: $(src)/%.c libpayload
Marc Jones5d01b762012-11-30 17:04:58 -070080 $(Q)printf " LPCC $(subst $(shell pwd)/,,$(@))\n"
81 $(Q)$(LPCC) $(CFLAGS) -c -o $@ $<
Uwe Hermann2216d1b2008-03-24 15:47:49 +000082
Marc Jones5d01b762012-11-30 17:04:58 -070083else
84all: config
Uwe Hermann2216d1b2008-03-24 15:47:49 +000085endif
86
Marc Jones9915b372012-11-30 17:15:36 -070087ifneq ($(strip $(HAVE_LIBPAYLOAD)),)
88libpayload:
89 $(Q)printf "Found Libpayload $(LIBPAYLOAD_DIR).\n"
90else
91libpayload:
92 $(Q)printf "Building libpayload @ $(LIBCONFIG_PATH).\n"
93 $(Q)make -C $(LIBCONFIG_PATH) distclean
94 $(Q)make -C $(LIBCONFIG_PATH) $(LIB_CONFIG)
95 $(Q)make -C $(LIBCONFIG_PATH) DESTDIR=$(shell pwd)/$(LIBPAYLOAD_DIR) install
96endif
Marc Jones5d01b762012-11-30 17:04:58 -070097
Uwe Hermann2216d1b2008-03-24 15:47:49 +000098prepare:
99 $(Q)mkdir -p $(obj)/util/kconfig/lxdialog
100
Jordan Crouse7249f792008-03-20 00:11:05 +0000101clean:
Uwe Hermann134aaae2008-05-11 15:51:31 +0000102 $(Q)rm -rf build/*.elf build/*.o
Jordan Crouse7249f792008-03-20 00:11:05 +0000103
Uwe Hermann2216d1b2008-03-24 15:47:49 +0000104distclean: clean
Uwe Hermannc7582272008-04-03 22:20:35 +0000105 $(Q)rm -rf build
Uwe Hermann2216d1b2008-03-24 15:47:49 +0000106 $(Q)rm -f .config .config.old ..config.tmp .kconfig.d .tmpconfig*
Jordan Crouse7249f792008-03-20 00:11:05 +0000107
Uwe Hermann2216d1b2008-03-24 15:47:49 +0000108include util/kconfig/Makefile
Jordan Crouse7249f792008-03-20 00:11:05 +0000109
Uwe Hermann2216d1b2008-03-24 15:47:49 +0000110.PHONY: $(PHONY) prepare clean distclean
111