| # 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. |
| |
| # Location of sel4test sources and binary output files |
| SEL4TEST_SRC_DIR := $(ROOTDIR)/cantrip/projects/sel4test |
| SEL4TEST_OUT_DIR := $(OUT)/sel4test/$(PLATFORM) |
| SEL4TEST_OUT_DEBUG := $(SEL4TEST_OUT_DIR)/debug |
| SEL4TEST_KERNEL_DEBUG := $(SEL4TEST_OUT_DEBUG)/kernel/kernel.elf |
| SEL4TEST_ROOTSERVER_DEBUG := $(SEL4TEST_OUT_DEBUG)/apps/sel4test-driver/sel4test-driver |
| |
| # NB: enables MCS for all runs; might want to run both w/ & w/o MCS |
| # NB: enables PRINTING for all runs; user space doesn't seem to setup the |
| # console properly so we need seL4_DebugPutChar to display test results. |
| SEL4TEST_CMAKE_ARGS := \ |
| -G Ninja \ |
| -DCROSS_COMPILER_PREFIX=$(C_PREFIX) \ |
| -DSIMULATION=TRUE \ |
| -DPLATFORM=${PLATFORM} \ |
| -DKernelPrinting=1 \ |
| -DMCS=ON \ |
| $(SEL4TEST_SRC_DIR) |
| |
| # NB: no Rust code included, sel4test is pure C |
| SEL4TEST_SOURCES := $(shell find \ |
| $(SEL4TEST_SRC_DIR) \ |
| ${SEL4TEST_SRC_DIR}/../sel4runtime \ |
| ${SEL4TEST_SRC_DIR}/../seL4_libs \ |
| ${SEL4TEST_SRC_DIR}/../musllibc \ |
| ${SEL4TEST_SRC_DIR}/../util_libs \ |
| \( -name \*.c -or -name \*.h -or -name \*.cpp \) -type f) |
| |
| sel4test-gen-headers: cantrip-gen-headers |
| |
| $(SEL4TEST_OUT_DEBUG): |
| mkdir -p $(SEL4TEST_OUT_DEBUG) |
| |
| # Generates seltest debug build.ninja |
| ${SEL4TEST_OUT_DEBUG}/build.ninja: ${SEL4TEST_SOURCES} sel4test-gen-headers \ |
| sel4test-build-debug-prepare | ${SEL4TEST_OUT_DEBUG} |
| cmake -B $(SEL4TEST_OUT_DEBUG) \ |
| -DSEL4_CACHE_DIR=$(CACHE)/sel4test-debug \ |
| -DRELEASE=OFF \ |
| ${CANTRIP_EXTRA_CMAKE_OPTS_DEBUG} \ |
| ${SEL4TEST_CMAKE_ARGS} |
| |
| # Generates sel4test debug kernel |
| $(SEL4TEST_KERNEL_DEBUG): ${SEL4TEST_OUT_DEBUG}/build.ninja |
| ninja -C $(SEL4TEST_OUT_DEBUG) kernel.elf |
| |
| # Generates sel4test debug rootserver, requries kernel |
| $(SEL4TEST_ROOTSERVER_DEBUG): ${SEL4TEST_KERNEL_DEBUG} | rust_presence_check |
| SEL4_DIR=$(SEL4_KERNEL_DIR) \ |
| SEL4_OUT_DIR=$(SEL4TEST_OUT_DEBUG)/kernel \ |
| ninja -C $(SEL4TEST_OUT_DEBUG) |
| |
| ## Generates all sel4test debug build artifacts |
| sel4test-bundle-debug: $(SEL4TEST_ROOTSERVER_DEBUG) |
| |
| ## Generates both sel4test & sel4test+wrapper build artifacts |
| # NB: shorthand for testing (sim targets depend on explicit pathnames) |
| sel4test-bundles: sel4test-bundle-debug |
| sel4test-bundles: sel4test-wrapper-bundle-debug |
| |
| ## Cleans all sel4test artifacts |
| sel4test-clean: |
| rm -rf $(OUT)/sel4test |
| rm -rf $(OUT)/sel4test-wrapper |
| |
| |
| # sel4test with C wrappers around the sel4-sys (Rust) crate. This reuses |
| # sel4test build machinery whenever possible. |
| |
| SEL4TEST_WRAPPER_LIBRARY_DIR := $(SEL4TEST_SRC_DIR)/integrations/sel4-sys-wrapper |
| SEL4TEST_WRAPPER_OUT_DIR := $(OUT)/sel4test-wrapper/$(PLATFORM) |
| SEL4TEST_WRAPPER_OUT_DEBUG := $(SEL4TEST_WRAPPER_OUT_DIR)/debug |
| SEL4TEST_WRAPPER_ROOTSERVER_DEBUG := $(SEL4TEST_WRAPPER_OUT_DEBUG)/apps/sel4test-driver/sel4test-driver |
| |
| SEL4TEST_WRAPPER_CMAKE_ARGS := \ |
| -DLibSel4FunctionAttributes=public \ |
| -DLibSel4ExternalLibrary=$(SEL4TEST_WRAPPER_LIBRARY_DIR) \ |
| -DRustTarget=${RUST_TARGET} \ |
| -DRustCFlags="" \ |
| -DRustVersion=${CANTRIP_RUST_VERSION} \ |
| ${SEL4TEST_CMAKE_ARGS} |
| |
| $(SEL4TEST_WRAPPER_OUT_DEBUG): |
| mkdir -p $(SEL4TEST_WRAPPER_OUT_DEBUG) |
| |
| # seltest-wrapper configuration & build.ninja generation |
| # NB: use a release build of the user-space code to workaround memory |
| # exhuastion; the kernel is still built debug to get any platform-specific |
| # configuration (e.g. on shodan the debug memory config). |
| ${SEL4TEST_WRAPPER_OUT_DEBUG}/build.ninja: ${SEL4TEST_SOURCES} \ |
| sel4test-gen-headers sel4test-build-wrapper-debug-prepare | ${SEL4TEST_WRAPPER_OUT_DEBUG} |
| cmake -B $(SEL4TEST_WRAPPER_OUT_DEBUG) \ |
| -DSEL4_CACHE_DIR=$(CACHE)/sel4test-wrapper-debug \ |
| -DRELEASE=ON \ |
| ${CANTRIP_EXTRA_CMAKE_OPTS_DEBUG} \ |
| ${SEL4TEST_WRAPPER_CMAKE_ARGS} |
| |
| # sel4test-wrapper rootserver, requires kernel |
| $(SEL4TEST_WRAPPER_ROOTSERVER_DEBUG): ${SEL4TEST_WRAPPER_OUT_DEBUG}/build.ninja \ |
| ${SEL4TEST_KERNEL_DEBUG} | rust_presence_check |
| SEL4_DIR=$(SEL4_KERNEL_DIR) \ |
| SEL4_OUT_DIR=$(SEL4TEST_OUT_DEBUG)/kernel \ |
| ninja -C $(SEL4TEST_WRAPPER_OUT_DEBUG) |
| |
| ## Generates sel4test build artifacts setup for debug |
| sel4test-wrapper-bundle-debug: $(SEL4TEST_WRAPPER_ROOTSERVER_DEBUG) |
| |
| .PHONY:: sel4test-clean |
| .PHONY:: sel4test-bundle-debug |
| .PHONY:: sel4test-wrapper-bundle-debug |
| .PHONY:: sel4test-build-debug-headers |
| .PHONY:: sel4test-build-wrapper-debug-headers |
| .PHONY:: sel4test-gen-headers |