mirror of
https://github.com/clearlinux/graphene.git
synced 2026-09-05 13:21:37 +00:00
The one lmbench download source we have is very unstable and downloading often fails. This commit adds more urls that will be iteratively fetched.
135 lines
4.6 KiB
Makefile
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
|