Files
graphene/Examples/lmbench/Makefile
borysp b8dc3c5a13 [Examples/lmbench] Add more lmbench download urls
The one lmbench download source we have is very unstable and downloading
often fails. This commit adds more urls that will be iteratively
fetched.
2020-05-07 21:24:55 +02:00

135 lines
4.6 KiB
Makefile

# Build the manifest for LMBench (only tested for version 2.5):
#
# - make Building for Linux
# - make DEBUG=1 Building for Linux (with Graphene debug output)
# - make SGX=1 Building for SGX
# - make SGX=1 DEBUG=1 Building for SGX (with Graphene debug output)
#
# Use `make clean` to remove Graphene-generated files or `make distclean` to
# remove all generated or downloaded files from the directory.
# Constants
LMBENCHURLS = https://sourceforge.net/projects/lmbench/files/lmbench/2.5/lmbench-2.5.tgz/download \
https://fossies.org/linux/privat/old/lmbench-2.5.tgz \
https://borysp.com/lmbench-2.5.tgz
LMBENCHHASH = e7431530a4cf4c44b5068e23454f95765dc0b51e7d98bc2bd70451b17d505bd9
LMBENCHDIR = lmbench-2.5
INSTALLDIR = $(LMBENCHDIR)/bin/linux
LMBENCHCONFIG = $(INSTALLDIR)$(shell $(LMBENCHDIR)/scripts/config)
# Relative path to Graphene root
GRAPHENEDIR ?= ../..
# If GRAPHENEDIR is a relative path, extend the path from where LMBench is installed
ifeq ($(patsubst /%,,$(GRAPHENEDIR)),)
GRAPHENEDIR_FROM_INSTALLDIR = $(GRAPHENEDIR)
else
GRAPHENEDIR_FROM_INSTALLDIR = ../../../$(GRAPHENEDIR)
endif
SGX_SIGNER_KEY ?= $(GRAPHENEDIR_FROM_INSTALLDIR)/Pal/src/host/Linux-SGX/signer/enclave-key.pem
ifeq ($(DEBUG),1)
GRAPHENEDEBUG = inline
else
GRAPHENEDEBUG = none
endif
MANIFESTS = $(INSTALLDIR)/manifest $(INSTALLDIR)/hello.manifest $(INSTALLDIR)/sh.manifest
.PHONY: all
all: $(INSTALLDIR)/lmbench $(MANIFESTS) $(INSTALLDIR)/pal_loader
ifeq ($(SGX),1)
all: sgx
endif
include ../../Scripts/Makefile.configs
# Building LMBench binaries
$(INSTALLDIR)/lmbench: $(LMBENCHDIR)/src/Makefile
$(MAKE) -C $(LMBENCHDIR)/src OS=linux
# Automatically downloading and unpacking LMBench source code
$(LMBENCHDIR)/src/Makefile: $(LMBENCHDIR).tgz
tar -xzf $<
touch $@
$(LMBENCHDIR).tgz:
$(GRAPHENEDIR)/Scripts/download --output $@ --sha256 $(LMBENCHHASH) $(foreach url,$(LMBENCHURLS),--url $(url))
$(INSTALLDIR)/lmbench-test-ci.sh:
cp lmbench-test-ci.sh $@
# Generating the manifests
$(MANIFESTS): $(INSTALLDIR)/%: %.template $(INSTALLDIR)/lmbench
sed -e 's|$$(GRAPHENEDIR)|'"$(GRAPHENEDIR_FROM_INSTALLDIR)"'|g' \
-e 's|$$(GRAPHENEDEBUG)|'"$(GRAPHENEDEBUG)"'|g' \
-e 's|$$(ARCH_LONG)|'"$(ARCH_LONG)"'|g' \
$< > $@
# Generating the manifests for SGX
#
# For each program in LMBench, we need to generate the manifest
# individually, along with the signature and the inittoken.
#
# The 'sgx' rule below will list the executables in $(INSTALLDIR)
# and generate their manifests for SGX.
.PHONY: sgx
sgx: $(INSTALLDIR)/lmbench $(INSTALLDIR)/sh.manifest.sgx $(INSTALLDIR)/hello.manifest.sgx
cd $(INSTALLDIR) && \
for f in `find -executable -not -name . -not -name lmbench -not -name hello`; do \
if [ ! -f $$f.manifest.sgx ]; then \
$(GRAPHENEDIR_FROM_INSTALLDIR)/Pal/src/host/Linux-SGX/signer/pal-sgx-sign \
-libpal $(GRAPHENEDIR_FROM_INSTALLDIR)/Runtime/libpal-Linux-SGX.so \
-key $(SGX_SIGNER_KEY) \
-manifest manifest -exec $$f -output $$f.manifest.sgx && \
$(GRAPHENEDIR_FROM_INSTALLDIR)/Pal/src/host/Linux-SGX/signer/pal-sgx-get-token \
-output $$f.token -sig $$f.sig; \
fi; \
done
$(INSTALLDIR)/sh.manifest.sgx $(INSTALLDIR)/hello.manifest.sgx: %.sgx: %
cd $(INSTALLDIR) && \
$(GRAPHENEDIR_FROM_INSTALLDIR)/Pal/src/host/Linux-SGX/signer/pal-sgx-sign \
-libpal $(GRAPHENEDIR_FROM_INSTALLDIR)/Runtime/libpal-Linux-SGX.so \
-key $(SGX_SIGNER_KEY) \
-manifest $(abspath $<) -output $(abspath $@) && \
$(GRAPHENEDIR_FROM_INSTALLDIR)/Pal/src/host/Linux-SGX/signer/pal-sgx-get-token \
-output $(abspath $(basename $<).token) -sig $(abspath $(basename $<).sig)
# Running LMBench natively and under Graphene
#
# - make run-native: run the whole test suite natively (with configuration prompt)
# - make run-graphene: run the whole test suite under Graphene (with configuration prompt)
# - make test: run LMBench for CI (without configuration prompt)
$(LMBENCHCONFIG):
cd $(LMBENCHDIR)/scripts && env OS=linux ./config-run
.PHONY: run-native
run-native: all $(LMBENCHCONFIG)
cd $(LMBENCHDIR)/scripts && env OS=linux ./results
.PHONY: run-graphene
run-graphene: all $(LMBENCHCONFIG)
cd $(LMBENCHDIR)/scripts && env LOADER=./pal_loader OS=linux RESULTS=results/graphene ./results
.PHONY: test
test: all $(INSTALLDIR)/lmbench-test-ci.sh
cd $(INSTALLDIR) && env LOADER=./pal_loader OS=linux ./lmbench-test-ci.sh
$(INSTALLDIR)/pal_loader:
ln -s $(GRAPHENEDIR_FROM_INSTALLDIR)/Runtime/pal_loader $@
.PHONY: clean
clean:
[ ! -d $(INSTALLDIR) ] || (cd $(INSTALLDIR) && $(RM) *.manifest *.manifest.sgx *.sig *.token)
.PHONY: distclean
distclean: clean
$(RM) -r $(LMBENCHDIR) $(LMBENCHDIR).tgz