1# Add any common flags to the module
2include make/common_flags.mk
3
4# Install libclang_rt into the SDK
5LIBCLANG_RT := $(notdir $(TRUSTY_APP_LIBGCC))
6ALL_SDK_LIBS += $(TRUSTY_SDK_LIB_DIR)/$(LIBCLANG_RT)
7$(TRUSTY_SDK_LIB_DIR)/$(LIBCLANG_RT): $(TRUSTY_APP_LIBGCC)
8	@$(MKDIR)
9	$(NOECHO)cp $^ $@
10
11# Install SDK make helper
12ALL_SDK_EXTRA_FILES += $(TRUSTY_SDK_DIR)/make/trusty_sdk.mk
13$(TRUSTY_SDK_DIR)/make/trusty_sdk.mk: SDK_CFLAGS := \
14	$(GLOBAL_SHARED_OPTFLAGS) $(GLOBAL_USER_OPTFLAGS) $(MODULE_OPTFLAGS) \
15	$(GLOBAL_SHARED_COMPILEFLAGS) $(GLOBAL_USER_COMPILEFLAGS) $(ARCH_$(ARCH)_COMPILEFLAGS) $(MODULE_COMPILEFLAGS) \
16	$(GLOBAL_SHARED_CFLAGS) $(GLOBAL_USER_CFLAGS) $(ARCH_$(ARCH)_CFLAGS) $(MODULE_CFLAGS)
17$(TRUSTY_SDK_DIR)/make/trusty_sdk.mk: SDK_CXXFLAGS := \
18	$(GLOBAL_SHARED_OPTFLAGS) $(GLOBAL_USER_OPTFLAGS) $(MODULE_OPTFLAGS) \
19	$(GLOBAL_SHARED_COMPILEFLAGS) $(GLOBAL_USER_COMPILEFLAGS) $(ARCH_$(ARCH)_COMPILEFLAGS) $(MODULE_COMPILEFLAGS) \
20	$(GLOBAL_SHARED_CPPFLAGS) $(GLOBAL_USER_CPPFLAGS) $(ARCH_$(ARCH)_CPPFLAGS) $(MODULE_CPPFLAGS)
21$(TRUSTY_SDK_DIR)/make/trusty_sdk.mk: SDK_ASMFLAGS := \
22	$(GLOBAL_SHARED_OPTFLAGS) $(GLOBAL_USER_OPTFLAGS) $(MODULE_OPTFLAGS) \
23	$(GLOBAL_SHARED_COMPILEFLAGS) $(GLOBAL_USER_COMPILEFLAGS) $(ARCH_$(ARCH)_COMPILEFLAGS) $(MODULE_COMPILEFLAGS) \
24	$(GLOBAL_SHARED_ASMFLAGS) $(GLOBAL_USER_ASMFLAGS) $(ARCH_$(ARCH)_ASMFLAGS) $(MODULE_ASMFLAGS)
25$(TRUSTY_SDK_DIR)/make/trusty_sdk.mk: ARCH := $(ARCH)
26$(TRUSTY_SDK_DIR)/make/trusty_sdk.mk: ASLR := $(ASLR)
27$(TRUSTY_SDK_DIR)/make/trusty_sdk.mk: STANDARD_ARCH_NAME := $(STANDARD_ARCH_NAME)
28$(TRUSTY_SDK_DIR)/make/trusty_sdk.mk: TRUSTY_APP_LDFLAGS := $(TRUSTY_APP_BASE_LDFLAGS)
29$(TRUSTY_SDK_DIR)/make/trusty_sdk.mk: TRUSTY_APP_ALIGNMENT := $(TRUSTY_APP_ALIGNMENT)
30$(TRUSTY_SDK_DIR)/make/trusty_sdk.mk: TRUSTY_APP_MEMBASE := $(TRUSTY_APP_MEMBASE)
31$(TRUSTY_SDK_DIR)/make/trusty_sdk.mk: TRUSTY_APP_SYMTAB_ENABLED := $(TRUSTY_APP_SYMTAB_ENABLED)
32$(TRUSTY_SDK_DIR)/make/trusty_sdk.mk: trusty/user/base/sdk/make/trusty_sdk.mk
33	@$(MKDIR)
34	$(NOECHO)rm -f $@.tmp
35	$(NOECHO)cp $^ $@.tmp
36	$(NOECHO)echo 'ARCH := $(ARCH)' >> $@.tmp
37	$(NOECHO)echo 'ASLR := $(ASLR)' >> $@.tmp
38	$(NOECHO)echo 'CFLAGS := $(call prepare-sdk-flags,$(SDK_CFLAGS)) $$(CFLAGS)' >> $@.tmp
39	$(NOECHO)echo 'CXXFLAGS := $(call prepare-sdk-flags,$(SDK_CXXFLAGS)) $$(CXXFLAGS)' >> $@.tmp
40	$(NOECHO)echo 'ASMFLAGS := $(call prepare-sdk-flags,$(SDK_ASMFLAGS)) $$(ASMFLAGS)' >> $@.tmp
41	$(NOECHO)echo 'TRUSTY_APP_BASE_LDFLAGS := $$(TRUSTY_APP_LDFLAGS) $(call prepare-sdk-flags,$(TRUSTY_APP_LDFLAGS)) $$(LDFLAGS)' >> $@.tmp
42	$(NOECHO)echo 'TRUSTY_APP_ALIGNMENT := $(TRUSTY_APP_ALIGNMENT)' >> $@.tmp
43	$(NOECHO)echo 'TRUSTY_APP_MEMBASE := $(TRUSTY_APP_MEMBASE)' >> $@.tmp
44	$(NOECHO)echo 'TRUSTY_APP_SYMTAB_ENABLED := $(TRUSTY_APP_SYMTAB_ENABLED)' >> $@.tmp
45	$(NOECHO)echo 'TRUSTY_APP_LIBGCC := $$(SDK_SYSROOT_DIR)/usr/lib/$(LIBCLANG_RT)' >> $@.tmp
46	$(NOECHO)echo 'SCS_ENABLED := $(SCS_ENABLED)' >> $@.tmp
47	$(NOECHO)echo 'STANDARD_ARCH_NAME := $(STANDARD_ARCH_NAME)' >> $@.tmp
48
49	$(NOECHO)echo '# Include the base trusty app makefile which uses the variables provided and' >> $@.tmp
50	$(NOECHO)echo '# defined above to link the final app binary.' >> $@.tmp
51	$(NOECHO)echo 'ifneq ($$(TRUSTY_APP_NAME),)' >> $@.tmp
52	$(NOECHO)echo 'APP_NAME := $$(TRUSTY_APP_NAME)' >> $@.tmp
53	$(NOECHO)echo 'APP_ELF := $$(BUILDDIR)/$$(TRUSTY_APP_NAME).elf' >> $@.tmp
54	$(NOECHO)echo 'APP_MANIFEST := $$(BUILDDIR)/$$(TRUSTY_APP_NAME).manifest' >> $@.tmp
55	$(NOECHO)echo 'include $$(SDK_DIR)/make/trusted_app.mk' >> $@.tmp
56	$(NOECHO)echo 'include $$(SDK_DIR)/make/loadable_app.mk' >> $@.tmp
57	$(NOECHO)echo 'endif' >> $@.tmp
58
59	$(NOECHO)echo '# Bind MODULE_INCLUDES to compile flags' >> $@.tmp
60	$(NOECHO)echo 'MODULE_INCLUDES := $$(addprefix -I,$$(MODULE_INCLUDES))' >> $@.tmp
61	$(NOECHO)echo 'CFLAGS := $$(CFLAGS) $$(MODULE_INCLUDES)' >> $@.tmp
62	$(NOECHO)echo 'CXXFLAGS := $$(CXXFLAGS) $$(MODULE_INCLUDES)' >> $@.tmp
63	$(NOECHO)echo 'ASMFLAGS := $$(ASMFLAGS) $$(MODULE_INCLUDES)' >> $@.tmp
64
65	$(NOECHO)echo '# Add any extra files, e.g. loadable app to default target' >> $@.tmp
66	$(NOECHO)echo 'all:: $$(EXTRA_BUILDDEPS)' >> $@.tmp
67	$(NOECHO)sed -i 's/ \+$$//' $@.tmp
68	$(call TESTANDREPLACEFILE,$@.tmp,$@)
69
70# Include the shared lk headers
71EXTRA_SDK_INCLUDES := $(GLOBAL_UAPI_INCLUDES) $(GLOBAL_SHARED_INCLUDES) $(GLOBAL_USER_INCLUDES)
72EXTRA_SDK_HEADERS := $(foreach dir,$(sort $(EXTRA_SDK_INCLUDES)),$(wildcard $(dir)/*))
73.PHONY: EXTRA_includes
74EXTRA_includes: EXTRA_SDK_HEADERS := $(EXTRA_SDK_HEADERS)
75EXTRA_includes: $(EXTRA_SDK_HEADERS)
76	$(NOECHO)mkdir -p $(TRUSTY_SDK_INCLUDE_DIR)
77	-cp -r -L $(EXTRA_SDK_HEADERS) $(TRUSTY_SDK_INCLUDE_DIR)
78ALL_SDK_INCLUDES += EXTRA_includes
79
80# Rewrite the exec header from the manifest compiler to remove the extra setup
81# we use in-tree to force the use of our hermetic python host binary.
82$(TRUSTY_SDK_DIR)/tools/manifest_compiler.py: trusty/user/base/tools/manifest_compiler.py
83	@$(MKDIR)
84	$(NOECHO)rm -f $@.tmp
85	$(NOECHO)printf '#!/usr/bin/env python3\n"""' > $@.tmp
86	$(NOECHO)tail -n +8 $^ >> $@.tmp
87	$(NOECHO)chmod +x $@.tmp
88	$(NOECHO)$(BUILDTOOLS_BINDIR)/py3-cmd $@.tmp --help > /dev/null
89	$(call TESTANDREPLACEFILE,$@.tmp,$@)
90ALL_SDK_EXTRA_FILES += $(TRUSTY_SDK_DIR)/tools/manifest_compiler.py
91