# SPDX-License-Identifier: GPL-2.0
# Makefile for powerpc selftests

# ARCH can be overridden by the user for cross compiling
ARCH ?= $(shell uname -m)
ARCH := $(shell echo $(ARCH) | sed -e s/ppc.*/powerpc/)

ifeq ($(ARCH),powerpc)

GIT_VERSION = $(shell git describe --always --long --dirty || echo "unknown")

CFLAGS := -std=gnu99 -O2 -Wall -Werror -DGIT_VERSION='"$(GIT_VERSION)"' -I$(CURDIR)/include $(CFLAGS)

export CFLAGS

SUB_DIRS = alignment		\
	   benchmarks		\
	   cache_shape		\
	   copyloops		\
	   dexcr		\
	   dscr			\
	   mm			\
	   nx-gzip		\
	   pmu			\
	   signal		\
	   primitives		\
	   stringloops		\
	   switch_endian	\
	   syscalls		\
	   tm			\
	   eeh			\
	   vphn         \
	   math		\
	   papr_attributes	\
	   papr_vpd		\
	   papr_sysparm		\
	   ptrace	\
	   security	\
	   mce

endif

all: $(SUB_DIRS)

$(SUB_DIRS):
	BUILD_TARGET=$(OUTPUT)/$@; mkdir -p $$BUILD_TARGET; $(MAKE) OUTPUT=$$BUILD_TARGET -k -C $@ all

include ../lib.mk

override define RUN_TESTS
	+@for TARGET in $(SUB_DIRS); do \
		BUILD_TARGET=$(OUTPUT)/$$TARGET;	\
		$(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET run_tests;\
	done;
endef

override define INSTALL_RULE
	+@for TARGET in $(SUB_DIRS); do \
		BUILD_TARGET=$(OUTPUT)/$$TARGET;	\
		$(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET install;\
	done;
endef

emit_tests:
	+@for TARGET in $(SUB_DIRS); do \
		BUILD_TARGET=$(OUTPUT)/$$TARGET;	\
		$(MAKE) OUTPUT=$$BUILD_TARGET -s -C $$TARGET $@;\
	done;

override define CLEAN
	+@for TARGET in $(SUB_DIRS); do \
		BUILD_TARGET=$(OUTPUT)/$$TARGET;	\
		$(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET clean; \
	done;
	rm -f tags
endef

tags:
	find . -name '*.c' -o -name '*.h' | xargs ctags

.PHONY: tags $(SUB_DIRS) emit_tests
