# Copyright 2016 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

LOCAL_DIR := $(GET_LOCAL_DIR)

MODULE := $(LOCAL_DIR)

MODULE_TYPE := driver
# not really a "driver", but a "driver" is a dso that's not
# exported via sysroot, which is what userboot is too

MODULE_SRCS += \
    $(LOCAL_DIR)/bootdata.c \
    $(LOCAL_DIR)/bootfs.c \
    $(LOCAL_DIR)/userboot-elf.c \
    $(LOCAL_DIR)/option.c \
    $(LOCAL_DIR)/start.c \
    $(LOCAL_DIR)/loader-service.c \
    $(LOCAL_DIR)/util.c

MODULE_NAME := userboot
MODULE_GROUP := core

# This is built as a shared library, but it gets embedded directly in the
# kernel image and does not need to be installed in the filesystem at all.
MODULE_SO_NAME := userboot
MODULE_SO_INSTALL_NAME := -

# Directly compile in the few functions we need from libc.
# This doesn't get arch-specific optimized versions, but
# such optimization isn't very important for userboot.
userboot-string-functions := memcmp memcpy memset strlen strncmp memmove
MODULE_SRCS += \
    $(userboot-string-functions:%=third_party/ulib/musl/src/string/%.c)
MODULE_COMPILEFLAGS += -Ithird_party/ulib/musl/src/internal

# Make sure there are never any PLT entries generated.
MODULE_COMPILEFLAGS += -fvisibility=hidden

ifeq ($(call TOBOOL,$(USE_LTO)),true)
# Make sure that compiler doesn't replace calls to libc functions with builtins.
# While inlining these builtins is desirable, it causes LTO to optimize away
# our own versions of these functions which later causes a link failure.
# TODO(phosek): https://bugs.llvm.org/show_bug.cgi?id=34169
MODULE_COMPILEFLAGS += -ffreestanding
endif

# We don't have normal setup, so safe-stack is a non-starter.
MODULE_COMPILEFLAGS += $(NO_SAFESTACK) $(NO_SANITIZERS)

# system/ulib/runtime is compiled without safe-stack.  We can't use any other
# static libs, because they might be built with safe-stack or other
# options that can't be supported in the constrained userboot context.
MODULE_STATIC_LIBS := system/ulib/runtime
MODULE_HEADER_DEPS := system/ulib/zircon

# Fortunately, each of these libraries is just a single source file.
# So we just use their sources directly rather than getting
# clever with the build system somehow.

MODULE_HEADER_DEPS += system/ulib/elfload
MODULE_SRCS += system/ulib/elfload/elf-load.c

MODULE_HEADER_DEPS += system/ulib/bootdata
MODULE_SRCS += system/ulib/bootdata/decompress.c

MODULE_HEADER_DEPS += third_party/ulib/lz4
MODULE_SRCS += third_party/ulib/lz4/lz4.c
MODULE_COMPILEFLAGS += -Ithird_party/ulib/lz4/include/lz4 -DWITH_LZ4_NOALLOC

MODULE_HEADER_DEPS += system/ulib/ldmsg
MODULE_SRCS += system/ulib/ldmsg/ldmsg.c

# This generated header lists all the ABI symbols in the vDSO with their
# addresses.  It's used to generate vdso-syms.ld, below.
$(BUILDDIR)/$(LOCAL_DIR)/vdso-syms.h: $(BUILDDIR)/system/ulib/zircon/libzircon.so
	@$(MKDIR)
	$(call BUILDECHO,generating $@)
	$(NOECHO)$(SHELLEXEC) scripts/shlib-symbols '$(NM)' -a $< $@
GENERATED += $(BUILDDIR)/$(LOCAL_DIR)/vdso-syms.h

# This generated linker script defines symbols for each vDSO entry point
# giving the relative address where it will be found at runtime.  With
# this hack, the userboot code doesn't need to do any special work to
# find the vDSO and its entry points, keeping the code far simpler.
$(BUILDDIR)/$(LOCAL_DIR)/vdso-syms.ld: \
    $(LOCAL_DIR)/vdso-syms.ld.h $(BUILDDIR)/$(LOCAL_DIR)/vdso-syms.h
	@$(MKDIR)
	$(call BUILDECHO,generating $@)
	$(NOECHO)$(CC) -E -P -include $^ > $@
GENERATED += $(BUILDDIR)/$(LOCAL_DIR)/vdso-syms.ld.h
MODULE_EXTRA_OBJS := $(BUILDDIR)/$(LOCAL_DIR)/vdso-syms.ld

# userboot is a reentrant DSO (no writable segment) with an entry point.
MODULE_LDFLAGS := $(RODSO_LDFLAGS) -e _start

include make/module.mk
