# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
#
# This is the main Makefile
#
# Copyright 2013-2019 IBM Corp

# Target tools
CC=$(CROSS)gcc$(POSTFIX)
LD=$(CROSS)ld$(POSTFIX)
AS=$(CROSS)as
AR=$(CROSS)ar
NM=$(CROSS)nm
OBJCOPY=$(CROSS)objcopy
OBJDUMP=$(CROSS)objdump
SIZE=$(CROSS)size
LD_TEXT=0x0
NM += --synthetic

try = $(shell set -e; if ($(1)) >/dev/null 2>&1; \
	then echo "$(2)"; \
	else echo "$(3)"; fi )

try-cflag = $(call try,$(1) -Werror $(2) -x c -c /dev/null -o /dev/null,$(2))
try-ldflag = $(call try,$(1) $(2) -v,$(2))
test_cflag = $(call try,$(1) -Werror $(2) -x c -c /dev/null -o /dev/null,1,0)

cc-name := $(shell $(CC) -v 2>&1 | grep -q "clang version" && echo clang || echo gcc)

# Base warnings
CWARNS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
	  -Werror-implicit-function-declaration -Wdeclaration-after-statement \
	  -Wno-pointer-sign -Wextra -Wno-sign-compare \
	  -Wmissing-prototypes -Wmissing-declarations \
	  -Wwrite-strings -Wcast-align \
	  -Winit-self

# Do not convert warnings to error on tagged/released version
GIT_DIR ?= $(shell test -e $(SRC)/.git && echo 1 || echo 0)
ifeq ($(GIT_DIR),1)	# Building from git tree
GIT_SHA ?= $(shell cd $(SRC); git describe --tags 2>/dev/null)
GIT_TAG ?= $(shell cd $(SRC); git tag -l 2>/dev/null | grep -x ${GIT_SHA} >/dev/null 2>&1 && echo 1 || echo 0)
ifneq ($(GIT_TAG),1)	# Development branch
CWARNS += -Werror
endif
endif

# clang tends to emit more warnings so stop those breaking the build for now
ifeq ($(cc-name),clang)
CWARNS += -Wno-error
endif

# Host tools and options
HOSTCC=gcc
HOSTEND=$(shell uname -m | sed -e 's/^i.*86$$/LITTLE/' -e 's/^x86.*/LITTLE/' -e 's/^ppc64le/LITTLE/' -e 's/^ppc.*/BIG/' -e 's/^riscv.*/LITTLE/')
HOSTCFLAGS:=-O1 $(CWARNS) -DHAVE_$(HOSTEND)_ENDIAN -MMD
HOSTCFLAGS += $(call try-cflag,$(HOSTCC),-std=gnu11)
HOSTCFLAGS += $(call try-cflag,$(HOSTCC),-m64)
HOSTCFLAGS += $(call try-cflag,$(HOSTCC),-Wjump-misses-init) \
	  $(call try-cflag,$(HOSTCC),-Wsuggest-attribute=const) \
	  $(call try-cflag,$(HOSTCC),-Wsuggest-attribute=noreturn) \
	  $(call try-cflag,$(HOSTCC),-Wno-error=suggest-attribute=const) \
	  $(call try-cflag,$(HOSTCC),-Wno-error=suggest-attribute=noreturn)
HOSTCFLAGS += -DDEBUG -DCCAN_LIST_DEBUG

# We want small stack usage for skiboot
CWARNS += -Wframe-larger-than=1024

HOSTGCOVCFLAGS = -fprofile-arcs -ftest-coverage -lgcov -O0 -g -pg

VALGRIND := valgrind -q --show-reachable=yes --error-exitcode=99

# Target options

OPTS=-Os
DBG=-g

CPPFLAGS := -I$(SRC)/include -Iinclude -MMD -include $(SRC)/include/config.h
CPPFLAGS += -I$(SRC)/libfdt -I$(SRC)/libflash -I$(SRC)/libxz -I$(SRC)/libc/include -I$(SRC)
CPPFLAGS += -I$(SRC)/libpore -I$(SRC)/libmctp
CPPFLAGS += -D__SKIBOOT__ -nostdinc
CPPFLAGS += -isystem $(shell $(CC) -print-file-name=include)
CPPFLAGS += -DBITS_PER_LONG=64

