# Copyright 2022 Google LLC
#
# 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
#
#     https://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.

# CantripOS Test Applications

# NB: these are platform-specific
RUST_TARGET     := unknown
CANTRIP_APP_ARCH   := unknown

# TODO(jtgans): should include from platforms/${PLATFORM}/platform.mk
include $(ROOTDIR)/build/platforms/$(PLATFORM)/cantrip_apps.mk

# C apps

CANTRIP_SRC_C_APP := $(CANTRIP_SRC_DIR)/apps/c
CANTRIP_OUT_C_APP_DEBUG := $(CANTRIP_OUT_DEBUG)/apps/c
CANTRIP_OUT_C_APP_RELEASE := $(CANTRIP_OUT_RELEASE)/apps/c

$(CANTRIP_OUT_C_APP_DEBUG)/%.elf: $(CANTRIP_SRC_C_APP)/%.c $(CANTRIP_KERNEL_DEBUG)
	$(MAKE) -C $(dir $<) \
        LIBSEL4_SRC=$(SEL4_KERNEL_DIR)/libsel4 \
        OUT_CANTRIP=$(CANTRIP_OUT_DEBUG) \
        BUILD_ARCH=${CANTRIP_APP_ARCH} \
        BUILD_ROOT=$(CANTRIP_OUT_C_APP_DEBUG) \
        RUST_TARGET=${RUST_TARGET} \
        BUILD_TYPE=debug
.PRECIOUS:: $(CANTRIP_OUT_C_APP_DEBUG)/%.elf

$(CANTRIP_OUT_C_APP_RELEASE)/%.elf: $(CANTRIP_SRC_C_APP)/%.c $(CANTRIP_KERNEL_RELEASE)
	$(MAKE) -C $(dir $<) \
        LIBSEL4_SRC=$(SEL4_KERNEL_DIR)/libsel4 \
        OUT_CANTRIP=$(CANTRIP_OUT_RELEASE) \
        BUILD_ARCH=${CANTRIP_APP_ARCH} \
        RUST_TARGET=${RUST_TARGET} \
        BUILD_ROOT=$(CANTRIP_OUT_C_APP_RELEASE) \
        BUILD_TYPE=release
.PRECIOUS:: $(CANTRIP_OUT_C_APP_RELEASE)/%.elf

# Rust apps

CANTRIP_SRC_RUST_APP := $(CANTRIP_SRC_DIR)/apps/rust
CANTRIP_OUT_RUST_APP_DEBUG := $(CANTRIP_OUT_DEBUG)/apps/rust
CANTRIP_OUT_RUST_APP_RELEASE := $(CANTRIP_OUT_RELEASE)/apps/rust

# NB: pass SEL4_DIR for sel4-config to find the kernel

$(CANTRIP_OUT_RUST_APP_DEBUG)/%.elf: $(CANTRIP_SRC_RUST_APP)/%.rs $(CANTRIP_KERNEL_DEBUG)
	$(MAKE) -C $(dir $<) \
        OUT_CANTRIP=$(CANTRIP_OUT_DEBUG) \
        SEL4_DIR=$(SEL4_KERNEL_DIR) \
        BUILD_ARCH=${CANTRIP_APP_ARCH} \
        RUST_TARGET=${RUST_TARGET} \
        BUILD_ROOT=$(CANTRIP_OUT_RUST_APP_DEBUG) \
        BUILD_TYPE=debug
.PRECIOUS:: $(CANTRIP_OUT_RUST_APP_DEBUG)/%.elf

$(CANTRIP_OUT_RUST_APP_RELEASE)/%.elf: $(CANTRIP_SRC_RUST_APP)/%.rs $(CANTRIP_KERNEL_RELEASE)
	$(MAKE) -C $(dir $<) \
        OUT_CANTRIP=$(CANTRIP_OUT_RELEASE) \
        SEL4_DIR=$(SEL4_KERNEL_DIR) \
        BUILD_ARCH=${CANTRIP_APP_ARCH} \
        RUST_TARGET=${RUST_TARGET} \
        BUILD_ROOT=$(CANTRIP_OUT_RUST_APP_RELEASE) \
        BUILD_TYPE=release
.PRECIOUS:: $(CANTRIP_OUT_RUST_APP_RELEASE)/%.elf

