First, remove a deprecated flag that gcc no longer recognizes. Second, disable suffix based implicit makefile rules. These, in combination with the %.o: boot.S rule, were tricking make into deleting it's own makefile. How, you might ask? make wants to update its makefile, since that's a thing it does automatically. This is useful if you, for instance, have computed header dependencies. make decides it can make a file called "makefile" from a file called "makefile.o" by doing a linking step. make decides it can make makefile.o from boot.S from the %.o: boot.S rule, which it does. It then attempts to link makefile.o into makefile, but that fails because it lacks a "main" function since it's using a built in rule which doesn't know not to expect main. The makefile is clobbered in the process. make then deletes makefile.o because it was an implicit target, eliminating all the evidence. Change-Id: Ib0dfc333dc554caf5772dd8468dba6ba821f98ac Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/24329 Reviewed-by: Chun-Chen TK Hsu <chunchenhsu@google.com> Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com> Tested-by: kokoro <noreply+kokoro@google.com>
79 lines
2.8 KiB
Makefile
79 lines
2.8 KiB
Makefile
# Copyright (c) 2019-2020 ARM Limited
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are
|
|
# met: redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer;
|
|
# redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution;
|
|
# neither the name of the copyright holders nor the names of its
|
|
# contributors may be used to endorse or promote products derived from
|
|
# this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
CROSS_COMPILE = aarch64-linux-gnu-
|
|
CC = $(CROSS_COMPILE)gcc
|
|
LD = $(CROSS_COMPILE)ld
|
|
|
|
.SUFFIXES:
|
|
|
|
BUILDDIR = .
|
|
DESTDIR = $(error Please set DESTDIR to wanted installation directory)
|
|
|
|
CFLAGS = -march=armv8-a
|
|
CPPFLAGS = -DPHYS_OFFSET=0x80000000 -DCNTFRQ=0x01800000 \
|
|
-DUART_BASE=0x1c090000 -DSYSREGS_BASE=0x1c010000 \
|
|
-Dkernel=0x80080000 \
|
|
-Dmbox=0x8000fff8 -Ddtb=0x80000100
|
|
|
|
LDFLAGS = -N -Ttext 0x00000010 -static
|
|
|
|
.PHONY: all clean install mkdir
|
|
|
|
all: mkdir $(BUILDDIR)/boot_emm.arm64 \
|
|
$(BUILDDIR)/boot.arm64 \
|
|
$(BUILDDIR)/boot_v2.arm64
|
|
|
|
#v1 has a GIC V2
|
|
$(BUILDDIR)/boot_emm.o: CPPFLAGS += -UGICV3 -DGIC_CPU_BASE=0x2c002000 \
|
|
-DGIC_DIST_BASE=0x2c001000
|
|
$(BUILDDIR)/boot.o: CPPFLAGS += -UGICV3 -DGIC_CPU_BASE=0x2c002000 \
|
|
-DGIC_DIST_BASE=0x2c001000
|
|
|
|
#V2 has a GIC V3
|
|
$(BUILDDIR)/boot_v2.o: CPPFLAGS += -DGICV3 -DGIC_REDIST_BASE=0x2c010000 \
|
|
-DGIC_DIST_BASE=0x2c000000
|
|
|
|
$(BUILDDIR)/%.arm64: $(BUILDDIR)/%.o
|
|
$(LD) -o $@ $< $(LDFLAGS)
|
|
|
|
$(BUILDDIR)/%.o: boot.S
|
|
$(CC) $(CPPFLAGS) -c $< -o $@ $(CFLAGS)
|
|
|
|
install:
|
|
mkdir -p $(DESTDIR)
|
|
install -m 644 $(BUILDDIR)/boot_emm.arm64 \
|
|
$(BUILDDIR)/boot.arm64 \
|
|
$(BUILDDIR)/boot_v2.arm64 \
|
|
$(DESTDIR)/.
|
|
|
|
mkdir:
|
|
mkdir -p $(BUILDDIR)
|
|
|
|
clean:
|
|
rm -f $(BUILDDIR)/*.o
|
|
rm -f $(BUILDDIR)/boot_emm.arm64 $(BUILDDIR)/boot.arm64 $(BUILDDIR)/boot_v2.arm64
|