# We might want to remove our copy of stdint.h
# but that means uint64_t becomes an ulong instead of an ullong
# causing all our printf's to warn
CPPFLAGS += -ffreestanding

ifeq ($(LITTLE_ENDIAN),1)
CPPFLAGS += -DHAVE_LITTLE_ENDIAN
CPPFLAGS += -D__LITTLE_ENDIAN_BITFIELD
else
CPPFLAGS += -DHAVE_BIG_ENDIAN
CPPFLAGS += -D__BIG_ENDIAN_BITFIELD
endif

ifeq ($(DEBUG),1)
CPPFLAGS += -DDEBUG -DCCAN_LIST_DEBUG
endif

CFLAGS := -fno-strict-aliasing -pie -fpie -fno-pic -m64 -fno-asynchronous-unwind-tables
ifeq ($(CONFIG_P8),1)
CFLAGS += -mcpu=power8
else
CFLAGS += -mcpu=power9
endif
CFLAGS += -Wl,--oformat,elf64-powerpc -ggdb
# r13,r14,r15 are preserved for OS to use as fixed registers.
# These could be saved and restored in and out of skiboot, but it's more
# robust to avoid touching them.
CFLAGS += -ffixed-r13
CFLAGS += -ffixed-r14
CFLAGS += -ffixed-r15
# r16 is skiboot's per-CPU data pointer.
CFLAGS += -ffixed-r16
CFLAGS += $(call try-cflag,$(CC),-std=gnu11)

ifeq ($(LITTLE_ENDIAN),1)
CFLAGS += -mlittle-endian
else
CFLAGS += -mbig-endian
endif

ifeq ($(ELF_ABI_v2),1)
CFLAGS += $(call try-cflag,$(CC),-mabi=elfv2)
else
CFLAGS += $(call try-cflag,$(CC),-mabi=elfv1)
endif

ifeq ($(DEAD_CODE_ELIMINATION),1)
CFLAGS += -ffunction-sections -fdata-sections
endif

ifeq ($(SKIBOOT_GCOV),1)
CFLAGS += -fprofile-arcs -ftest-coverage -DSKIBOOT_GCOV=1
endif

ifeq ($(USE_VALGRIND),1)
CFLAGS += -DUSE_VALGRIND=1
else
VALGRIND :=
endif

# Check if the new parametrized stack protector option is supported
# by gcc, otherwise disable stack protector
STACK_PROT_CFLAGS := -mstack-protector-guard=tls -mstack-protector-guard-reg=r16
STACK_PROT_CFLAGS += -mstack-protector-guard-offset=0
HAS_STACK_PROT := $(call test_cflag,$(CC),$(STACK_PROT_CFLAGS))

ifeq ($(STACK_CHECK),1)
STACK_PROT_CFLAGS += -fstack-protector-all
CPPFLAGS += -DSTACK_CHECK_ENABLED
CFLAGS += -pg
else
STACK_PROT_CFLAGS += -fstack-protector
STACK_PROT_CFLAGS += $(call try-cflag,$(CC),-fstack-protector-strong)
endif

ifeq ($(HAS_STACK_PROT),1)
CPPFLAGS += -DHAS_STACK_PROT
CFLAGS += $(STACK_PROT_CFLAGS)
else
CFLAGS += -fno-stack-protector
endif

# Add preprocessor defines for CONFIG_ options here
ifeq ($(CONFIG_P8),1)
CFLAGS += -DCONFIG_P8=1
endif
ifeq ($(CONFIG_PLDM),1)
CFLAGS += -DCONFIG_PLDM=1
endif

CFLAGS += $(call try-cflag,$(CC),-Wjump-misses-init) \
	  $(call try-cflag,$(CC),-Wsuggest-attribute=const) \
	  $(call try-cflag,$(CC),-Wsuggest-attribute=noreturn) \
	  $(call try-cflag,$(CC),-Wno-error=suggest-attribute=const) \
	  $(call try-cflag,$(CC),-Wno-error=suggest-attribute=noreturn) \
	  $(call try-cflag,$(CC),-Wstack-usage=1024) \
	  $(call try-cflag,$(CC),-Wno-error=array-bounds) \
	  $(call try-cflag,$(CC),-Wno-error=stringop-overread) \
	  $(call try-cflag,$(CC),-Wno-error=address-of-packed-member)