## Build the hello-world C application in debug mode.
hello_debug_c: $(CANTRIP_OUT_C_APP_DEBUG)/hello/hello.app
## Build the hello-world C application in release mode.
hello_release_c: $(CANTRIP_OUT_C_APP_RELEASE)/hello/hello.app
## Build the hello-world Rust application in debug mode.
hello_debug_rust: $(CANTRIP_OUT_RUST_APP_DEBUG)/hello/hello.app
## Build the hello-world Rust application in release mode.
hello_release_rust: $(CANTRIP_OUT_RUST_APP_RELEASE)/hello/hello.app
## Build the hello-world C and Rust applications in debug mode.
hello_debug: hello_debug_c hello_debug_rust
## Build the hello-world C and Rust applications in release mode.
hello_release: hello_release_c hello_release_rust

## Build the fibonacci C application in debug mode.
fibonacci_debug_c: $(CANTRIP_OUT_C_APP_DEBUG)/fibonacci/fibonacci.app
## Build the fibonacci C application in release mode.
fibonacci_release_c: $(CANTRIP_OUT_C_APP_RELEASE)/fibonacci/fibonacci.app
## Build the fibonacci Rust application in debug mode.
fibonacci_debug_rust: $(CANTRIP_OUT_RUST_APP_DEBUG)/fibonacci/fibonacci.app
## Build the fibonacci Rust application in release mode.
fibonacci_release_rust: $(CANTRIP_OUT_RUST_APP_RELEASE)/fibonacci/fibonacci.app
## Build the Fibonacci C and Rust applications in debug mode.
fibonacci_debug: fibonacci_debug_c fibonacci_debug_rust
## Build the Fibonacci C and Rust applications in release mode.
fibonacci_release: fibonacci_release_c fibonacci_release_rust

## Build the keyval Rust application in debug mode.
keyval_debug: $(CANTRIP_OUT_RUST_APP_DEBUG)/keyval/keyval.app
## Build the keyval Rust application in release mode.
keyval_release: $(CANTRIP_OUT_RUST_APP_RELEASE)/keyval/keyval.app

## Build the logtest Rust application in debug mode.
logtest_debug: $(CANTRIP_OUT_RUST_APP_DEBUG)/logtest/logtest.app
## Build the logtest Rust application in release mode.
logtest_release: $(CANTRIP_OUT_RUST_APP_RELEASE)/logtest/logtest.app

## Build the mltest Rust application in debug mode.
mltest_debug: $(CANTRIP_OUT_RUST_APP_DEBUG)/mltest/mltest.app
## Build the mltest Rust application in release mode.
mltest_release: $(CANTRIP_OUT_RUST_APP_RELEASE)/mltest/mltest.app

## Build the panic Rust application in debug mode.
panic_debug: $(CANTRIP_OUT_RUST_APP_DEBUG)/panic/panic.app
## Build the panic Rust application in release mode.
panic_release: $(CANTRIP_OUT_RUST_APP_RELEASE)/panic/panic.app

## Build the playback Rust application in debug mode.
playback_debug: $(CANTRIP_OUT_RUST_APP_DEBUG)/playback/playback.app
## Build the playback Rust application in release mode.
playback_release: $(CANTRIP_OUT_RUST_APP_RELEASE)/playback/playback.app

## Build the sound Rust application in debug mode.
sound_debug: $(CANTRIP_OUT_RUST_APP_DEBUG)/sound/sound.app
## Build the sound Rust application in release mode.
sound_release: $(CANTRIP_OUT_RUST_APP_RELEASE)/sound/sound.app

## Build the suicide C application in debug mode.
suicide_debug: $(CANTRIP_OUT_C_APP_DEBUG)/suicide/suicide.app
## Build the suicide C application in release mode.
suicide_release: $(CANTRIP_OUT_C_APP_RELEASE)/suicide/suicide.app

## Build the timer Rust application in debug mode.
timer_debug: $(CANTRIP_OUT_RUST_APP_DEBUG)/timer/timer.app
## Build the timer Rust application in release mode.
timer_release: $(CANTRIP_OUT_RUST_APP_RELEASE)/timer/timer.app

.PHONY:: hello_debug hello_release
.PHONY:: fibonacci_debug fibonacci_release
.PHONY:: keyval_debug keyval_release
.PHONY:: logtest_debug logtest_release
.PHONY:: mltest_debug mltest_release
.PHONY:: panic_debug panic_release
.PHONY:: playback_debug playback_release
.PHONY:: sound_debug sound_release
.PHONY:: suicide_debug suicide_release
.PHONY:: timer_debug timer_release
