blob: 6f7ce51fec022fe5a1d86284b255926874ec94ea [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##
Jordan Crouse7249f792008-03-20 00:11:05 +000016
Marc Jones5d01b762012-11-30 17:04:58 -070017src := $(shell pwd)
18srctree := $(src)
Stefan Reinauer0ab2b252015-06-29 16:10:16 -070019srck := $(src)/../../util/kconfig
Marc Jones5d01b762012-11-30 17:04:58 -070020obj := $(src)/build
21objk := $(src)/build/util/kconfig
Uwe Hermann2216d1b2008-03-24 15:47:49 +000022
23export KERNELVERSION := 0.1.0
24export KCONFIG_AUTOHEADER := $(obj)/config.h
25export KCONFIG_AUTOCONFIG := $(obj)/auto.conf
Stefan Reinauer0ab2b252015-06-29 16:10:16 -070026export KCONFIG_DEPENDENCIES := $(obj)/auto.conf.cmd
27export KCONFIG_SPLITCONFIG := $(obj)/config
28export KCONFIG_TRISTATE := $(obj)/tristate.conf
29export KCONFIG_NEGATIVES := 1
30export Kconfig := Kconfig
31
Marc Jones5d01b762012-11-30 17:04:58 -070032export V := $(V)
Uwe Hermann2216d1b2008-03-24 15:47:49 +000033
34CONFIG_SHELL := sh
35KBUILD_DEFCONFIG := configs/defconfig
36UNAME_RELEASE := $(shell uname -r)
37HAVE_DOTCONFIG := $(wildcard .config)
38MAKEFLAGS += -rR --no-print-directory
39
40# Make is silent per default, but 'make V=1' will show all compiler calls.
41ifneq ($(V),1)
Stefan Reinauer739a6adb2015-06-30 15:22:12 -070042.SILENT:
Uwe Hermann2216d1b2008-03-24 15:47:49 +000043endif
44
Marc Jones5d01b762012-11-30 17:04:58 -070045HOSTCC ?= gcc
46HOSTCXX ?= g++
Uwe Hermann2216d1b2008-03-24 15:47:49 +000047HOSTCFLAGS := -I$(srck) -I$(objk)
48HOSTCXXFLAGS := -I$(srck) -I$(objk)
49
Marc Jones9915b372012-11-30 17:15:36 -070050LIBCONFIG_PATH := ../libpayload
Stefan Reinauerccc55fd2015-06-29 16:44:12 -070051LIBPAYLOAD_DIR := build/libpayload
Marc Jones9915b372012-11-30 17:15:36 -070052HAVE_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
Stefan Reinauerccc55fd2015-06-29 16:44:12 -070056INCLUDES = -I$(obj) -include $(LIBPAYLOAD_DIR)/libpayload/include/kconfig.h
Uwe Hermannab5b3e02008-03-31 20:30:18 +000057OBJECTS = cpuinfo_module.o cpuid.S.o pci_module.o coreboot_module.o \
Uwe Hermann2fbbb292008-07-08 16:18:38 +000058 nvram_module.o bootlog_module.o ramdump_module.o lar_module.o \
Uwe Hermann941c1fd2009-07-07 15:10:13 +000059 multiboot_module.o cbfs_module.o coreinfo.o
Uwe Hermannab5b3e02008-03-31 20:30:18 +000060OBJS = $(patsubst %,$(obj)/%,$(OBJECTS))
Uwe Hermann2216d1b2008-03-24 15:47:49 +000061TARGET = $(obj)/coreinfo.elf
62
Martin Rothcacbcf42015-11-16 22:33:48 -070063all: real-all
64
65# in addition to the dependency below, create the file if it doesn't exist
66# to silence warnings about a file that would be generated anyway.
67$(if $(wildcard .xcompile),,$(eval $(shell ../../util/xcompile/xcompile $(XGCCPATH) > .xcompile || rm -f .xcompile)))
68.xcompile: ../../util/xcompile/xcompile
69 $< $(XGCCPATH) > $@.tmp
70 \mv -f $@.tmp $@ 2> /dev/null || rm -f $@.tmp $@
71
72CONFIG_COMPILER_GCC := y
73ARCH-y := x86_32
74
75include .xcompile
76
77CC := $(CC_$(ARCH-y))
78AS := $(AS_$(ARCH-y))
79OBJCOPY := $(OBJCOPY_$(ARCH-y))
80
81LPCC := CC=$(CC) $(LIBPAYLOAD_DIR)/libpayload/bin/lpgcc
82LPAS := AS=$(AS) $(LIBPAYLOAD_DIR)/libpayload/bin/lpas
83
84CFLAGS += -Wall -Werror -Os -fno-builtin $(CFLAGS_$(ARCH-y)) $(INCLUDES)
85
Marc Jones5d01b762012-11-30 17:04:58 -070086ifneq ($(strip $(HAVE_DOTCONFIG)),)
Uwe Hermann2216d1b2008-03-24 15:47:49 +000087include $(src)/.config
Martin Rothcacbcf42015-11-16 22:33:48 -070088real-all: $(TARGET)
Jordan Crouse7249f792008-03-20 00:11:05 +000089
Stefan Reinauerccc55fd2015-06-29 16:44:12 -070090$(TARGET): $(src)/.config $(obj)/config.h $(OBJS) libpayload
Stefan Reinauer739a6adb2015-06-30 15:22:12 -070091 printf " LPCC $(subst $(shell pwd)/,,$(@)) (LINK)\n"
92 $(LPCC) -o $@ $(OBJS)
93 $(OBJCOPY) --only-keep-debug $@ $(TARGET).debug
94 $(OBJCOPY) --strip-debug $@
95 $(OBJCOPY) --add-gnu-debuglink=$(TARGET).debug $@
Uwe Hermann2216d1b2008-03-24 15:47:49 +000096
Marc Jones9915b372012-11-30 17:15:36 -070097$(obj)/%.S.o: $(src)/%.S libpayload
Stefan Reinauer739a6adb2015-06-30 15:22:12 -070098 printf " LPAS $(subst $(shell pwd)/,,$(@))\n"
99 $(LPAS) -o $@ $<
Uwe Hermann2216d1b2008-03-24 15:47:49 +0000100
Marc Jones9915b372012-11-30 17:15:36 -0700101$(obj)/%.o: $(src)/%.c libpayload
Stefan Reinauer739a6adb2015-06-30 15:22:12 -0700102 printf " LPCC $(subst $(shell pwd)/,,$(@))\n"
103 $(LPCC) $(CFLAGS) -c -o $@ $<
Uwe Hermann2216d1b2008-03-24 15:47:49 +0000104
Marc Jones5d01b762012-11-30 17:04:58 -0700105else
Martin Rothcacbcf42015-11-16 22:33:48 -0700106real-all: config
Uwe Hermann2216d1b2008-03-24 15:47:49 +0000107endif
108
Marc Jones9915b372012-11-30 17:15:36 -0700109ifneq ($(strip $(HAVE_LIBPAYLOAD)),)
110libpayload:
Stefan Reinauer739a6adb2015-06-30 15:22:12 -0700111 printf "Found Libpayload $(LIBPAYLOAD_DIR).\n"
Marc Jones9915b372012-11-30 17:15:36 -0700112else
113libpayload:
Stefan Reinauer739a6adb2015-06-30 15:22:12 -0700114 printf "Building libpayload @ $(LIBCONFIG_PATH).\n"
Martin Rothcacbcf42015-11-16 22:33:48 -0700115 $(MAKE) -C $(LIBCONFIG_PATH) distclean
116 $(MAKE) -C $(LIBCONFIG_PATH) $(LIB_CONFIG)
117 $(MAKE) -C $(LIBCONFIG_PATH) DESTDIR=$(shell pwd)/$(LIBPAYLOAD_DIR) install
Marc Jones9915b372012-11-30 17:15:36 -0700118endif
Marc Jones5d01b762012-11-30 17:04:58 -0700119
Stefan Reinauerccc55fd2015-06-29 16:44:12 -0700120$(obj)/config.h:
121 $(MAKE) oldconfig
122
Stefan Reinauer0ab2b252015-06-29 16:10:16 -0700123$(shell mkdir -p $(obj) $(objk)/lxdialog $(KCONFIG_SPLITCONFIG))
Uwe Hermann2216d1b2008-03-24 15:47:49 +0000124
Jordan Crouse7249f792008-03-20 00:11:05 +0000125clean:
Stefan Reinauer739a6adb2015-06-30 15:22:12 -0700126 rm -rf build/*.elf build/*.o
Jordan Crouse7249f792008-03-20 00:11:05 +0000127
Uwe Hermann2216d1b2008-03-24 15:47:49 +0000128distclean: clean
Stefan Reinauer739a6adb2015-06-30 15:22:12 -0700129 rm -rf build
130 rm -f .config .config.old ..config.tmp .kconfig.d .tmpconfig*
Jordan Crouse7249f792008-03-20 00:11:05 +0000131
Stefan Reinauer0ab2b252015-06-29 16:10:16 -0700132include $(srck)/Makefile
Jordan Crouse7249f792008-03-20 00:11:05 +0000133
Uwe Hermann2216d1b2008-03-24 15:47:49 +0000134.PHONY: $(PHONY) prepare clean distclean