CFLAGS += $(CWARNS) $(OPTS) $(DBG)

LDFLAGS := -m64 -static -nostdlib -pie 
LDFLAGS += -Wl,-pie
LDFLAGS += -Wl,-Ttext-segment,$(LD_TEXT) -Wl,-N -Wl,--build-id=none
LDFLAGS += -Wl,--no-multi-toc
ifeq ($(CONFIG_P8),1)
LDFLAGS += -mcpu=power8
else
LDFLAGS += -mcpu=power9
endif
LDFLAGS += -Wl,--oformat,elf64-powerpc
LDFLAGS_FINAL = -m elf64lppc --no-multi-toc -N --build-id=none --whole-archive
LDFLAGS_FINAL += -static -nostdlib -pie -Ttext-segment=$(LD_TEXT) --oformat=elf64-powerpc
LDFLAGS_FINAL += --orphan-handling=warn
LDFLAGS_FINAL += $(call try-ldflag,$(LD),--no-warn-rwx-segments)

LDRFLAGS=-melf64ppc
# Debug stuff
#LDFLAGS += -Wl,-v -Wl,-Map,foomap 

ifeq ($(LITTLE_ENDIAN),1)
LDFLAGS += -mlittle-endian
LDFLAGS_FINAL += -EL
else
LDFLAGS += -mbig-endian
LDFLAGS_FINAL += -EB
endif

ifeq ($(DEAD_CODE_ELIMINATION),1)
LDFLAGS += -Wl,--gc-sections
LDFLAGS_FINAL += --gc-sections
endif

AFLAGS := -D__ASSEMBLY__ -m64
ifeq ($(LITTLE_ENDIAN),1)
AFLAGS += -mlittle-endian
else
AFLAGS += -mbig-endian
endif

ifeq ($(ELF_ABI_v2),1)
AFLAGS += $(call try-cflag,$(CC),-mabi=elfv2)
else
AFLAGS += $(call try-cflag,$(CC),-mabi=elfv1)
endif

ifeq ($(cc-name),clang)
CLANG_TARGET    := --target=powerpc64-linux-gnu -mcpu=pwr8
GCC_TOOLCHAIN   := $(realpath $(dir $(shell which $(LD)))/..)
ifneq ($(GCC_TOOLCHAIN),)
CLANG_GCC_TC    := --gcc-toolchain=$(GCC_TOOLCHAIN)
endif
CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
LDFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)

# Workarounds
# TODO: Fix the issues these hide, and remove them
CFLAGS += -Wno-cast-align \
	-Wno-unused-command-line-argument \
	-Wno-unknown-warning-option \
	-Wno-gnu-variable-sized-type-not-at-end \
	-Wno-address-of-packed-member \
	-Wno-error=ignored-attributes

# pci_add_device_nodes is the largest, at 2048 with clang-7 (smaller with older
# versions)
CFLAGS += -Wframe-larger-than=2048
endif

# Special tool flags:
# Do not use the floating point unit
CFLAGS += -msoft-float
# Do not use string instructions
CFLAGS += $(call try-cflag,$(CC),-mno-string)
# do not use load/store multiple word instrcutions
CFLAGS += $(call try-cflag,$(CC),-mno-multiple)
# Do not use any automatic vector foo. While it would be safe during boot, we
# don't save/restore across OPAL calls
CFLAGS += -mno-vsx -mno-altivec

# Do not use load/store update. You REALLY do not want to use this!
# The async safety of the ABI stack depends on the atomicity
# of update on store.
#CFLAGS += -mno-update

ifneq ($(KERNEL),)
CPPFLAGS += -DBUILTIN_KERNEL="\"$(KERNEL)\""
endif

CHECK		= sparse
CHECKFLAGS     := $(CF)
CHECK_CFLAGS_SKIP = -std=gnu11

.SECONDARY:

vpath %.c $(SRC)
vpath %.C $(SRC)
vpath %.S $(SRC)

