| # |
| # Copyright (c) 2020, Google, Inc. All rights reserved |
| # |
| # 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. |
| # |
| |
| # Generate and add constant headers, if necessary |
| # |
| # args: |
| # MODULE : module name (required) |
| # PY3 : Path of the Python 3 interpreter to use to run the manifest compiler |
| # script. |
| # MODULE_CONSTANTS : JSON files with constants used for both the manifest and C |
| # headers (optional) (CONSTANTS is a deprecated equivalent to |
| # MODULE_CONSTANTS) |
| # MANIFEST : manifest for the application (optional) |
| # MANIFEST_OVERLAY : additional overlay manifests for the application (optional) |
| # |
| # outputs: |
| # TRUSTY_APP_MANIFEST_BIN : manifest binary name, if MANIFEST |
| # |
| # If neither MODULE_CONSTANTS nor MANIFEST are set, this file does nothing. |
| |
| ifneq ($(strip $(MODULE_CONSTANTS)),) |
| MODULE_INCLUDES += \ |
| $(BUILDDIR)/constants/include |
| endif |
| |
| ifneq ($(strip $(MODULE_CONSTANTS)$(MANIFEST)),) |
| |
| CONSTANTS_HEADER_DIR := $(BUILDDIR)/constants/include |
| |
| ifeq ($(strip $(MANIFEST_COMPILER)),) |
| MANIFEST_COMPILER := trusty/user/base/tools/manifest_compiler.py |
| endif |
| |
| # build manifest objects if we are building an app, otherwise generate shared |
| # constants headers if constants provided |
| ifeq ($(call TOBOOL,$(TRUSTY_APP)),true) |
| |
| TRUSTY_APP_MANIFEST_BIN := $(BUILDDIR)/$(TRUSTY_APP_NAME).manifest |
| |
| # Save the manifest path for use in user-tasks.mk |
| _MODULES_$(MODULE)_TRUSTY_APP_MANIFEST_BIN := $(TRUSTY_APP_MANIFEST_BIN) |
| $(INFO_DONE $(MODULE),generating manifest,$(TRUSTY_APP_MANIFEST_BIN)) |
| |
| # TODO Until the SDK supports library variants, this flag will only work as |
| # intended for applications that have no library dependencies. |
| $(TRUSTY_APP_MANIFEST_BIN): TRUSTY_APP_ENABLE_SCS := |
| ifeq (false,$(call TOBOOL,$(TRUSTY_APP_DISABLE_SCS))) |
| ifeq (true,$(call TOBOOL,$(SCS_ENABLED))) |
| $(TRUSTY_APP_MANIFEST_BIN): TRUSTY_APP_ENABLE_SCS := --enable-shadow-call-stack |
| endif |
| endif |
| ifdef ARCH_$(ARCH)_DEFAULT_USER_SHADOW_STACK_SIZE |
| $(TRUSTY_APP_MANIFEST_BIN): DEFAULT_USER_SHADOW_STACK_SIZE := \ |
| --default-shadow-call-stack-size $(ARCH_$(ARCH)_DEFAULT_USER_SHADOW_STACK_SIZE) |
| else |
| $(TRUSTY_APP_MANIFEST_BIN): DEFAULT_USER_SHADOW_STACK_SIZE := |
| endif |
| $(TRUSTY_APP_MANIFEST_BIN): MANIFEST_COMPILER := $(MANIFEST_COMPILER) |
| $(TRUSTY_APP_MANIFEST_BIN): PY3 := $(PY3) |
| $(TRUSTY_APP_MANIFEST_BIN): CONFIG_CONSTANTS := $(MODULE_CONSTANTS) |
| $(TRUSTY_APP_MANIFEST_BIN): MODULE := $(MODULE) |
| $(TRUSTY_APP_MANIFEST_BIN): MANIFEST := $(MANIFEST) |
| $(TRUSTY_APP_MANIFEST_BIN): MANIFEST_OVERLAY := $(MANIFEST_OVERLAY) |
| $(TRUSTY_APP_MANIFEST_BIN): HEADER_DIR := $(CONSTANTS_HEADER_DIR) |
| $(TRUSTY_APP_MANIFEST_BIN): $(MANIFEST) $(MANIFEST_OVERLAY) $(MANIFEST_COMPILER) $(MODULE_CONSTANTS) |
| @$(MKDIR) |
| @$(call ECHO,$(MODULE),compiling,$< to $@) |
| $(NOECHO)$(PY3) $(MANIFEST_COMPILER) $(addprefix -i,$(MANIFEST) $(MANIFEST_OVERLAY)) -o $@ $(addprefix -c,$(CONFIG_CONSTANTS)) --header-dir $(HEADER_DIR) \ |
| $(TRUSTY_APP_ENABLE_SCS) $(DEFAULT_USER_SHADOW_STACK_SIZE) |
| @$(call ECHO_DONE_SILENT,$(MODULE),compiling,$< to $@) |
| |
| # We need the constants headers to be generated before the sources are compiled |
| MODULE_SRCDEPS += $(TRUSTY_APP_MANIFEST_BIN) |
| |
| else # we are not building an app |
| |
| ifneq ($(strip $(MODULE_CONSTANTS)),) |
| |
| # generate shared constants headers if only constants and no manifest provided |
| # generate also a hidden generated for each module that will |
| # say that constants are already generated for this module |
| $(CONSTANTS_HEADER_DIR)/.generated/$(MODULE): MANIFEST_COMPILER := $(MANIFEST_COMPILER) |
| $(CONSTANTS_HEADER_DIR)/.generated/$(MODULE): PY3 := $(PY3) |
| $(CONSTANTS_HEADER_DIR)/.generated/$(MODULE): MODULE := $(MODULE) |
| $(CONSTANTS_HEADER_DIR)/.generated/$(MODULE): CONFIG_CONSTANTS := $(MODULE_CONSTANTS) |
| $(CONSTANTS_HEADER_DIR)/.generated/$(MODULE): HEADER_DIR := $(CONSTANTS_HEADER_DIR) |
| $(CONSTANTS_HEADER_DIR)/.generated/$(MODULE): $(MANIFEST_COMPILER) $(MODULE_CONSTANTS) |
| @$(MKDIR) |
| @$(call ECHO,$(MODULE),compiling constants,for $(MODULE)) |
| $(NOECHO)$(PY3) $(MANIFEST_COMPILER) $(addprefix -c,$(CONFIG_CONSTANTS)) --header-dir $(HEADER_DIR) |
| @touch $(HEADER_DIR)/.generated/$(MODULE) |
| @$(call ECHO_DONE_SILENT,$(MODULE),compiling constants,for $(MODULE)) |
| |
| MODULE_SRCDEPS += $(CONSTANTS_HEADER_DIR)/.generated/$(MODULE) |
| |
| endif # MODULE_CONSTANTS is non-empty |
| |
| endif # TRUSTY_APP = false |
| |
| endif # MODULE_CONSTANTS and/or MANIFEST is non-empty |
| |
| CONSTANTS := |
| CONSTANTS_HEADER_DIR := |
| MODULE_CONSTANTS := |
| MANIFEST := |
| MANIFEST_OVERLAY := |