1# Copyright 2016 The Fuchsia Authors 2# 3# Use of this source code is governed by a MIT-style 4# license that can be found in the LICENSE file or at 5# https://opensource.org/licenses/MIT 6 7# check for disallowed options 8ifneq ($(MODULE_DEPS),) 9$(error $(MODULE) $(MODULE_TYPE) modules must use MODULE_{LIBS,STATIC_LIBS}, not MODULE_DEPS) 10endif 11ifneq ($(MODULE_HOST_LIBS)$(MODULE_HOST_SYSLIBS),) 12$(error $(MODULE) $(MODULE_TYPE) modules must not use MODULE_{LIBS,STATIC_LIBS}, not MODULE_HOST_{LIBS,SYSLIBS}) 13endif 14 15# default install location 16ifeq ($(MODULE_INSTALL_PATH),) 17MODULE_INSTALL_PATH := bin 18endif 19 20MODULE_USERAPP_OBJECT := $(MODULE_OUTNAME).elf 21ALLUSER_APPS += $(MODULE_USERAPP_OBJECT) 22ALLUSER_MODULES += $(MODULE) 23 24ifeq ($(MODULE_GROUP),) 25$(error $(MODULE): $(MODULE_TYPE) modules must set MODULE_GROUP) 26endif 27 28USER_MANIFEST_LINES += $(MODULE_GROUP)$(MODULE_INSTALL_PATH)/$(MODULE_NAME)=$(addsuffix .strip,$(MODULE_USERAPP_OBJECT)) 29 30# These debug info files go in the bootfs image. 31ifeq ($(and $(filter $(subst $(COMMA),$(SPACE),$(BOOTFS_DEBUG_MODULES)),$(MODULE)),yes),yes) 32USER_MANIFEST_DEBUG_INPUTS += $(MODULE_USERAPP_OBJECT) 33endif 34 35MODULE_ALIBS := $(foreach lib,$(MODULE_STATIC_LIBS) $(MODULE_FIDL_LIBS),$(call TOBUILDDIR,$(lib))/lib$(notdir $(lib)).a) 36 37# Link profile runtime into everything compiled with profile instrumentation. 38# The static profile runtime library must come after all static libraries 39# whose instrumented code might call into it. It depends on libzircon, so 40# make sure we're linking that in if we're not already. 41ifeq ($(strip $(call TOBOOL,$(USE_PROFILE)) \ 42 $(filter $(NO_PROFILE),$(MODULE_COMPILEFLAGS))),true) 43MODULE_ALIBS += $(PROFILE_LIB) 44MODULE_LIBS := $(filter-out system/ulib/zircon,$(MODULE_LIBS)) \ 45 system/ulib/zircon 46endif 47 48MODULE_SOLIBS := $(foreach lib,$(MODULE_LIBS),$(call TOBUILDDIR,$(lib))/lib$(notdir $(lib)).so.abi) 49MODULE_EXTRA_OBJS += $(foreach lib,$(MODULE_FIDL_LIBS),$(call TOBUILDDIR,$(lib))/gen/obj/tables.cpp.o) 50 51# Include this in every link. 52MODULE_EXTRA_OBJS += scripts/dso_handle.ld 53 54# Link the ASan runtime into everything compiled with ASan. 55ifeq (,$(filter -fno-sanitize=all,$(MODULE_COMPILEFLAGS))) 56MODULE_EXTRA_OBJS += $(ASAN_SOLIB) 57endif 58 59$(MODULE_USERAPP_OBJECT): _OBJS := $(USER_SCRT1_OBJ) $(MODULE_OBJS) $(MODULE_EXTRA_OBJS) 60$(MODULE_USERAPP_OBJECT): _LIBS := $(MODULE_ALIBS) $(MODULE_SOLIBS) 61$(MODULE_USERAPP_OBJECT): _LDFLAGS := $(MODULE_LDFLAGS) $(USERAPP_LDFLAGS) 62$(MODULE_USERAPP_OBJECT): $(USER_SCRT1_OBJ) $(MODULE_OBJS) $(MODULE_EXTRA_OBJS) $(MODULE_ALIBS) $(MODULE_SOLIBS) 63 @$(MKDIR) 64 $(call BUILDECHO,linking userapp $@) 65 $(NOECHO)$(USER_LD) $(GLOBAL_LDFLAGS) $(ARCH_LDFLAGS) $(_LDFLAGS) \ 66 $(_OBJS) --start-group $(_LIBS) --end-group $(LIBGCC) -o $@ 67 68EXTRA_IDFILES += $(MODULE_USERAPP_OBJECT).id 69 70# build list and debugging files if asked to 71ifeq ($(ENABLE_BUILD_LISTFILES),true) 72EXTRA_BUILDDEPS += $(MODULE_USERAPP_OBJECT).lst 73EXTRA_BUILDDEPS += $(MODULE_USERAPP_OBJECT).sym 74GENERATED += $(MODULE_USERAPP_OBJECT).lst 75GENERATED += $(MODULE_USERAPP_OBJECT).sym 76endif 77