mirror of
https://github.com/clearlinux/graphene.git
synced 2026-08-28 21:35:52 +00:00
fcf0a01d7d
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.
166 lines
5.1 KiB
Makefile
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)
|