# Makefile - IP 15.4 test Makefile for nano and micro kernel

#
# Copyright (c) 2015 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

PIPE_BASE=/tmp/ip-15-4

ifeq ($(MAKECMDGOALS),qemu1)
	QEMU_NUM=1
endif
ifeq ($(MAKECMDGOALS),qemu1monitor)
	QEMU_NUM=1
endif
ifeq ($(MAKECMDGOALS),qemu2)
	QEMU_NUM=2
endif
ifeq ($(MAKECMDGOALS),qemu2monitor)
	QEMU_NUM=2
endif
ifdef QEMU_NUM
	QEMU_EXTRA_FLAGS += -serial none -serial pipe:${PIPE_BASE}-${QEMU_NUM} -pidfile qemu-${QEMU_NUM}.pid
endif

PIPE1_IN=${PIPE_BASE}-1.in
PIPE1_OUT=${PIPE_BASE}-1.out
PIPE2_IN=${PIPE_BASE}-2.in
PIPE2_OUT=${PIPE_BASE}-2.out

.PHONY: remove_pipes
remove_pipes:
	rm -f ${PIPE1_IN} ${PIPE1_OUT} ${PIPE2_IN} ${PIPE2_OUT}

${PIPE1_IN}:
	mkfifo $@

${PIPE1_OUT}:
	mkfifo $@

${PIPE2_IN}:
	mkfifo $@

${PIPE2_OUT}:
	mkfifo $@

.PHONY: PIPE2_IN_LINK
PIPE2_IN_LINK: ${PIPE1_IN}
	-ln ${PIPE1_IN} ${PIPE2_OUT}

.PHONY: PIPE2_OUT_LINK
PIPE2_OUT_LINK: ${PIPE1_OUT}
	-ln ${PIPE1_OUT} ${PIPE2_IN}

SINGLE_CONFIG_OPTIONS="CONFIG_NETWORKING_WITH_15_4_LOOPBACK=y"

.PHONY: set_options_default
set_options_default:
	echo "${SINGLE_CONFIG_OPTIONS}" >> ${DOTCONFIG}

# Setup the single qemu test case (one qemu using loopback driver)
qemu0: $(DOTCONFIG)
	$(Q)$(call zephyrmake,$(O),qemu)

# Setup the dual qemu test case (two qemus passing data between them)
.PHONY: setup_pipes_dual
setup_pipes_dual: ${PIPE1_IN} ${PIPE1_OUT} PIPE2_IN_LINK PIPE2_OUT_LINK

# Setup the dual qemu test case with pcap support (two qemus passing data
# between them and saving data to pcap via help of monitor applicaiton)
.PHONY: setup_pipes_dual_monitor
setup_pipes_dual_monitor: ${PIPE1_IN} ${PIPE1_OUT} ${PIPE2_IN} ${PIPE2_OUT}

DUAL_CONFIG_OPTIONS="CONFIG_NETWORKING_WITH_15_4_LOOPBACK_UART=y"

.PHONY: set_options
set_options:
	echo "${DUAL_CONFIG_OPTIONS}" >> ${DOTCONFIG}

export QEMU_NUM
export QEMU_EXTRA_FLAGS

qemu1: setup_pipes_dual $(DOTCONFIG) set_options
	$(Q)$(call zephyrmake,$(O),qemu)

qemu2: setup_pipes_dual $(DOTCONFIG) set_options
	$(Q)$(call zephyrmake,$(O),qemu)

qemu1monitor: setup_pipes_dual_monitor $(DOTCONFIG) set_options
	$(Q)$(call zephyrmake,$(O),qemu)

qemu2monitor: setup_pipes_dual_monitor $(DOTCONFIG) set_options
	$(Q)$(call zephyrmake,$(O),qemu)
