Files
Paweł Marczewski 17ab04db59 [Pal,LibOS] New logging system
Instead of 'loader.debug_type', introduce 'loader.log_level'
and 'loader.log_file', along with a set of definitions for
logging at a chosen level.

For now, the call sites keep using the legacy macros (SGX_DBG and
debug()), because converting them all will conflict with other
big changes in the code base. The existing LibOS calls are
assumed to be at 'info' level.
2021-01-20 17:27:29 +01:00

138 lines
4.5 KiB
Makefile

THIS_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
INSTALL_DIR ?= $(THIS_DIR)install
LIGHTTPD_SRC ?= $(THIS_DIR)lighttpd-1.4.54
LIGHTTPD_HASH ?= 5151d38cb7c4c40effa13710e77ebdbef899f945b062cf32befc02d128ac424c
LIGHTTPD_MIRRORS ?= \
https://download.lighttpd.net/lighttpd/releases-1.4.x/
# Host and port on which lighttpd listens
HOST ?= 127.0.0.1
PORT ?= 8003
# Relative path to Graphene root
GRAPHENEDIR ?= $(THIS_DIR)../..
SGX_SIGNER_KEY ?= $(GRAPHENEDIR)/Pal/src/host/Linux-SGX/signer/enclave-key.pem
ifeq ($(DEBUG),1)
GRAPHENE_LOG_LEVEL = debug
else
GRAPHENE_LOG_LEVEL = error
endif
CONF_FILES = lighttpd-server.conf lighttpd.conf
.PHONY: all
all: $(INSTALL_DIR)/sbin/lighttpd lighttpd.manifest $(CONF_FILES) testdata | pal_loader
ifeq ($(SGX),1)
all: lighttpd.manifest.sgx lighttpd.sig lighttpd.token
endif
include ../../Scripts/Makefile.configs
# The commands for downloading and compiling the lighttpd source code, and
# installing the binaries.
$(INSTALL_DIR)/sbin/lighttpd: $(LIGHTTPD_SRC)/configure
cd $(LIGHTTPD_SRC) && ./configure --prefix=$(abspath $(INSTALL_DIR)) \
--without-openssl --without-pcre --without-zlib --without-bzip2
cd $(LIGHTTPD_SRC) && $(MAKE)
cd $(LIGHTTPD_SRC) && $(MAKE) install
$(LIGHTTPD_SRC)/configure: $(LIGHTTPD_SRC).tar.gz
tar -xzf $<
# Refresh the timestamp, but only for this file - otherwise ./configure starts recreating too
# much.
touch $(LIGHTTPD_SRC)/configure
$(LIGHTTPD_SRC).tar.gz:
$(GRAPHENEDIR)/Scripts/download --output $@ --sha256 $(LIGHTTPD_HASH) $(foreach mirror,$(LIGHTTPD_MIRRORS),--url $(mirror)/$(LIGHTTPD_SRC).tar.gz)
# Generate manifest rules for lighttpd dependencies.
# We'll duplicate some Glibc libraries (which Graphene provides in a customized version), but
# there's no harm in this.
PROGRAMS = $(INSTALL_DIR)/sbin/lighttpd \
$(INSTALL_DIR)/lib/mod_indexfile.so \
$(INSTALL_DIR)/lib/mod_dirlisting.so \
$(INSTALL_DIR)/lib/mod_staticfile.so
.INTERMEDIATE: trusted-libs
trusted-libs: ../common_tools/get_deps.sh $(INSTALL_DIR)/sbin/lighttpd
../common_tools/get_deps.sh $(PROGRAMS) > $@
lighttpd.manifest: lighttpd.manifest.template trusted-libs
(sed -e 's|$$(GRAPHENEDIR)|'"$(GRAPHENEDIR)"'|g' \
-e 's|$$(GRAPHENE_LOG_LEVEL)|'"$(GRAPHENE_LOG_LEVEL)"'|g' \
-e 's|$$(INSTALL_DIR)|'"$(INSTALL_DIR)"'|g' \
-e 's|$$(INSTALL_DIR_ABSPATH)|'"$(abspath $(INSTALL_DIR))"'|g' \
-e 's|$$(ARCH_LIBDIR)|'"$(ARCH_LIBDIR)"'|g' \
$<; \
cat trusted-libs) > $@
# Generate the SGX-specific manifest (lighttpd.manifest.sgx), the enclave signature, and the token
# for enclave initialization.
lighttpd.manifest.sgx: lighttpd.manifest $(INSTALL_DIR)/sbin/lighttpd
$(GRAPHENEDIR)/Pal/src/host/Linux-SGX/signer/pal-sgx-sign \
-libpal $(GRAPHENEDIR)/Runtime/libpal-Linux-SGX.so \
-key $(SGX_SIGNER_KEY) \
-manifest lighttpd.manifest -output $@
lighttpd.sig: lighttpd.manifest.sgx
lighttpd.token: lighttpd.sig
$(GRAPHENEDIR)/Pal/src/host/Linux-SGX/signer/pal-sgx-get-token -output $@ -sig $^
pal_loader:
ln -s $(GRAPHENEDIR)/Runtime/pal_loader $@
# lighttpd configuration and test data
lighttpd-server.conf:
@$(RM) $@
@echo "server.document-root = \"$(abspath $(INSTALL_DIR))/html\"" >> $@
@echo "server.port = $(PORT)" >> $@
@echo "server.bind = \"$(HOST)\"" >> $@
lighttpd.conf:
@$(RM) $@
@echo "include \"lighttpd-server.conf\"" >> $@
@echo "include \"lighttpd-generic.conf\"" >> $@
# Generate variously-sized HTML files in $(RANDOM_DIR)
RANDOM_DIR = $(INSTALL_DIR)/html/random
RANDOM_FILES = \
$(foreach n,1 2 3 4 5 6 7 8 9 10,2K.$n.html) \
$(foreach n,1 2 3 4 5,10K.$n.html) \
$(foreach n,1 2 3 4 5,100K.$n.html) \
$(foreach n,1 2 3,1M.$n.html) \
$(foreach n,1 2 3,10M.$n.html) \
$(foreach n,1 2 3,100.$n.html)
TEST_DATA = $(addprefix $(RANDOM_DIR)/,$(RANDOM_FILES))
$(RANDOM_DIR)/%.html:
mkdir -p $(RANDOM_DIR)
dd if=/dev/urandom of=$@ count=1 bs=$(basename $(basename $(notdir $@))) status=none
.PHONY: testdata
testdata: $(TEST_DATA)
# Targets to run lighttpd
.PHONY: start-native-server
start-native-server: all
$(INSTALL_DIR)/sbin/lighttpd -D -m $(INSTALL_DIR)/lib -f lighttpd.conf
.PHONY: start-graphene-server
start-graphene-server: all
./pal_loader ./lighttpd -D -m $(INSTALL_DIR)/lib -f lighttpd.conf
.PHONY: clean
clean:
$(RM) *.manifest *.manifest.sgx *.token *.sig pal_loader OUTPUT result-* $(CONF_FILES) \
pal_loader
.PHONY: distclean
distclean: clean
$(RM) -r $(LIGHTTPD_SRC).tar.gz $(LIGHTTPD_SRC) $(INSTALL_DIR) $(TEST_DATA) *.pem