default: all

include/asm-offsets.h: asm/asm-offsets.s
	@mkdir -p include
	$(call Q,GN, $(SRC)/make_offsets.sh $< >$@, $@)

TARGET = skiboot

include $(SRC)/asm/Makefile.inc
include $(SRC)/core/Makefile.inc
include $(SRC)/hw/Makefile.inc
include $(SRC)/platforms/Makefile.inc
include $(SRC)/libfdt/Makefile.inc
include $(SRC)/libflash/Makefile.inc
include $(SRC)/libxz/Makefile.inc
include $(SRC)/libpore/Makefile.inc
include $(SRC)/libc/Makefile.inc
include $(SRC)/ccan/Makefile.inc
include $(SRC)/$(DEVSRC)/Makefile.inc
include $(SRC)/libstb/Makefile.inc
ifeq ($(CONFIG_PLDM),1)
include $(SRC)/libmctp/Makefile.inc
include $(SRC)/pldm/libpldm/Makefile.inc
include $(SRC)/pldm/libpldm/oem/ibm/Makefile.inc
endif

# hack for travis-ci and coverity
gard:
	(cd external/gard; CROSS_COMPILE="" CFLAGS="$(HOSTCFLAGS) $(HOSTGCOVCFLAGS)" make)

coverage: gard-coverage
gard-coverage:
	(cd external/gard; CROSS_COMPILE="" CFLAGS="$(HOSTCFLAGS) $(HOSTGCOVCFLAGS)" make coverage)

pflash:
	(cd external/pflash; CROSS_COMPILE="" CFLAGS="$(HOSTCFLAGS) $(HOSTGCOVCFLAGS)" make)

coverage: pflash-coverage
pflash-coverage:
	(cd external/pflash; CROSS_COMPILE="" CFLAGS="$(HOSTCFLAGS) $(HOSTGCOVCFLAGS)" make coverage)

pflash-coverity:
	(cd external/pflash; ./build-all-arch.sh)

all: $(SUBDIRS) $(TARGET).lid $(TARGET).lid.xz $(TARGET).map extract-gcov
all: $(TARGET).lid.stb $(TARGET).lid.xz.stb

OBJS := $(ASM) $(CORE) $(HW) $(PLATFORMS) $(LIBFDT) $(LIBXZ) $(LIBFLASH) $(LIBSTB)
OBJS += $(LIBC) $(CCAN) $(DEVSRC_OBJ) $(LIBPORE)
ifeq ($(CONFIG_PLDM),1)
OBJS += $(LIBMCTP) $(LIBPLDM) $(LIBPLDM_IBM)
endif
OBJS_NO_VER = $(OBJS)
ALL_OBJS = $(OBJS) version.o

ALL_OBJS_1 = $(TARGET).tmp.a asm/dummy_map.o
ALL_OBJS_2 = $(TARGET).tmp.a asm/real_map.o

%.lid.xz: %.lid
	$(call Q,XZ, cat $^ | xz -9 -C crc32 > $@, $@)

%.lid: %.elf
	$(call Q,OBJCOPY, $(OBJCOPY) -O binary -S $^ $@, $@)

$(TARGET).lid.stb: $(TARGET).lid libstb/create-container
	$(call Q,STB-DEVELOPMENT-SIGNED-CONTAINER,$(SRC)/libstb/sign-with-local-keys.sh $< $@ $(SRC)/libstb/keys/ PAYLOAD,$@)

$(TARGET).lid.xz.stb: $(TARGET).lid.xz libstb/create-container
	$(call Q,STB-DEVELOPMENT-SIGNED-CONTAINER,$(SRC)/libstb/sign-with-local-keys.sh $< $@ $(SRC)/libstb/keys/ PAYLOAD,$@)

$(TARGET).tmp.a: $(ALL_OBJS)
	@rm -f $(TARGET).tmp.a
	$(call Q,AR, $(AR) rcsTPD $@ $(ALL_OBJS), $@)

$(TARGET).tmp.elf: $(ALL_OBJS_1) $(TARGET).lds $(KERNEL)
	$(call Q,LD, $(LD) $(LDFLAGS_FINAL) -o $@ -T $(TARGET).lds $(ALL_OBJS_1), $@)

