Files
graphene/Scripts/Makefile.rules
T
Michał Kowalczyk fcf0a01d7d Remove shebangs from autogenerated manifests
We don't use it in tests, plus it didn't work on SGX - there was a
warning about autogeneration inserted before the autogenerated shebang.

Also, test_106_manifest_with_shebang didn't actually test the shebang
but ran the binary through the loader, so it was meaningless. We'll need
to fix it and implement again after cleaning up Graphene invocation.
2020-06-18 00:44:30 +02:00

166 lines
5.1 KiB
Makefile

#
# All Makefiles must follow the following conventions:
#
# - Compilation and linking steps must be done via the 'cmd' function:
# e.g., use '$(call cmd,ld_so_o)' to create a shared library using LD
#
# - File-specific build flags must be specified via variables of the format 'FLAG-filename':
# e.g., use 'LDFLAGS-libsysdb.so=...' to specify libsysdb.so-specific linker flags
#
ifeq ("$(origin V)", "command line")
BUILD_VERBOSE = $(V)
endif
ifndef BUILD_VERBOSE
BUILD_VERBOSE = 0
endif
ifeq ($(BUILD_VERBOSE),1)
quiet =
Q =
else
quiet = quiet_
Q = @
endif
export Q quiet BUILD_VERBOSE
squote := '
escsq = $(subst $(squote),'\$(squote)',$1)
echo-cmd = $(if $($(quiet)cmd_$(1)), echo ' $(call escsq,$($(quiet)cmd_$(1)))';)
cmd = @$(echo-cmd) $(cmd_$(1))
quiet_cmd_generated_offsets_s = [ $@ ]
cmd_generated_offsets_s = $(CC) $(CFLAGS) $(defs) -S $< -o $@
generated-offsets.s: generated-offsets.c $(filter-out asm-offsets.h,$(headers))
$(call cmd,generated_offsets_s)
CLEAN_FILES += generated-offsets.s
quiet_cmd_asm_offsets_h = [ $@ ]
cmd_asm_offsets_h = \
(set -e; \
echo "/* DO NOT MODIFY. THIS FILE WAS AUTO-GENERATED. */"; \
echo "\#ifndef _ASM_OFFSETS_H_"; \
echo "\#define _ASM_OFFSETS_H_"; \
echo ""; \
awk '/\.ascii "GENERATED_INTEGER/{print "\#ifndef " $$3 "\n\#define " $$3 " " $$4 "\n\#endif"}' $^; \
echo ""; \
echo "\#endif") > $@
asm-offsets.h: generated-offsets.s
$(call cmd,asm_offsets_h)
CLEAN_FILES += asm-offsets.h
quiet_cmd_generated_offsets_py = [ $@ ]
cmd_generated_offsets_py = \
(set -e; \
echo "\# DO NOT MODIFY. THIS FILE WAS AUTO-GENERATED."; \
echo ""; \
awk '/\.ascii "GENERATED_INTEGER/{print $$3 " = " $$4}' $^) > $@
generated_offsets.py: generated-offsets.s
$(call cmd,generated_offsets_py)
CLEAN_FILES += generated_offsets.py generated_offsets.pyc
quiet_cmd_ln_sf = [ $@ ]
cmd_ln_sf = ln -sf $(abspath $<) $@
cc-option = $(shell set -e; \
if ($(CC) -Werror $(1) -c -x c /dev/null -o /dev/null) >/dev/null 2>&1; \
then echo "$(1)"; \
fi)
# .c
quiet_cmd_cc_o_c = [ $@ ]
cmd_cc_o_c = $(CC) -MD -MP $(CFLAGS) $(CFLAGS-$@) -c -o $@ $<
quiet_cmd_cpp_i_c = [ $@ ]
cmd_cpp_i_c = $(CC) -MD -MP -MF $@.d $(CFLAGS) $(CFLAGS-$@) -E -o $@ $<
quiet_cmd_cc_s_c = [ $@ ]
cmd_cc_s_c = $(CC) -MD -MP -MF $@.d $(CFLAGS) $(CFLAGS-$@) -S -o $@ $<
# .S
quiet_cmd_as_o_S = [ $@ ]
cmd_as_o_S = $(CC) -MD -MP $(ASFLAGS) $(ASFLAGS-$@) -c -o $@ $<
quiet_cmd_cpp_s_S = [ $@ ]
cmd_cpp_s_S = $(CC) -MD -MP -MF $@.d $(ASFLAGS) $(ASFLAGS-$@) -E -o $@ $<
# LD
quiet_cmd_ld_so_o = [ $@ ]
cmd_ld_so_o = $(LD) $(LDFLAGS) $(LDFLAGS-$@) -o $@ $(filter-out pal-symbols %.map %.map.template %.lds,$^) -soname $(notdir $@)
# AR
quiet_cmd_ar_so_o = [ $@ ]
cmd_ar_so_o = $(AR) $(ARFLAGS)$(ARFLAGS-$@) $@ $^
quiet_cmd_ar_a_o = [ $@ ]
cmd_ar_a_o = $(AR) $(ARFLAGS)$(ARFLAGS-$@) $@ $^
# LD only
quiet_cmd_ld = [ $@ ]
cmd_ld = $(LD) $(LDFLAGS) $(LDFLAGS-$@) -o $@ $(filter-out pal-symbols %.map %.map.template %.lds,$^)
# OBJCOPY
quiet_cmd_objcopy = [ $@ ]
cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS-$@) $< $@
# check_no_reloc
# This depends on the output of readelf command.
quiet_cmd_check_no_reloc = [ check_no_reloc $^ ]
cmd_check_no_reloc = LC_ALL=C readelf -r $^ | grep -q 'There are no relocations in this file.'
# single .c => executable
quiet_cmd_csingle = [ $@ ]
cmd_csingle = $(CC) -MD -MP $(CFLAGS) $(CFLAGS-$@) -o $@ $< $(LDLIBS) $(LDLIBS-$@)
# single .cpp => executable
quiet_cmd_cxxsingle = [ $@ ]
cmd_cxxsingle = $(CXX) -MD -MP $(CXXFLAGS) $(CXXFLAGS-$@) -o $@ $< $(LDLIBS) $(LDLIBS-$@)
# multiple .o => executable
quiet_cmd_cmulti = [ $@ ]
cmd_cmulti = $(CC) -MD -MP $(CFLAGS) $(CFLAGS-$@) -o $@ $^ $(LDLIBS) $(LDLIBS-$@)
# sgx sign
quiet_cmd_sgx_sign_exec = [ $*.{sig, manifest.sgx} ]
cmd_sgx_sign_exec = $(SGX_SIGN) -output $*.manifest.sgx -exec $* -manifest $< > .output.sgx_sign.$*
quiet_cmd_sgx_sign = [ $*.{sig, manifest.sgx} ]
cmd_sgx_sign = $(SGX_SIGN) -output $*.manifest.sgx -manifest $< > .output.sgx_sign.$*
# sgx token
quiet_cmd_sgx_get_token = [ Token: $(basename $*) ]
cmd_sgx_get_token = $(SGX_GET_TOKEN) -output $@ -sig $^ > .output.sgx_get_token.$(basename $*)
# sgx manifest dependency
quiet_cmd_sgx_sign_depend_exec = [ $@ ]
cmd_sgx_sign_depend_exec = $(SGX_SIGN) -depend -output $@ -exec $* -manifest $<
# SGX manifest dependency without executable manifest may not have loader.exec. If it is so,
# only preload libraries. Use static pattern rule for this recipe.
quiet_cmd_sgx_sign_depend = [ $@ ]
cmd_sgx_sign_depend = $(SGX_SIGN) -depend -output $@ -manifest $<
# manifest
quiet_cmd_manifest = [ $@ ]
cmd_manifest = \
$(if $(2),sed $(2) $< > $@,cp -f $< $@)
# pal map
PAL_SYMBOL_FILE := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))/../Pal/src/pal-symbols
PAL_SYMBOLS = $(shell sed -e 's|$$|;|g' $(PAL_SYMBOL_FILE))
quiet_cmd_pal_map = [ $@ ]
cmd_pal_map = \
(echo "/* DO NOT MODIFY. THIS FILE WAS AUTO-GENERATED. */"; \
sed -e 's|\$$(PAL_SYMBOLS)|$(PAL_SYMBOLS)|g' $<) > $@
pal.map: pal.map.template $(PAL_SYMBOL_FILE)
$(call cmd,pal_map)