blob: 4dd78eb9b1a3ed4d95099dbcae0151fefbb7752a [file] [log] [blame] [edit]
# 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.
# Built-in applications. Platforms typically override these settings
# depending on their functionality (e.g. platforms with ML support
# set CANTRIP_MODEL_*).
CANTRIP_APPS_RELEASE := $(CANTRIP_OUT_C_APP_RELEASE)/hello/hello.app
CANTRIP_APPS_DEBUG := $(CANTRIP_OUT_C_APP_DEBUG)/hello/hello.app
CANTRIP_MODEL_RELEASE :=
CANTRIP_MODEL_DEBUG :=
CANTRIP_SCRIPTS :=
EXT_BUILTINS_DEBUG=$(CANTRIP_OUT_DEBUG)/ext_builtins.cpio
EXT_BUILTINS_RELEASE=$(CANTRIP_OUT_RELEASE)/ext_builtins.cpio
# TODO(jtgans): should include from platforms/${PLATFORM}/platform.mk
include $(ROOTDIR)/build/platforms/$(PLATFORM)/cantrip_builtins.mk
CPIO ?= cpio
BUILTINS_CPIO_OPTS := -H newc -L --no-absolute-filenames --reproducible --owner=root:root
$(CANTRIP_OUT_RELEASE)/builtins: \
$(CANTRIP_APPS_RELEASE) \
$(CANTRIP_MODEL_RELEASE) \
${CANTRIP_SCRIPTS} \
${ROOTDIR}/build/cantrip_builtins.mk \
${ROOTDIR}/build/platforms/${PLATFORM}/cantrip_builtins.mk
rm -rf $@
mkdir -p $@
cp $(CANTRIP_APPS_RELEASE) $(CANTRIP_MODEL_RELEASE) ${CANTRIP_SCRIPTS} $@
$(CANTRIP_OUT_DEBUG)/builtins: \
$(CANTRIP_APPS_DEBUG) \
$(CANTRIP_MODEL_DEBUG) \
${CANTRIP_SCRIPTS} \
${ROOTDIR}/build/cantrip_builtins.mk \
${ROOTDIR}/build/platforms/${PLATFORM}/cantrip_builtins.mk
rm -rf $@
mkdir -p $@
cp $(CANTRIP_APPS_DEBUG) $(CANTRIP_MODEL_DEBUG) ${CANTRIP_SCRIPTS} $@
# Dredge platform config for space allocated to hold builtins bundle;
# this is used below to check the constructed bundle fits.
CPIO_SIZE_BYTES=$(shell awk '/^#define[ \t]+CPIO_SIZE_BYTES/ { print strtonum($$3) }' \
$(CANTRIP_SRC_DIR)/apps/system/platforms/${PLATFORM}/platform.camkes)
$(EXT_BUILTINS_RELEASE): $(CANTRIP_OUT_RELEASE)/builtins
ls -1 $< | $(CPIO) -o -D $< $(BUILTINS_CPIO_OPTS) -O "$@"
builtins_size=$$(ls -l $@ | awk '{ print $$5; }'); \
test "$${builtins_size}" -gt "${CPIO_SIZE_BYTES}" && {\
echo "Builtins bundle too big: $${builtins_size} > ${CPIO_SIZE_BYTES}"; \
exit 1; \
} || { exit 0; }
$(EXT_BUILTINS_DEBUG): $(CANTRIP_OUT_DEBUG)/builtins
ls -1 $< | $(CPIO) -o -D $< $(BUILTINS_CPIO_OPTS) -O "$@"
builtins_size=$$(ls -l $@ | awk '{ print $$5; }'); \
test "$${builtins_size}" -gt "${CPIO_SIZE_BYTES}" && {\
echo "Builtins bundle too big: $${builtins_size} > ${CPIO_SIZE_BYTES}"; \
exit 1; \
} || { exit 0; }
## Generates cpio archive of Cantrip builtins with debugging suport
cantrip-builtins-debug: $(EXT_BUILTINS_DEBUG)
## Generates cpio archive of Cantrip builtins for release
cantrip-builtins-release: $(EXT_BUILTINS_RELEASE)
## Generates both debug & release cpio archives of Cantrip builtins
cantrip-builtins: cantrip-builtins-debug cantrip-builtins-release
# TODO(sleffler): clean intermedite build artifacts (platform specific)
cantrip-builtins-clean-debug:
rm -rf $(CANTRIP_OUT_DEBUG)/apps
rm -rf $(CANTRIP_OUT_DEBUG)/builtins
rm -f $(CANTRIP_OUT_DEBUG)/ext_builtins.cpio
cantrip-builtins-clean-release:
rm -rf $(CANTRIP_OUT_RELEASE)/apps
rm -rf $(CANTRIP_OUT_RELEASE)/builtins
rm -f $(CANTRIP_OUT_RELEASE)/ext_builtins.cpio
cantrip-builtins-clean: cantrip-builtins-debug-clean cantrip-builtins-release-clean
.PHONY:: cantrip-builtins-debug
.PHONY:: cantrip-builtins-release
.PHONY:: cantrip-builtins
.PHONY:: cantrip-builtins-debug-clean
.PHONY:: cantrip-builtins-release-clean
.PHONY:: cantrip-builtins-clean