asm/real_map.o : $(TARGET).tmp.map

$(TARGET).elf: $(ALL_OBJS_2) $(TARGET).lds $(KERNEL)
	$(call Q,LD, $(LD) $(LDFLAGS_FINAL) -o $@ -T $(TARGET).lds $(ALL_OBJS_2), $@)

$(SUBDIRS):
	$(call Q,MKDIR,mkdir -p $@, $@)

-include $(wildcard *.d)
-include $(wildcard $(SUBDIRS:%=%/*.d))

# Set V=1 if you want to see everything.
include $(SRC)/Makefile.rules

VERSION ?= $(shell cd $(SRC); GIT_DIR=$(SRC)/.git $(SRC)/make_version.sh)

.PHONY: VERSION-always
.version: VERSION-always
	@echo $(VERSION) > $@.tmp
	@cmp -s $@ $@.tmp || cp $@.tmp $@
	@rm -f $@.tmp

version.c: $(SRC)/make_version.sh $(OBJS_NO_VER) .version
	@(if [ "a$(VERSION)" = "a" ]; then \
		echo "#error You need to set SKIBOOT_VERSION environment variable" > $@ ;\
        else \
		echo "extern const char version[];"; \
                echo "const char version[] = \"$(VERSION)\";" ;\
        fi) > $@

.PHONY: coverage
include $(shell find $(SRC)/* -name Makefile.check)

extract-gcov: extract-gcov.c
	$(call Q, HOSTCC ,$(HOSTCC) $(HOSTCFLAGS) \
	-DTARGET__GNUC__=`echo '__GNUC__'|$(CC) -E -|grep -v '^#'` \
	-DTARGET__GNUC_MINOR__=`echo '__GNUC_MINOR__'|$(CC) -E -|grep -v '^#'` \
	-Wpadded -O0 -g -I$(SRC) -o $@ $<,$<)

coverage-report: skiboot.info
	genhtml --branch-coverage -q -o $@ $<

# A rather nasty hack here that relies on the lcov file format
external/pflash/pflash.info: coverage
	(cd external/pflash; lcov -q -c -d . -o pflash.info --rc lcov_branch_coverage=1; sed -i -e 's%external/pflash/libflash%libflash%; s%external/pflash/ccan%ccan%' pflash.info)
external/gard/gard.info: coverage
	(cd external/gard; lcov -q -c -d . -o gard.info --rc lcov_branch_coverage=1; sed -i -e 's%external/gard/libflash%libflash%; s%external/gard/ccan%ccan%' gard.info)

skiboot.info: coverage external/pflash/pflash.info external/gard/gard.info
	lcov -q -c -d . $(LCOV_DIRS) -o $@ --rc lcov_branch_coverage=1
	lcov -q -r $@ 'external/pflash/*' -o $@
	lcov -q -r $@ 'external/gard/*' -o $@
	lcov -q -a $@ -a external/pflash/pflash.info -o $@
	lcov -q -a $@ -a external/gard/gard.info -o $@
	lcov -q -r $@ $(LCOV_EXCLUDE) -o $@ --rc lcov_branch_coverage=1

doc:
	make -C doc html

tags:
	find . -name '*.[chS]' | xargs ctags

TAGS:
	find . -name '*.[chS]' | xargs etags

.PHONY: tags TAGS check coverage doc

cscope:
	find . -name '*.[chS]' | xargs cscope

clean:
	$(RM) *.[odsa] $(SUBDIRS:%=%/*.[odsa])
	$(RM) *.gcno $(SUBDIRS:%=%/*.gcno)
	$(RM) *.gcda $(SUBDIRS:%=%/*.gcda)
	$(RM) *.elf $(TARGET).lid *.map $(TARGET).lds $(TARGET).lid.xz
	$(RM) include/asm-offsets.h version.c .version
	$(RM) skiboot.info external/gard/gard.info external/pflash/pflash.info
	$(RM) extract-gcov $(TARGET).lid.stb $(TARGET).lid.xz.stb

distclean: clean
	$(RM) *~ $(SUBDIRS:%=%/*~) include/*~

