mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-07 20:00:23 +00:00
Generalize ABI mechanism to shared objects
This patch make the ABI mechanism available to shared libraries other than Genode's dynamic linker. It thereby allows us to introduce intermediate ABIs at the granularity of shared libraries. This is useful for slow-moving ABIs such as the libc's interface but it will also become handy for the package management. To implement the feature, the build system had to be streamlined a bit. In particular, archive dependencies and shared-lib dependencies are now handled separately, and the global list of 'SHARED_LIBS' is no more. Now, the variable with the same name holds the per-target list of shared libraries used by the target.
This commit is contained in:
parent
eb6f7e74cc
commit
3d7b92ea50
@ -42,7 +42,7 @@ INC_DIR += $(REP_DIR)/src/core/include \
|
|||||||
$(REP_DIR)/src/include \
|
$(REP_DIR)/src/include \
|
||||||
$(BASE_DIR)/src/include
|
$(BASE_DIR)/src/include
|
||||||
|
|
||||||
LIBS += base-fiasco-common syscall-fiasco
|
LIBS += base-fiasco-common syscall-fiasco cxx
|
||||||
|
|
||||||
include $(GEN_CORE_DIR)/version.inc
|
include $(GEN_CORE_DIR)/version.inc
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
include $(BASE_DIR)/lib/mk/base.inc
|
include $(BASE_DIR)/lib/mk/base.inc
|
||||||
|
|
||||||
LIBS += base-foc-common syscall-foc
|
LIBS += base-foc-common syscall-foc cxx
|
||||||
|
|
||||||
SRC_CC += cap_map_remove.cc cap_alloc.cc
|
SRC_CC += cap_map_remove.cc cap_alloc.cc
|
||||||
SRC_CC += thread_start.cc
|
SRC_CC += thread_start.cc
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
GEN_CORE_DIR = $(BASE_DIR)/src/core
|
GEN_CORE_DIR = $(BASE_DIR)/src/core
|
||||||
|
|
||||||
LIBS += base-foc-common syscall-foc
|
LIBS += base-foc-common syscall-foc cxx
|
||||||
|
|
||||||
SRC_CC += stack_area.cc \
|
SRC_CC += stack_area.cc \
|
||||||
core_log.cc \
|
core_log.cc \
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# \date 2011-12-16
|
# \date 2011-12-16
|
||||||
#
|
#
|
||||||
|
|
||||||
LIBS += core-hw-perf_counter base-hw-common
|
LIBS += core-hw-perf_counter base-hw-common cxx
|
||||||
|
|
||||||
# add include paths
|
# add include paths
|
||||||
INC_DIR += $(BASE_DIR)/../base-hw/src/core/include
|
INC_DIR += $(BASE_DIR)/../base-hw/src/core/include
|
||||||
|
@ -7,4 +7,4 @@ include $(BASE_DIR)/lib/mk/base.inc
|
|||||||
|
|
||||||
SRC_CC += platform_env.cc
|
SRC_CC += platform_env.cc
|
||||||
|
|
||||||
LIBS += syscall-linux cxx
|
LIBS += syscall-linux
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
include $(BASE_DIR)/lib/mk/base.inc
|
include $(BASE_DIR)/lib/mk/base.inc
|
||||||
|
|
||||||
LIBS += base-nova-common
|
LIBS += base-nova-common cxx
|
||||||
SRC_CC += thread_start.cc
|
SRC_CC += thread_start.cc
|
||||||
SRC_CC += cache.cc
|
SRC_CC += cache.cc
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
LIBS = base-nova-common
|
LIBS = base-nova-common cxx
|
||||||
|
|
||||||
GEN_CORE_DIR = $(BASE_DIR)/src/core
|
GEN_CORE_DIR = $(BASE_DIR)/src/core
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ CC_OPT += -pipe \
|
|||||||
-freorder-blocks -funit-at-a-time -fno-exceptions -fno-rtti \
|
-freorder-blocks -funit-at-a-time -fno-exceptions -fno-rtti \
|
||||||
-fno-stack-protector -fvisibility-inlines-hidden \
|
-fno-stack-protector -fvisibility-inlines-hidden \
|
||||||
-fno-asynchronous-unwind-tables -std=gnu++0x
|
-fno-asynchronous-unwind-tables -std=gnu++0x
|
||||||
|
CC_OPT_PIC :=
|
||||||
ifeq ($(filter-out $(SPECS),32bit),)
|
ifeq ($(filter-out $(SPECS),32bit),)
|
||||||
CC_WARN += -Wframe-larger-than=92
|
CC_WARN += -Wframe-larger-than=92
|
||||||
CC_OPT += -mpreferred-stack-boundary=2 -mregparm=3
|
CC_OPT += -mpreferred-stack-boundary=2 -mregparm=3
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
CC_OPT_PIC =
|
CC_OPT_PIC =
|
||||||
|
|
||||||
LIBS += okl4_boot_info base-okl4-common syscall-okl4
|
LIBS += okl4_boot_info base-okl4-common syscall-okl4 cxx
|
||||||
|
|
||||||
GEN_CORE_DIR = $(BASE_DIR)/src/core
|
GEN_CORE_DIR = $(BASE_DIR)/src/core
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
include $(BASE_DIR)/lib/mk/base.inc
|
include $(BASE_DIR)/lib/mk/base.inc
|
||||||
|
|
||||||
LIBS += base-pistachio-common syscall-pistachio
|
LIBS += base-pistachio-common syscall-pistachio cxx
|
||||||
|
|
||||||
SRC_CC += thread_start.cc
|
SRC_CC += thread_start.cc
|
||||||
SRC_CC += cache.cc
|
SRC_CC += cache.cc
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
LIBS = base-pistachio-common syscall-pistachio
|
LIBS = base-pistachio-common syscall-pistachio cxx
|
||||||
|
|
||||||
GEN_CORE_DIR = $(BASE_DIR)/src/core
|
GEN_CORE_DIR = $(BASE_DIR)/src/core
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ SRC_CC += \
|
|||||||
capability_space.cc \
|
capability_space.cc \
|
||||||
pager.cc
|
pager.cc
|
||||||
|
|
||||||
LIBS += base-sel4-common syscall-sel4
|
LIBS += base-sel4-common syscall-sel4 cxx
|
||||||
|
|
||||||
INC_DIR += $(REP_DIR)/src/core/include $(GEN_CORE_DIR)/include \
|
INC_DIR += $(REP_DIR)/src/core/include $(GEN_CORE_DIR)/include \
|
||||||
$(REP_DIR)/src/include $(BASE_DIR)/src/include
|
$(REP_DIR)/src/include $(BASE_DIR)/src/include
|
||||||
|
@ -4,8 +4,6 @@
|
|||||||
# \date 2013-02-14
|
# \date 2013-02-14
|
||||||
#
|
#
|
||||||
|
|
||||||
LIBS += cxx
|
|
||||||
|
|
||||||
SRC_CC += avl_tree.cc
|
SRC_CC += avl_tree.cc
|
||||||
SRC_CC += slab.cc
|
SRC_CC += slab.cc
|
||||||
SRC_CC += allocator_avl.cc
|
SRC_CC += allocator_avl.cc
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Generic ld.lib.so stub library
|
# Generic ld.lib.so ABI stub library
|
||||||
#
|
#
|
||||||
# This library is used to build kernel-independent dynamically linked
|
# This library is used to build kernel-independent dynamically linked
|
||||||
# executables. It does not contain any code or data but only the symbol
|
# executables. It does not contain any code or data but only the symbol
|
||||||
@ -9,27 +9,7 @@
|
|||||||
# time, it is transparently replaced by the variant of the dynamic linker that
|
# time, it is transparently replaced by the variant of the dynamic linker that
|
||||||
# matches the used kernel.
|
# matches the used kernel.
|
||||||
#
|
#
|
||||||
# The rule for generating 'symbols.s' is defined in the architecture-dependent
|
|
||||||
# 'spec/<architecture>/ld.mk' file.
|
|
||||||
#
|
|
||||||
|
|
||||||
SRC_S := symbols.s
|
|
||||||
|
|
||||||
SYMBOLS := $(BASE_DIR)/lib/symbols/ld
|
|
||||||
|
|
||||||
SHARED_LIB := yes
|
SHARED_LIB := yes
|
||||||
|
|
||||||
LD_OPT += -T$(BASE_DIR)/src/lib/ldso/linker.ld
|
LD_OPT += -T$(BASE_DIR)/src/lib/ldso/linker.ld
|
||||||
|
|
||||||
symbols.s: $(MAKEFILE_LIST)
|
|
||||||
|
|
||||||
symbols.s: $(SYMBOLS)
|
|
||||||
$(MSG_CONVERT)$@
|
|
||||||
$(VERBOSE)\
|
|
||||||
sed -e "s/^\(\w\+\) D \(\w\+\)\$$/.data; .global \1; .type \1,%object; .size \1,\2; \1:/p" \
|
|
||||||
-e "s/^\(\w\+\) V/.data; .weak \1; .type \1,%object; \1:/p" \
|
|
||||||
-e "s/^\(\w\+\) T/.text; .global \1; .type \1,%function; \1:/p" \
|
|
||||||
-e "s/^\(\w\+\) R/.section .rodata; .global \1; \1:/p" \
|
|
||||||
-e "s/^\(\w\+\) W/.text; .weak \1; .type \1,%function; \1:/p" \
|
|
||||||
-e "s/^\(\w\+\) B/.bss; .global \1; .type \1,%object; \1:/p" \
|
|
||||||
$(SYMBOLS) > $@
|
|
||||||
|
@ -184,8 +184,8 @@ _ZN6Genode18Signal_transmitterC1ENS_10CapabilityINS_14Signal_contextEEE T
|
|||||||
_ZN6Genode18Signal_transmitterC2ENS_10CapabilityINS_14Signal_contextEEE T
|
_ZN6Genode18Signal_transmitterC2ENS_10CapabilityINS_14Signal_contextEEE T
|
||||||
_ZN6Genode18server_socket_pairEv T
|
_ZN6Genode18server_socket_pairEv T
|
||||||
_ZN6Genode20env_session_id_spaceEv T
|
_ZN6Genode20env_session_id_spaceEv T
|
||||||
_ZN6Genode25env_stack_area_region_mapE B
|
_ZN6Genode25env_stack_area_region_mapE B 4
|
||||||
_ZN6Genode26env_stack_area_ram_sessionE B
|
_ZN6Genode26env_stack_area_ram_sessionE B 4
|
||||||
_ZN6Genode29upgrade_pd_quota_non_blockingEm T
|
_ZN6Genode29upgrade_pd_quota_non_blockingEm T
|
||||||
_ZN6Genode3Log3logEv T
|
_ZN6Genode3Log3logEv T
|
||||||
_ZN6Genode3Log8_acquireENS0_4TypeE T
|
_ZN6Genode3Log8_acquireENS0_4TypeE T
|
||||||
@ -618,8 +618,8 @@ dl_iterate_phdr T
|
|||||||
dl_unwind_find_exidx T
|
dl_unwind_find_exidx T
|
||||||
genode_argc D 4
|
genode_argc D 4
|
||||||
genode_argv D 8
|
genode_argv D 8
|
||||||
genode_envp B
|
genode_envp B 4
|
||||||
lx_environ B
|
lx_environ B 4
|
||||||
memcpy W
|
memcpy W
|
||||||
memmove W
|
memmove W
|
||||||
memset W
|
memset W
|
||||||
|
@ -38,12 +38,14 @@ endif
|
|||||||
append_lib_to_progress_log:
|
append_lib_to_progress_log:
|
||||||
@echo "LIBS_READY += $(LIB)" >> $(LIB_PROGRESS_LOG)
|
@echo "LIBS_READY += $(LIB)" >> $(LIB_PROGRESS_LOG)
|
||||||
|
|
||||||
LIB_MK_DIRS = $(foreach REP,$(REPOSITORIES),$(addprefix $(REP)/lib/mk/spec/,$(SPECS)) $(REP)/lib/mk)
|
LIB_MK_DIRS = $(foreach REP,$(REPOSITORIES),$(addprefix $(REP)/lib/mk/spec/, $(SPECS)) $(REP)/lib/mk)
|
||||||
|
SYMBOLS_DIRS = $(foreach REP,$(REPOSITORIES),$(addprefix $(REP)/lib/symbols/spec/,$(SPECS)) $(REP)/lib/symbols)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Of all possible file locations, use the (first) one that actually exist.
|
# Of all possible file locations, use the (first) one that actually exist.
|
||||||
#
|
#
|
||||||
LIB_MK = $(firstword $(wildcard $(addsuffix /$(LIB).mk,$(LIB_MK_DIRS))))
|
LIB_MK = $(firstword $(wildcard $(addsuffix /$(LIB).mk,$(LIB_MK_DIRS))))
|
||||||
|
SYMBOLS = $(firstword $(wildcard $(addsuffix /$(LIB), $(SYMBOLS_DIRS))))
|
||||||
|
|
||||||
#
|
#
|
||||||
# Sanity check to detect missing library description file
|
# Sanity check to detect missing library description file
|
||||||
@ -74,26 +76,19 @@ include $(BASE_DIR)/mk/base-libs.mk
|
|||||||
include $(LIB_MK)
|
include $(LIB_MK)
|
||||||
|
|
||||||
ifdef SHARED_LIB
|
ifdef SHARED_LIB
|
||||||
#
|
|
||||||
# For shared libraries, we have to make sure to build ldso support before
|
|
||||||
# building a shared library.
|
|
||||||
#
|
|
||||||
LIBS += ldso-startup
|
LIBS += ldso-startup
|
||||||
|
|
||||||
ifneq ($(LIB),$(DYNAMIC_LINKER))
|
|
||||||
LIBS += $(DYNAMIC_LINKER)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#
|
#
|
||||||
# Ensure that startup_dyn is build for the dynamic programs that depend on a
|
# Hide archive dependencies of shared libraries from users of the shared
|
||||||
# shared library. They add it to their dependencies as replacement for the
|
# library. Library users examine the 'DEP_A_<lib>' variable to determine
|
||||||
# static-case startup as soon as they recognize that they are dynamic.
|
# transitive dependencies. For shared libraries, this variable remains
|
||||||
# The current library in contrast filters-out startup_dyn from its
|
# undefined.
|
||||||
# dependencies before they get merged.
|
|
||||||
#
|
#
|
||||||
DEP_VAR_NAME := DEP_$(LIB).lib.so
|
ifdef SHARED_LIB
|
||||||
|
DEP_A_VAR_NAME := PRIVATE_DEP_A_$(LIB)
|
||||||
else
|
else
|
||||||
DEP_VAR_NAME := DEP_$(LIB).lib
|
DEP_A_VAR_NAME := DEP_A_$(LIB)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -116,30 +111,35 @@ generate_lib_rule_for_defect_library:
|
|||||||
LIBS_TO_VISIT = $(filter-out $(LIBS_READY),$(LIBS))
|
LIBS_TO_VISIT = $(filter-out $(LIBS_READY),$(LIBS))
|
||||||
|
|
||||||
generate_lib_rule:
|
generate_lib_rule:
|
||||||
ifneq ($(LIBS),)
|
|
||||||
@(echo "$(DEP_VAR_NAME) = $(foreach l,$(LIBS),$l.lib \$$(DEP_$l.lib))"; \
|
|
||||||
echo "") >> $(LIB_DEP_FILE)
|
|
||||||
endif
|
|
||||||
ifneq ($(DEP_MISSING_PORTS),)
|
ifneq ($(DEP_MISSING_PORTS),)
|
||||||
@(echo "MISSING_PORTS += $(DEP_MISSING_PORTS)"; \
|
@(echo "MISSING_PORTS += $(DEP_MISSING_PORTS)"; \
|
||||||
echo "") >> $(LIB_DEP_FILE)
|
echo "") >> $(LIB_DEP_FILE)
|
||||||
|
endif
|
||||||
|
@for i in $(LIBS_TO_VISIT); do \
|
||||||
|
$(MAKE) $(VERBOSE_DIR) -f $(BASE_DIR)/mk/dep_lib.mk REP_DIR=$(REP_DIR) LIB=$$i; done
|
||||||
|
ifneq ($(LIBS),)
|
||||||
|
@(echo "$(DEP_A_VAR_NAME) = $(foreach l,$(LIBS),\$${ARCHIVE_NAME($l)} \$$(DEP_A_$l))"; \
|
||||||
|
echo "DEP_SO_$(LIB) = $(foreach l,$(LIBS),\$${SO_NAME($l)} \$$(DEP_SO_$l))"; \
|
||||||
|
echo "") >> $(LIB_DEP_FILE)
|
||||||
endif
|
endif
|
||||||
@(echo "$(LIB).lib: check_ports $(addsuffix .lib,$(LIBS))"; \
|
@(echo "$(LIB).lib: check_ports $(addsuffix .lib,$(LIBS))"; \
|
||||||
echo " @\$$(MKDIR) -p \$$(LIB_CACHE_DIR)/$(LIB)"; \
|
echo " @\$$(MKDIR) -p \$$(LIB_CACHE_DIR)/$(LIB)"; \
|
||||||
echo " \$$(VERBOSE_MK)\$$(MAKE) $(VERBOSE_DIR) -C \$$(LIB_CACHE_DIR)/$(LIB) -f \$$(BASE_DIR)/mk/lib.mk \\"; \
|
echo " \$$(VERBOSE_MK)\$$(MAKE) $(VERBOSE_DIR) -C \$$(LIB_CACHE_DIR)/$(LIB) -f \$$(BASE_DIR)/mk/lib.mk \\"; \
|
||||||
echo " REP_DIR=$(REP_DIR) \\"; \
|
echo " REP_DIR=$(REP_DIR) \\"; \
|
||||||
echo " LIB_MK=$(LIB_MK) \\"; \
|
echo " LIB_MK=$(LIB_MK) \\"; \
|
||||||
|
echo " SYMBOLS=$(SYMBOLS) \\"; \
|
||||||
echo " LIB=$(LIB) \\"; \
|
echo " LIB=$(LIB) \\"; \
|
||||||
echo " DEPS=\"\$$(sort \$$($(DEP_VAR_NAME)))\" \\"; \
|
echo " ARCHIVES=\"\$$(sort \$$($(DEP_A_VAR_NAME)))\" \\"; \
|
||||||
|
echo " SHARED_LIBS=\"\$$(sort \$$(DEP_SO_$(LIB)))\" \\"; \
|
||||||
echo " BUILD_BASE_DIR=$(BUILD_BASE_DIR) \\"; \
|
echo " BUILD_BASE_DIR=$(BUILD_BASE_DIR) \\"; \
|
||||||
echo " SHELL=$(SHELL) \\"; \
|
echo " SHELL=$(SHELL) \\"; \
|
||||||
echo " SHARED_LIBS=\"\$$(SHARED_LIBS)\"\\"; \
|
|
||||||
echo " INSTALL_DIR=\$$(INSTALL_DIR)"; \
|
echo " INSTALL_DIR=\$$(INSTALL_DIR)"; \
|
||||||
echo "") >> $(LIB_DEP_FILE)
|
echo "") >> $(LIB_DEP_FILE)
|
||||||
@for i in $(LIBS_TO_VISIT); do \
|
|
||||||
$(MAKE) $(VERBOSE_DIR) -f $(BASE_DIR)/mk/dep_lib.mk REP_DIR=$(REP_DIR) LIB=$$i; done
|
|
||||||
ifdef SHARED_LIB
|
ifdef SHARED_LIB
|
||||||
@(echo "SHARED_LIBS += $(LIB)"; \
|
@(echo "SO_NAME($(LIB)) := $(LIB).lib.so"; \
|
||||||
|
echo "") >> $(LIB_DEP_FILE)
|
||||||
|
else
|
||||||
|
@(echo "ARCHIVE_NAME($(LIB)) := $(LIB).lib.a"; \
|
||||||
echo "") >> $(LIB_DEP_FILE)
|
echo "") >> $(LIB_DEP_FILE)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -51,7 +51,10 @@ LIBS_TO_VISIT = $(filter-out $(LIBS_READY),$(LIBS))
|
|||||||
#
|
#
|
||||||
gen_prg_rule:
|
gen_prg_rule:
|
||||||
ifneq ($(LIBS),)
|
ifneq ($(LIBS),)
|
||||||
@(echo "DEP_$(TARGET).prg = $(foreach l,$(LIBS),$l.lib \$$(DEP_$l.lib))"; \
|
@for i in $(LIBS_TO_VISIT); do \
|
||||||
|
$(MAKE) $(VERBOSE_DIR) -f $(BASE_DIR)/mk/dep_lib.mk REP_DIR=$(REP_DIR) LIB=$$i; done
|
||||||
|
@(echo "DEP_A_$(TARGET).prg = $(foreach l,$(LIBS),\$${ARCHIVE_NAME($l)} \$$(DEP_A_$l))"; \
|
||||||
|
echo "DEP_SO_$(TARGET).prg = $(foreach l,$(LIBS),\$${SO_NAME($l)} \$$(DEP_SO_$l))"; \
|
||||||
echo "") >> $(LIB_DEP_FILE)
|
echo "") >> $(LIB_DEP_FILE)
|
||||||
endif
|
endif
|
||||||
ifneq ($(DEP_MISSING_PORTS),)
|
ifneq ($(DEP_MISSING_PORTS),)
|
||||||
@ -64,20 +67,18 @@ endif
|
|||||||
echo " REP_DIR=$(REP_DIR) \\"; \
|
echo " REP_DIR=$(REP_DIR) \\"; \
|
||||||
echo " PRG_REL_DIR=$(PRG_REL_DIR) \\"; \
|
echo " PRG_REL_DIR=$(PRG_REL_DIR) \\"; \
|
||||||
echo " BUILD_BASE_DIR=$(BUILD_BASE_DIR) \\"; \
|
echo " BUILD_BASE_DIR=$(BUILD_BASE_DIR) \\"; \
|
||||||
echo " DEPS=\"\$$(DEP_$(TARGET).prg)\" \\"; \
|
echo " ARCHIVES=\"\$$(sort \$$(DEP_A_$(TARGET).prg))\" \\"; \
|
||||||
|
echo " SHARED_LIBS=\"\$$(sort \$$(DEP_SO_$(TARGET).prg))\" \\"; \
|
||||||
echo " SHELL=$(SHELL) \\"; \
|
echo " SHELL=$(SHELL) \\"; \
|
||||||
echo " INSTALL_DIR=\"\$$(INSTALL_DIR)\""; \
|
echo " INSTALL_DIR=\"\$$(INSTALL_DIR)\""; \
|
||||||
echo "") >> $(LIB_DEP_FILE)
|
echo "") >> $(LIB_DEP_FILE)
|
||||||
@for i in $(LIBS_TO_VISIT); do \
|
|
||||||
$(MAKE) $(VERBOSE_DIR) -f $(BASE_DIR)/mk/dep_lib.mk REP_DIR=$(REP_DIR) LIB=$$i; done
|
|
||||||
#
|
#
|
||||||
# Make 'all' depend on the target, which triggers the building of the target
|
# Make 'all' depend on the target, which triggers the building of the target
|
||||||
# and the traversal of the target's library dependencies. But we only do so
|
# and the traversal of the target's library dependencies. But we only do so
|
||||||
# if the target does not depend on any library with unsatisfied build
|
# if the target does not depend on any library with unsatisfied build
|
||||||
# requirements. In such a case, the target cannot be linked anyway.
|
# requirements. In such a case, the target cannot be linked anyway.
|
||||||
#
|
#
|
||||||
@(echo ""; \
|
@(echo "ifeq (\$$(filter \$$(DEP_A_$(TARGET).prg:.lib.a=) \$$(DEP_SO_$(TARGET).prg:.lib.so=) $(LIBS),\$$(INVALID_DEPS)),)"; \
|
||||||
echo "ifeq (\$$(filter \$$(DEP_$(TARGET).prg:.lib=),\$$(INVALID_DEPS)),)"; \
|
|
||||||
echo "all: $(TARGET).prg"; \
|
echo "all: $(TARGET).prg"; \
|
||||||
echo "endif") >> $(LIB_DEP_FILE)
|
echo "endif") >> $(LIB_DEP_FILE)
|
||||||
#
|
#
|
||||||
|
@ -74,9 +74,13 @@ endif
|
|||||||
#
|
#
|
||||||
# Compiling Rust sources
|
# Compiling Rust sources
|
||||||
#
|
#
|
||||||
%.o: %.rs
|
%.rlib: %.rs
|
||||||
$(MSG_COMP)$@
|
$(MSG_COMP)$@
|
||||||
$(VERBOSE)rustc $(CC_RUSTC_OPT) -o $@ $<
|
$(VERBOSE)rustc $(CC_RUSTC_OPT) --crate-type rlib -o $@ $<
|
||||||
|
|
||||||
|
%.o: %.rlib
|
||||||
|
$(MSG_CONVERT)$@
|
||||||
|
$(VERBOSE)ar p $< $*.0.o > $@
|
||||||
|
|
||||||
#
|
#
|
||||||
# Assembler files that must be preprocessed are fed to the C compiler.
|
# Assembler files that must be preprocessed are fed to the C compiler.
|
||||||
@ -100,3 +104,62 @@ binary_%.o: %
|
|||||||
$(MSG_CONVERT)$@
|
$(MSG_CONVERT)$@
|
||||||
$(VERBOSE)echo ".global $(symbol_name)_start, $(symbol_name)_end; .data; .align 4; $(symbol_name)_start:; .incbin \"$<\"; $(symbol_name)_end:" |\
|
$(VERBOSE)echo ".global $(symbol_name)_start, $(symbol_name)_end; .data; .align 4; $(symbol_name)_start:; .incbin \"$<\"; $(symbol_name)_end:" |\
|
||||||
$(AS) $(AS_OPT) -f -o $@ -
|
$(AS) $(AS_OPT) -f -o $@ -
|
||||||
|
|
||||||
|
#
|
||||||
|
# Generate assembler file from symbol list
|
||||||
|
#
|
||||||
|
# For undefined symbols (type U), we create a hard dependency by referencing
|
||||||
|
# the symbols from the assembly file. The reference is created in the form of
|
||||||
|
# a '.long' value with the address of the symbol. On x86_64, this is not
|
||||||
|
# possible for PIC code. Hence, we reference the symbol via a PIC-compatible
|
||||||
|
# movq instruction instead.
|
||||||
|
#
|
||||||
|
# If we declared the symbol as '.global' without using it, the undefined symbol
|
||||||
|
# gets discarded at link time unless it is directly referenced by the target.
|
||||||
|
# This is a problem in situations where the undefined symbol is resolved by an
|
||||||
|
# archive rather than the target. I.e., when linking posix.lib.a (which
|
||||||
|
# provides 'Libc::Component::construct'), the 'construct' function is merely
|
||||||
|
# referenced by the libc.lib.so's 'Component::construct' function. But this
|
||||||
|
# reference apparently does not suffice to keep the posix.lib.a's symbol. By
|
||||||
|
# adding a hard dependency, we force the linker to resolve the symbol and don't
|
||||||
|
# drop posix.lib.a.
|
||||||
|
#
|
||||||
|
ASM_SYM_DEPENDENCY := .long \1
|
||||||
|
ifeq ($(filter-out $(SPECS),x86_64),)
|
||||||
|
ASM_SYM_DEPENDENCY := movq \1@GOTPCREL(%rip), %rax
|
||||||
|
endif
|
||||||
|
|
||||||
|
%.symbols.s: %.symbols
|
||||||
|
$(MSG_CONVERT)$@
|
||||||
|
$(VERBOSE)\
|
||||||
|
sed -e "s/^\(\w\+\) D \(\w\+\)\$$/.data; .global \1; .type \1,%object; .size \1,\2; \1:/p" \
|
||||||
|
-e "s/^\(\w\+\) V/.data; .weak \1; .type \1,%object; \1:/p" \
|
||||||
|
-e "s/^\(\w\+\) T/.text; .global \1; .type \1,%function; \1:/p" \
|
||||||
|
-e "s/^\(\w\+\) R/.section .rodata; .global \1; \1:/p" \
|
||||||
|
-e "s/^\(\w\+\) W/.text; .weak \1; .type \1,%function; \1:/p" \
|
||||||
|
-e "s/^\(\w\+\) B \(\w\+\)\$$/.bss; .global \1; .type \1,%object; .size \1,\2; \1:/p" \
|
||||||
|
-e "s/^\(\w\+\) U/.text; .global \1; $(ASM_SYM_DEPENDENCY)/p" \
|
||||||
|
$< > $@
|
||||||
|
|
||||||
|
#
|
||||||
|
# Create local symbol links for the used shared libraries
|
||||||
|
#
|
||||||
|
# Depending on whether an ABI stub for a given shared library exists, we link
|
||||||
|
# the target against the ABI stub or the real shared library.
|
||||||
|
#
|
||||||
|
# We check if the symbolic links are up-to-date by filtering all links that
|
||||||
|
# already match the current shared library targets from the list. If the list
|
||||||
|
# is not empty we flag 'SHARED_LIBS' as phony to make sure that the symbolic
|
||||||
|
# links are recreated. E.g., if a symbol list is added for library, the next
|
||||||
|
# time a user of the library is linked, the ABI stub should be used instead of
|
||||||
|
# the library.
|
||||||
|
#
|
||||||
|
select_so = $(firstword $(wildcard $(LIB_CACHE_DIR)/$(1:.lib.so=)/$(1:.lib.so=).abi.so \
|
||||||
|
$(LIB_CACHE_DIR)/$(1:.lib.so=)/$(1:.lib.so=).lib.so))
|
||||||
|
|
||||||
|
ifneq ($(filter-out $(foreach s,$(SHARED_LIBS),$(realpath $s)), \
|
||||||
|
$(foreach s,$(SHARED_LIBS),$(call select_so,$s))),)
|
||||||
|
.PHONY: $(SHARED_LIBS)
|
||||||
|
endif
|
||||||
|
$(SHARED_LIBS):
|
||||||
|
$(VERBOSE)ln -sf $(call select_so,$@) $@
|
||||||
|
@ -110,6 +110,12 @@ CC_OPT += $(CC_OPT_NOSTDINC) -g $(CC_MARCH) $(CC_OLEVEL) $(CC_OPT_DEP) $(CC_WARN
|
|||||||
#
|
#
|
||||||
CC_OPT += $(CC_OPT_$(subst .,_,$*))
|
CC_OPT += $(CC_OPT_$(subst .,_,$*))
|
||||||
|
|
||||||
|
#
|
||||||
|
# Build program position independent as well
|
||||||
|
#
|
||||||
|
CC_OPT_PIC ?= -fPIC
|
||||||
|
CC_OPT += $(CC_OPT_PIC)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Predefine C and C++ specific compiler options with their common values
|
# Predefine C and C++ specific compiler options with their common values
|
||||||
#
|
#
|
||||||
@ -118,13 +124,11 @@ CC_C_OPT += $(CC_OPT)
|
|||||||
CC_ADA_OPT += $(CC_OLEVEL) $(CC_WARN)
|
CC_ADA_OPT += $(CC_OLEVEL) $(CC_WARN)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Use the correct linker
|
# Rust-specific arguments
|
||||||
|
#
|
||||||
|
# Use the correct linker, include dependencies.
|
||||||
#
|
#
|
||||||
CC_RUSTC_OPT += -C linker=$(LD)
|
CC_RUSTC_OPT += -C linker=$(LD)
|
||||||
|
|
||||||
#
|
|
||||||
# Include dependencies
|
|
||||||
#
|
|
||||||
CC_RUSTC_OPT += $(foreach lib,$(LIBS),-L$(LIB_CACHE_DIR)/$(lib))
|
CC_RUSTC_OPT += $(foreach lib,$(LIBS),-L$(LIB_CACHE_DIR)/$(lib))
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -11,7 +11,8 @@
|
|||||||
## BUILD_BASE_DIR - base of build directory tree
|
## BUILD_BASE_DIR - base of build directory tree
|
||||||
## LIB_CACHE_DIR - library build cache location
|
## LIB_CACHE_DIR - library build cache location
|
||||||
## INSTALL_DIR - program target build directory
|
## INSTALL_DIR - program target build directory
|
||||||
## DEPS - library dependencies
|
## SHARED_LIBS - shared-library dependencies of the library
|
||||||
|
## ARCHIVES - archive dependencies of the library
|
||||||
## REP_DIR - repository where the library resides
|
## REP_DIR - repository where the library resides
|
||||||
## CONTRIB_DIR - location of ported 3rd-party source codes
|
## CONTRIB_DIR - location of ported 3rd-party source codes
|
||||||
##
|
##
|
||||||
@ -23,15 +24,6 @@ include $(BASE_DIR)/mk/base-libs.mk
|
|||||||
#
|
#
|
||||||
all:
|
all:
|
||||||
|
|
||||||
#
|
|
||||||
# Make a rlib or dylib instead of object file
|
|
||||||
#
|
|
||||||
ifndef SHARED_LIB
|
|
||||||
CC_RUSTC_OPT += --crate-type rlib
|
|
||||||
else
|
|
||||||
CC_RUSTC_OPT += --crate-type dylib
|
|
||||||
endif
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Include common utility functions
|
# Include common utility functions
|
||||||
#
|
#
|
||||||
@ -79,15 +71,45 @@ ifdef SHARED_LIB
|
|||||||
LIB_SO := $(addsuffix .lib.so,$(LIB))
|
LIB_SO := $(addsuffix .lib.so,$(LIB))
|
||||||
INSTALL_SO := $(INSTALL_DIR)/$(LIB_SO)
|
INSTALL_SO := $(INSTALL_DIR)/$(LIB_SO)
|
||||||
LIB_FILENAME := $(LIB_SO)
|
LIB_FILENAME := $(LIB_SO)
|
||||||
else ifdef SRC_RS
|
|
||||||
LIB_RLIB := $(addsuffix .rlib,$(LIB))
|
|
||||||
LIB_FILENAME := $(LIB_RLIB)
|
|
||||||
else
|
else
|
||||||
LIB_A := $(addsuffix .lib.a,$(LIB))
|
LIB_A := $(addsuffix .lib.a,$(LIB))
|
||||||
LIB_FILENAME := $(LIB_A)
|
LIB_FILENAME := $(LIB_A)
|
||||||
endif
|
endif
|
||||||
LIB_TAG := $(addsuffix .lib.tag,$(LIB))
|
LIB_TAG := $(addsuffix .lib.tag,$(LIB))
|
||||||
|
|
||||||
|
#
|
||||||
|
# If a symbol list is provided, we create an ABI stub named '<lib>.abi.so'
|
||||||
|
#
|
||||||
|
# The ABI-stub library does not contain any code or data but only the symbol
|
||||||
|
# information of the binary interface (ABI) of the shared library.
|
||||||
|
#
|
||||||
|
# The ABI stub is linked by the users of the library (executables or shared
|
||||||
|
# objects) instead of the real library. This effectively decouples the library
|
||||||
|
# users from the concrete library instance but binds them merely to the
|
||||||
|
# library's binary interface. Note that the ABI stub is not used at runtime at
|
||||||
|
# all. At runtime, the real library that implements the ABI is loaded by the
|
||||||
|
# dynamic linker.
|
||||||
|
#
|
||||||
|
# The symbol information are incorporated into the ABI stub via an assembly
|
||||||
|
# file named '<lib>.symbols.s' that is generated from the library's symbol
|
||||||
|
# list. We create a symbolic link from the symbol file to the local directory.
|
||||||
|
# By using '.symbols' as file extension, the pattern rule '%.symbols.s:
|
||||||
|
# %.symbols' defined in 'generic.mk' is automatically applied for creating the
|
||||||
|
# assembly file from the symbols file.
|
||||||
|
#
|
||||||
|
# The '.PRECIOUS' special target prevents make to remove the intermediate
|
||||||
|
# assembler file. Otherwise make would spill the build log with messages
|
||||||
|
# like "rm libc.symbols.s".
|
||||||
|
#
|
||||||
|
ifneq ($(SYMBOLS),)
|
||||||
|
ABI_SO := $(addsuffix .abi.so,$(LIB))
|
||||||
|
|
||||||
|
$(LIB).symbols:
|
||||||
|
$(VERBOSE)ln -sf $(SYMBOLS) $@
|
||||||
|
|
||||||
|
.PRECIOUS: $(LIB).symbols.s
|
||||||
|
endif
|
||||||
|
|
||||||
#
|
#
|
||||||
# Link libgcc to shared libraries
|
# Link libgcc to shared libraries
|
||||||
#
|
#
|
||||||
@ -98,16 +120,6 @@ ifdef SHARED_LIB
|
|||||||
LIBGCC = $(shell $(CC) $(CC_MARCH) -print-libgcc-file-name)
|
LIBGCC = $(shell $(CC) $(CC_MARCH) -print-libgcc-file-name)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#
|
|
||||||
# Build libraries position-independent
|
|
||||||
#
|
|
||||||
# This option is required for building shared objects but also for static
|
|
||||||
# libraries that are (potentially) linked against shared objects. Hence,
|
|
||||||
# we build all libraries with '-fPIC'.
|
|
||||||
#
|
|
||||||
CC_OPT_PIC ?= -fPIC
|
|
||||||
CC_OPT += $(CC_OPT_PIC)
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Print message for the currently built library
|
# Print message for the currently built library
|
||||||
#
|
#
|
||||||
@ -130,11 +142,33 @@ all: $(LIB_TAG)
|
|||||||
#
|
#
|
||||||
$(LIB_TAG) $(OBJECTS): $(HOST_TOOLS)
|
$(LIB_TAG) $(OBJECTS): $(HOST_TOOLS)
|
||||||
|
|
||||||
$(LIB_TAG): $(LIB_A) $(LIB_SO) $(INSTALL_SO) $(LIB_RLIB)
|
$(LIB_TAG): $(LIB_A) $(LIB_SO) $(ABI_SO) $(INSTALL_SO)
|
||||||
@touch $@
|
@touch $@
|
||||||
|
|
||||||
include $(BASE_DIR)/mk/generic.mk
|
include $(BASE_DIR)/mk/generic.mk
|
||||||
|
|
||||||
|
#
|
||||||
|
# Rust support
|
||||||
|
#
|
||||||
|
# For a rust library, we create both an actual library (lib.a or lib.so) that
|
||||||
|
# is used for linking the final binary, and an rlib file that is required for
|
||||||
|
# compiling rust source codes that use the library. As the rlib is created from
|
||||||
|
# the file specified at 'SRC_RS' via the pattern rule '%.rlib: %.rs', its name
|
||||||
|
# corresponds to the source file, not the library name. To enable rustc to find
|
||||||
|
# the library when compiling dependent compilation units, we create an
|
||||||
|
# appropriately named symlink that points to the rlib file.
|
||||||
|
#
|
||||||
|
ifneq ($(SRC_RS),)
|
||||||
|
ifneq ($(words $(SRC_RS)),1)
|
||||||
|
$(error 'SRC_RC' of library $(LIB) has more than one element: $(SRC_RC))
|
||||||
|
endif
|
||||||
|
$(LIB_A): $(LIB).rlib
|
||||||
|
endif
|
||||||
|
|
||||||
|
.PRECIOUS: $(SRC_RC:.rs=.rlib)
|
||||||
|
$(LIB).rlib: $(SRC_RS:.rs=.rlib)
|
||||||
|
$(VERBOSE)ln -s $< $@
|
||||||
|
|
||||||
#
|
#
|
||||||
# Rule to build the <libname>.lib.a file
|
# Rule to build the <libname>.lib.a file
|
||||||
#
|
#
|
||||||
@ -147,71 +181,64 @@ $(LIB_A): $(OBJECTS)
|
|||||||
$(MSG_MERGE)$(LIB_A)
|
$(MSG_MERGE)$(LIB_A)
|
||||||
$(VERBOSE)$(RM) -f $@
|
$(VERBOSE)$(RM) -f $@
|
||||||
$(VERBOSE)$(AR) -rcs $@ $(OBJECTS)
|
$(VERBOSE)$(AR) -rcs $@ $(OBJECTS)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Rename from object to rlib
|
# Link ldso-startup library to each shared library
|
||||||
#
|
#
|
||||||
$(LIB_RLIB): $(OBJECTS)
|
ifdef SHARED_LIB
|
||||||
$(MSG_RENAME)$(LIB_RLIB)
|
override ARCHIVES += ldso-startup.lib.a
|
||||||
$(VERBOSE)cp $(OBJECTS) $(LIB_RLIB)
|
endif
|
||||||
|
|
||||||
#
|
#
|
||||||
# Don't link base libraries against shared libraries except for ld.lib.so
|
# Don't link base libraries against shared libraries except for ld.lib.so
|
||||||
#
|
#
|
||||||
ifdef SHARED_LIB
|
|
||||||
ifneq ($(LIB_IS_DYNAMIC_LINKER),yes)
|
ifneq ($(LIB_IS_DYNAMIC_LINKER),yes)
|
||||||
override DEPS := $(filter-out $(BASE_LIBS:=.lib),$(DEPS))
|
override ARCHIVES := $(filter-out $(BASE_LIBS:=.lib.a),$(ARCHIVES))
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#
|
#
|
||||||
# The 'sort' is needed to ensure the same link order regardless
|
# The 'sort' is needed to ensure the same link order regardless
|
||||||
# of the find order, which uses to vary among different systems.
|
# of the find order, which uses to vary among different systems.
|
||||||
#
|
#
|
||||||
STATIC_LIBS := $(foreach l,$(DEPS:.lib=),$(LIB_CACHE_DIR)/$l/$l.lib.a)
|
STATIC_LIBS := $(sort $(foreach l,$(ARCHIVES:.lib.a=),$(LIB_CACHE_DIR)/$l/$l.lib.a))
|
||||||
STATIC_LIBS := $(sort $(wildcard $(STATIC_LIBS)))
|
|
||||||
STATIC_LIBS_BRIEF := $(subst $(LIB_CACHE_DIR),$$libs,$(STATIC_LIBS))
|
STATIC_LIBS_BRIEF := $(subst $(LIB_CACHE_DIR),$$libs,$(STATIC_LIBS))
|
||||||
|
|
||||||
#
|
#
|
||||||
# Rule to build the <libname>.lib.so file
|
# Rule to build the <libname>.lib.so file
|
||||||
#
|
#
|
||||||
# The 'LIBS' variable may contain static and shared sub libraries. When linking
|
# When linking the shared library, we have to link all shared sub libraries
|
||||||
# the shared library, we have to link all shared sub libraries to the library
|
# (LIB_SO_DEPS) to the library to store the library-dependency information in
|
||||||
# to store the library-dependency information in the library. Because we do not
|
# the generated shared object.
|
||||||
# know which sub libraries are static or shared prior calling 'build_libs.mk',
|
|
||||||
# we use an explicit call to the 'lib_so_wildcard' macro to determine the subset
|
|
||||||
# of libraries that are shared.
|
|
||||||
#
|
#
|
||||||
# The 'ldso-startup/startup.o' object file, which contains the support code for
|
# The 'ldso-startup/startup.o' object file, which contains the support code for
|
||||||
# constructing static objects must be specified as object file to prevent the
|
# constructing static objects must be specified as object file to prevent the
|
||||||
# linker from garbage-collecting it.
|
# linker from garbage-collecting it.
|
||||||
#
|
#
|
||||||
|
|
||||||
USED_SHARED_LIBS := $(filter $(DEPS:.lib=),$(SHARED_LIBS))
|
|
||||||
USED_SO_FILES := $(foreach s,$(USED_SHARED_LIBS),$(LIB_CACHE_DIR)/$s/$s.lib.so)
|
|
||||||
|
|
||||||
#
|
|
||||||
# Don't link ld libary against shared objects
|
|
||||||
#
|
|
||||||
USED_SO_FILES := $(filter-out %$(DYNAMIC_LINKER).lib.so,$(USED_SO_FILES))
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Default entry point of shared libraries
|
# Default entry point of shared libraries
|
||||||
#
|
#
|
||||||
ENTRY_POINT ?= 0x0
|
ENTRY_POINT ?= 0x0
|
||||||
|
|
||||||
$(LIB_SO): $(STATIC_LIBS) $(OBJECTS) $(wildcard $(LD_SCRIPT_SO))
|
$(LIB_SO) $(ABI_SO): $(SHARED_LIBS)
|
||||||
|
|
||||||
|
$(LIB_SO): $(STATIC_LIBS) $(OBJECTS) $(wildcard $(LD_SCRIPT_SO)) $(LIB_SO_DEPS)
|
||||||
$(MSG_MERGE)$(LIB_SO)
|
$(MSG_MERGE)$(LIB_SO)
|
||||||
$(VERBOSE)libs=$(LIB_CACHE_DIR); $(LD) -o $(LIB_SO) -shared --eh-frame-hdr \
|
$(VERBOSE)libs=$(LIB_CACHE_DIR); $(LD) -o $(LIB_SO) -shared --eh-frame-hdr \
|
||||||
$(LD_OPT) \
|
$(LD_OPT) -T $(LD_SCRIPT_SO) --entry=$(ENTRY_POINT) \
|
||||||
-T $(LD_SCRIPT_SO) \
|
--whole-archive --start-group \
|
||||||
--entry=$(ENTRY_POINT) \
|
$(SHARED_LIBS) $(STATIC_LIBS_BRIEF) $(OBJECTS) \
|
||||||
--whole-archive \
|
--end-group --no-whole-archive \
|
||||||
--start-group \
|
|
||||||
$(USED_SO_FILES) $(STATIC_LIBS_BRIEF) $(OBJECTS) \
|
|
||||||
--end-group \
|
|
||||||
--no-whole-archive \
|
|
||||||
$(LIBGCC)
|
$(LIBGCC)
|
||||||
|
|
||||||
|
$(ABI_SO): $(LIB).symbols.o
|
||||||
|
$(MSG_MERGE)$(ABI_SO)
|
||||||
|
$(VERBOSE)$(LD) -o $(ABI_SO) -shared --eh-frame-hdr $(LD_OPT) \
|
||||||
|
-T $(LD_SCRIPT_SO) \
|
||||||
|
--whole-archive --start-group \
|
||||||
|
$(LIB_SO_DEPS) $< \
|
||||||
|
--end-group --no-whole-archive
|
||||||
|
|
||||||
$(INSTALL_SO):
|
$(INSTALL_SO):
|
||||||
$(VERBOSE)ln -sf $(CURDIR)/$(LIB_SO) $@
|
$(VERBOSE)ln -sf $(CURDIR)/$(LIB_SO) $@
|
||||||
|
|
||||||
|
@ -11,6 +11,8 @@
|
|||||||
## VERBOSE - build verboseness modifier
|
## VERBOSE - build verboseness modifier
|
||||||
## VERBOSE_DIR - verboseness modifier for changing directories
|
## VERBOSE_DIR - verboseness modifier for changing directories
|
||||||
## VERBOSE_MK - verboseness of make calls
|
## VERBOSE_MK - verboseness of make calls
|
||||||
|
## SHARED_LIBS - shared-library dependencies of the target
|
||||||
|
## ARCHIVES - archive dependencies of the target
|
||||||
## LIB_CACHE_DIR - library build cache location
|
## LIB_CACHE_DIR - library build cache location
|
||||||
##
|
##
|
||||||
|
|
||||||
@ -19,11 +21,6 @@
|
|||||||
#
|
#
|
||||||
all:
|
all:
|
||||||
|
|
||||||
#
|
|
||||||
# Tell rust to make an object file instead of anything else
|
|
||||||
#
|
|
||||||
CC_RUSTC_OPT += --emit obj
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Include common utility functions
|
# Include common utility functions
|
||||||
#
|
#
|
||||||
@ -62,7 +59,6 @@ endif
|
|||||||
#
|
#
|
||||||
CXX_LINK_OPT += $(CC_MARCH)
|
CXX_LINK_OPT += $(CC_MARCH)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Generic linker script for statically linked binaries
|
# Generic linker script for statically linked binaries
|
||||||
#
|
#
|
||||||
@ -95,23 +91,14 @@ message:
|
|||||||
FORCE:
|
FORCE:
|
||||||
$(SRC_ADA:.adb=.o): FORCE
|
$(SRC_ADA:.adb=.o): FORCE
|
||||||
|
|
||||||
#
|
|
||||||
# The 'sort' is needed to ensure the same link order regardless
|
|
||||||
# of the find order, which uses to vary among different systems.
|
|
||||||
#
|
|
||||||
SHARED_LIBS := $(foreach l,$(DEPS:.lib=),$(LIB_CACHE_DIR)/$l/$l.lib.so)
|
|
||||||
SHARED_LIBS := $(sort $(wildcard $(SHARED_LIBS)))
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Use CXX for linking
|
# Use CXX for linking
|
||||||
#
|
#
|
||||||
LD_CMD ?= $(CXX)
|
LD_CMD ?= $(CXX)
|
||||||
|
|
||||||
LD_CMD += $(CXX_LINK_OPT)
|
LD_CMD += $(CXX_LINK_OPT)
|
||||||
|
|
||||||
ifeq ($(SHARED_LIBS),)
|
ifeq ($(SHARED_LIBS),)
|
||||||
FILTER_DEPS := $(DEPS:.lib=)
|
LD_SCRIPTS := $(LD_SCRIPT_STATIC)
|
||||||
LD_SCRIPTS := $(LD_SCRIPT_STATIC)
|
|
||||||
else
|
else
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -119,22 +106,14 @@ else
|
|||||||
#
|
#
|
||||||
LD_OPT += --dynamic-list=$(call select_from_repositories,src/ld/genode_dyn.dl)
|
LD_OPT += --dynamic-list=$(call select_from_repositories,src/ld/genode_dyn.dl)
|
||||||
|
|
||||||
LD_SCRIPTS := $(LD_SCRIPT_DYN)
|
LD_SCRIPTS := $(LD_SCRIPT_DYN)
|
||||||
LD_CMD += -Wl,--dynamic-linker=$(DYNAMIC_LINKER).lib.so \
|
LD_CMD += -Wl,--dynamic-linker=$(DYNAMIC_LINKER).lib.so \
|
||||||
-Wl,--eh-frame-hdr
|
-Wl,--eh-frame-hdr -Wl,-rpath-link=.
|
||||||
|
|
||||||
#
|
#
|
||||||
# Filter out the base libraries since they will be provided by the LDSO library
|
# Filter out the base libraries since they will be provided by the LDSO library
|
||||||
#
|
#
|
||||||
FILTER_DEPS := $(filter-out $(BASE_LIBS),$(DEPS:.lib=))
|
override ARCHIVES := $(filter-out $(BASE_LIBS:=.lib.a),$(ARCHIVES))
|
||||||
SHARED_LIBS += $(LIB_CACHE_DIR)/$(DYNAMIC_LINKER)/$(DYNAMIC_LINKER).lib.so
|
|
||||||
|
|
||||||
#
|
|
||||||
# Build program position independent as well
|
|
||||||
#
|
|
||||||
CC_OPT_PIC ?= -fPIC
|
|
||||||
CC_OPT += $(CC_OPT_PIC)
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -142,7 +121,7 @@ endif
|
|||||||
# commas othwerwise. For compatibilty with older tool chains, we use two -Wl
|
# commas othwerwise. For compatibilty with older tool chains, we use two -Wl
|
||||||
# parameters for both components of the linker command line.
|
# parameters for both components of the linker command line.
|
||||||
#
|
#
|
||||||
LD_SCRIPT_PREFIX = -Wl,-T -Wl,
|
LD_SCRIPT_PREFIX := -Wl,-T -Wl,
|
||||||
|
|
||||||
#
|
#
|
||||||
# LD_SCRIPTS may be a list of linker scripts (e.g., in base-linux). Further,
|
# LD_SCRIPTS may be a list of linker scripts (e.g., in base-linux). Further,
|
||||||
@ -151,26 +130,7 @@ LD_SCRIPT_PREFIX = -Wl,-T -Wl,
|
|||||||
#
|
#
|
||||||
LD_CMD += $(addprefix $(LD_SCRIPT_PREFIX), $(LD_SCRIPTS))
|
LD_CMD += $(addprefix $(LD_SCRIPT_PREFIX), $(LD_SCRIPTS))
|
||||||
|
|
||||||
STATIC_LIBS := $(foreach l,$(FILTER_DEPS),$(LIB_CACHE_DIR)/$l/$l.lib.a)
|
STATIC_LIBS := $(foreach l,$(ARCHIVES:.lib.a=),$(LIB_CACHE_DIR)/$l/$l.lib.a)
|
||||||
STATIC_LIBS := $(sort $(wildcard $(STATIC_LIBS)))
|
|
||||||
|
|
||||||
#
|
|
||||||
# --whole-archive does not work with rlibs
|
|
||||||
#
|
|
||||||
RUST_LIBS := $(foreach l,$(FILTER_DEPS),$(LIB_CACHE_DIR)/$l/$l.rlib)
|
|
||||||
RUST_LIBS := $(sort $(wildcard $(RUST_LIBS)))
|
|
||||||
SHORT_RUST_LIBS := $(subst $(LIB_CACHE_DIR),$$libs,$(RUST_LIBS))
|
|
||||||
|
|
||||||
#
|
|
||||||
# For hybrid Linux/Genode programs, prevent the linkage Genode's cxx and base
|
|
||||||
# library because these functionalities are covered by the glibc or by
|
|
||||||
# 'src/platform/lx_hybrid.cc'.
|
|
||||||
#
|
|
||||||
ifeq ($(USE_HOST_LD_SCRIPT),yes)
|
|
||||||
STATIC_LIBS := $(filter-out $(LIB_CACHE_DIR)/startup/startup.lib.a, $(STATIC_LIBS))
|
|
||||||
STATIC_LIBS := $(filter-out $(LIB_CACHE_DIR)/base/base.lib.a, $(STATIC_LIBS))
|
|
||||||
STATIC_LIBS := $(filter-out $(LIB_CACHE_DIR)/cxx/cxx.lib.a, $(STATIC_LIBS))
|
|
||||||
endif
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# We need the linker option '--whole-archive' to make sure that all library
|
# We need the linker option '--whole-archive' to make sure that all library
|
||||||
@ -184,7 +144,7 @@ endif
|
|||||||
# would go undetected if the search stops after the first match.
|
# would go undetected if the search stops after the first match.
|
||||||
#
|
#
|
||||||
LINK_ITEMS := $(OBJECTS) $(STATIC_LIBS) $(SHARED_LIBS)
|
LINK_ITEMS := $(OBJECTS) $(STATIC_LIBS) $(SHARED_LIBS)
|
||||||
SHORT_LINK_ITEMS := $(subst $(LIB_CACHE_DIR),$$libs,$(LINK_ITEMS))
|
LINK_ITEMS_BRIEF := $(subst $(LIB_CACHE_DIR),$$libs,$(LINK_ITEMS))
|
||||||
|
|
||||||
#
|
#
|
||||||
# Trigger the build of host tools
|
# Trigger the build of host tools
|
||||||
@ -192,10 +152,9 @@ SHORT_LINK_ITEMS := $(subst $(LIB_CACHE_DIR),$$libs,$(LINK_ITEMS))
|
|||||||
$(LINK_ITEMS) $(TARGET): $(HOST_TOOLS)
|
$(LINK_ITEMS) $(TARGET): $(HOST_TOOLS)
|
||||||
|
|
||||||
LD_CMD += -Wl,--whole-archive -Wl,--start-group
|
LD_CMD += -Wl,--whole-archive -Wl,--start-group
|
||||||
LD_CMD += $(SHORT_LINK_ITEMS)
|
LD_CMD += $(LINK_ITEMS_BRIEF)
|
||||||
LD_CMD += $(EXT_OBJECTS)
|
LD_CMD += $(EXT_OBJECTS)
|
||||||
LD_CMD += -Wl,--no-whole-archive
|
LD_CMD += -Wl,--no-whole-archive
|
||||||
LD_CMD += $(SHORT_RUST_LIBS)
|
|
||||||
LD_CMD += -Wl,--end-group
|
LD_CMD += -Wl,--end-group
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -211,7 +170,7 @@ LD_CMD += $(LD_LIBGCC)
|
|||||||
# $(TARGET).
|
# $(TARGET).
|
||||||
#
|
#
|
||||||
ifneq ($(OBJECTS),)
|
ifneq ($(OBJECTS),)
|
||||||
$(TARGET): $(LINK_ITEMS) $(wildcard $(LD_SCRIPTS))
|
$(TARGET): $(LINK_ITEMS) $(wildcard $(LD_SCRIPTS)) $(LIB_SO_DEPS)
|
||||||
$(MSG_LINK)$(TARGET)
|
$(MSG_LINK)$(TARGET)
|
||||||
$(VERBOSE)libs=$(LIB_CACHE_DIR); $(LD_CMD) -o $@
|
$(VERBOSE)libs=$(LIB_CACHE_DIR); $(LD_CMD) -o $@
|
||||||
|
|
||||||
@ -225,6 +184,6 @@ endif
|
|||||||
clean_prg_objects:
|
clean_prg_objects:
|
||||||
$(MSG_CLEAN)$(PRG_REL_DIR)
|
$(MSG_CLEAN)$(PRG_REL_DIR)
|
||||||
$(VERBOSE)$(RM) -f $(OBJECTS) $(OBJECTS:.o=.d) $(TARGET)
|
$(VERBOSE)$(RM) -f $(OBJECTS) $(OBJECTS:.o=.d) $(TARGET)
|
||||||
$(VERBOSE)$(RM) -f *.d *.i *.ii *.s *.ali
|
$(VERBOSE)$(RM) -f *.d *.i *.ii *.s *.ali *.lib.so
|
||||||
|
|
||||||
clean: clean_prg_objects
|
clean: clean_prg_objects
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
TARGET = rump_cgd
|
TARGET = rump_cgd
|
||||||
|
|
||||||
SRC_CC = cgd.cc main.cc random.cc
|
SRC_CC = cgd.cc main.cc random.cc
|
||||||
LIBS = rump rump_cgd jitterentropy
|
LIBS = base rump rump_cgd jitterentropy
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
TARGET = rump_fs
|
TARGET = rump_fs
|
||||||
SRC_CC = main.cc file_system.cc random.cc
|
SRC_CC = main.cc file_system.cc random.cc
|
||||||
LIBS = rump rump_fs
|
LIBS = base rump rump_fs
|
||||||
|
|
||||||
|
|
||||||
|
5
repos/libports/lib/mk/libc-mem.mk
Normal file
5
repos/libports/lib/mk/libc-mem.mk
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
SRC_CC = libc_mem_alloc.cc
|
||||||
|
|
||||||
|
include $(REP_DIR)/lib/mk/libc-common.inc
|
||||||
|
|
||||||
|
vpath libc_mem_alloc.cc $(REP_DIR)/src/lib/libc
|
@ -2,7 +2,7 @@
|
|||||||
# C Library including string, locale
|
# C Library including string, locale
|
||||||
#
|
#
|
||||||
LIBS = libc-string libc-locale libc-stdlib libc-stdio libc-gen libc-gdtoa \
|
LIBS = libc-string libc-locale libc-stdlib libc-stdio libc-gen libc-gdtoa \
|
||||||
libc-inet libc-stdtime libc-regex libc-compat libc-setjmp
|
libc-inet libc-stdtime libc-regex libc-compat libc-setjmp libc-mem
|
||||||
|
|
||||||
LIBS += base config vfs
|
LIBS += base config vfs
|
||||||
|
|
||||||
@ -13,7 +13,7 @@ SRC_CC = atexit.cc dummies.cc rlimit.cc sysctl.cc \
|
|||||||
issetugid.cc errno.cc gai_strerror.cc clock_gettime.cc \
|
issetugid.cc errno.cc gai_strerror.cc clock_gettime.cc \
|
||||||
gettimeofday.cc malloc.cc progname.cc fd_alloc.cc file_operations.cc \
|
gettimeofday.cc malloc.cc progname.cc fd_alloc.cc file_operations.cc \
|
||||||
plugin.cc plugin_registry.cc select.cc exit.cc environ.cc nanosleep.cc \
|
plugin.cc plugin_registry.cc select.cc exit.cc environ.cc nanosleep.cc \
|
||||||
libc_mem_alloc.cc pread_pwrite.cc readv_writev.cc poll.cc \
|
pread_pwrite.cc readv_writev.cc poll.cc \
|
||||||
libc_pdbg.cc vfs_plugin.cc rtc.cc dynamic_linker.cc signal.cc \
|
libc_pdbg.cc vfs_plugin.cc rtc.cc dynamic_linker.cc signal.cc \
|
||||||
socket_operations.cc task.cc
|
socket_operations.cc task.cc
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
LIBS = libcore-rust libc libc-stdlib ldso-startup
|
LIBS = libcore-rust libc
|
||||||
RLIB = liblibc/src
|
RLIB = liblibc/src
|
||||||
CC_RUSTC_OPT += --cfg 'target_os = "freebsd"'
|
CC_RUSTC_OPT += --cfg 'target_os = "freebsd"'
|
||||||
include $(REP_DIR)/lib/mk/rust.inc
|
include $(REP_DIR)/lib/mk/rust.inc
|
||||||
|
@ -3,12 +3,15 @@ ___tolower T
|
|||||||
___toupper T
|
___toupper T
|
||||||
__assert T
|
__assert T
|
||||||
__error T
|
__error T
|
||||||
|
__flt_rounds T
|
||||||
|
__fpclassifyd T
|
||||||
|
__inet_addr T
|
||||||
__inet_aton T
|
__inet_aton T
|
||||||
|
__inet_nsap_ntoa T
|
||||||
__inet_ntoa T
|
__inet_ntoa T
|
||||||
__inet_ntop T
|
__inet_ntop T
|
||||||
__inet_nsap_ntoa T
|
|
||||||
__inet_pton T
|
__inet_pton T
|
||||||
__isthreaded B
|
__isthreaded B 4
|
||||||
__mb_cur_max D 8
|
__mb_cur_max D 8
|
||||||
__srget T
|
__srget T
|
||||||
__stderrp D 8
|
__stderrp D 8
|
||||||
@ -110,7 +113,7 @@ endnetgrent T
|
|||||||
endpwent W
|
endpwent W
|
||||||
endttyent T
|
endttyent T
|
||||||
endusershell T
|
endusershell T
|
||||||
environ B
|
environ B 8
|
||||||
erand48 T
|
erand48 T
|
||||||
err W
|
err W
|
||||||
err_set_exit T
|
err_set_exit T
|
||||||
@ -436,11 +439,11 @@ offtime T
|
|||||||
open T
|
open T
|
||||||
opendir T
|
opendir T
|
||||||
openlog T
|
openlog T
|
||||||
optarg B
|
optarg B 8
|
||||||
opterr D 4
|
opterr D 4
|
||||||
optind D 4
|
optind D 4
|
||||||
optopt B
|
optopt B 4
|
||||||
optreset B
|
optreset B 4
|
||||||
pathconf W
|
pathconf W
|
||||||
pause W
|
pause W
|
||||||
pclose T
|
pclose T
|
||||||
@ -726,18 +729,18 @@ strunvisx T
|
|||||||
strvis T
|
strvis T
|
||||||
strvisx T
|
strvisx T
|
||||||
strxfrm T
|
strxfrm T
|
||||||
suboptarg B
|
suboptarg B 8
|
||||||
swab T
|
swab T
|
||||||
swapcontext W
|
swapcontext W
|
||||||
swprintf T
|
swprintf T
|
||||||
swscanf T
|
swscanf T
|
||||||
symlink T
|
symlink T
|
||||||
sync W
|
sync W
|
||||||
sys_errlist D 376
|
sys_errlist D 752
|
||||||
sys_nerr R
|
sys_nerr R
|
||||||
sys_nsig R
|
sys_nsig R
|
||||||
sys_siglist D 128
|
sys_siglist D 256
|
||||||
sys_signame D 128
|
sys_signame D 256
|
||||||
sysconf T
|
sysconf T
|
||||||
sysctl T
|
sysctl T
|
||||||
sysctlbyname T
|
sysctlbyname T
|
||||||
@ -779,7 +782,7 @@ ttyname T
|
|||||||
ttyname_r T
|
ttyname_r T
|
||||||
ttyslot T
|
ttyslot T
|
||||||
twalk T
|
twalk T
|
||||||
tzname D 8
|
tzname D 16
|
||||||
tzset T
|
tzset T
|
||||||
tzsetwall T
|
tzsetwall T
|
||||||
ualarm T
|
ualarm T
|
||||||
@ -888,8 +891,8 @@ xsi_sigpause T
|
|||||||
# Symbols needed by libm
|
# Symbols needed by libm
|
||||||
#
|
#
|
||||||
__mb_sb_limit D 4
|
__mb_sb_limit D 4
|
||||||
_DefaultRuneLocale D 3156
|
_DefaultRuneLocale D 4224
|
||||||
_CurrentRuneLocale D 4
|
_CurrentRuneLocale D 8
|
||||||
__isinff T
|
__isinff T
|
||||||
__isinfl T
|
__isinfl T
|
||||||
|
|
||||||
@ -897,10 +900,18 @@ __isinfl T
|
|||||||
#
|
#
|
||||||
# Symbols needed by libc-resolv
|
# Symbols needed by libc-resolv
|
||||||
#
|
#
|
||||||
|
__inet_nsap_addr T
|
||||||
|
_accept T
|
||||||
|
_bind T
|
||||||
_close T
|
_close T
|
||||||
_connect T
|
_connect T
|
||||||
|
_fcntl T
|
||||||
|
_fstat T
|
||||||
_getpeername T
|
_getpeername T
|
||||||
_getsockname T
|
_getsockname T
|
||||||
|
_getsockopt T
|
||||||
|
_listen T
|
||||||
|
_nanosleep W
|
||||||
_pthread_getspecific W
|
_pthread_getspecific W
|
||||||
_pthread_key_create W
|
_pthread_key_create W
|
||||||
_pthread_main_np W
|
_pthread_main_np W
|
||||||
@ -913,9 +924,12 @@ _pthread_rwlock_wrlock W
|
|||||||
_pthread_setspecific W
|
_pthread_setspecific W
|
||||||
_read T
|
_read T
|
||||||
_recvfrom T
|
_recvfrom T
|
||||||
|
_select W
|
||||||
_sendto T
|
_sendto T
|
||||||
_setsockopt T
|
_setsockopt T
|
||||||
|
_sigprocmask W
|
||||||
_socket T
|
_socket T
|
||||||
|
_write T
|
||||||
_writev T
|
_writev T
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ install_config {
|
|||||||
</config>
|
</config>
|
||||||
}
|
}
|
||||||
|
|
||||||
build_boot_image "core init test-rust ld.lib.so libc.lib.so"
|
build_boot_image "core init test-rust ld.lib.so libc.lib.so libm.lib.so"
|
||||||
|
|
||||||
append qemu_args "-nographic -m 64"
|
append qemu_args "-nographic -m 64"
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ CC_OPT += $(VBOX_CC_OPT)
|
|||||||
# flag, therefore it gets added to CC_OPT instead of VBOX_CC_OPT.
|
# flag, therefore it gets added to CC_OPT instead of VBOX_CC_OPT.
|
||||||
CC_OPT += -fshort-wchar
|
CC_OPT += -fshort-wchar
|
||||||
|
|
||||||
LIBS += libc libm
|
LIBS += libc libm libc-mem
|
||||||
|
|
||||||
INC_DIR += $(REP_DIR)/src/virtualbox/include
|
INC_DIR += $(REP_DIR)/src/virtualbox/include
|
||||||
INC_DIR += $(REP_DIR)/src/virtualbox/include/xpcom
|
INC_DIR += $(REP_DIR)/src/virtualbox/include/xpcom
|
||||||
|
@ -88,7 +88,7 @@ CC_OPT += $(VBOX_CC_OPT)
|
|||||||
# flag, therefore it gets added to CC_OPT instead of VBOX_CC_OPT.
|
# flag, therefore it gets added to CC_OPT instead of VBOX_CC_OPT.
|
||||||
CC_OPT += -fshort-wchar
|
CC_OPT += -fshort-wchar
|
||||||
|
|
||||||
LIBS += libc libm
|
LIBS += libc libm libc-mem
|
||||||
|
|
||||||
INC_DIR += $(REP_DIR)/src/virtualbox/include
|
INC_DIR += $(REP_DIR)/src/virtualbox/include
|
||||||
INC_DIR += $(REP_DIR)/src/virtualbox/include/xpcom
|
INC_DIR += $(REP_DIR)/src/virtualbox/include/xpcom
|
||||||
|
@ -86,8 +86,10 @@ endif
|
|||||||
CONFIGURE_ARGS += $(CONFIGURE_VERBOSE)
|
CONFIGURE_ARGS += $(CONFIGURE_VERBOSE)
|
||||||
|
|
||||||
LDFLAGS += -nostdlib $(CXX_LINK_OPT) $(CC_MARCH) -Wl,-T$(LD_SCRIPT_DYN) \
|
LDFLAGS += -nostdlib $(CXX_LINK_OPT) $(CC_MARCH) -Wl,-T$(LD_SCRIPT_DYN) \
|
||||||
-Wl,--dynamic-linker=$(DYNAMIC_LINKER).lib.so \
|
-Wl,-rpath-link=$(PWD) \
|
||||||
-Wl,--eh-frame-hdr
|
-Wl,--dynamic-linker=$(DYNAMIC_LINKER).lib.so \
|
||||||
|
-Wl,--eh-frame-hdr
|
||||||
|
|
||||||
LIBTOOLFLAGS = --preserve-dup-deps
|
LIBTOOLFLAGS = --preserve-dup-deps
|
||||||
|
|
||||||
LIBGCC = $(shell $(CC) $(CC_MARCH) -print-libgcc-file-name)
|
LIBGCC = $(shell $(CC) $(CC_MARCH) -print-libgcc-file-name)
|
||||||
@ -99,7 +101,7 @@ CPPFLAGS += -D_GNU_SOURCE=1
|
|||||||
COMMON_CFLAGS_CXXFLAGS += -ffunction-sections $(CC_OLEVEL) $(CC_MARCH)
|
COMMON_CFLAGS_CXXFLAGS += -ffunction-sections $(CC_OLEVEL) $(CC_MARCH)
|
||||||
COMMON_CFLAGS_CXXFLAGS += -g
|
COMMON_CFLAGS_CXXFLAGS += -g
|
||||||
|
|
||||||
CFLAGS += $(COMMON_CFLAGS_CXXFLAGS)
|
CFLAGS += $(COMMON_CFLAGS_CXXFLAGS)
|
||||||
CXXFLAGS += $(COMMON_CFLAGS_CXXFLAGS)
|
CXXFLAGS += $(COMMON_CFLAGS_CXXFLAGS)
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -107,8 +109,8 @@ CXXFLAGS += $(COMMON_CFLAGS_CXXFLAGS)
|
|||||||
# Unfortunately, the use of '--start-group' and '--end-group' does not suffice
|
# Unfortunately, the use of '--start-group' and '--end-group' does not suffice
|
||||||
# in all cases because 'libtool' strips those arguments from the 'LIBS' variable.
|
# in all cases because 'libtool' strips those arguments from the 'LIBS' variable.
|
||||||
#
|
#
|
||||||
LDLIBS_A = $(filter %.a, $(sort $(LINK_ITEMS)) $(EXT_OBJECTS) $(LIBGCC))
|
LDLIBS_A = $(filter %.a, $(sort $(STATIC_LIBS)) $(EXT_OBJECTS) $(LIBGCC))
|
||||||
LDLIBS_SO = $(filter %.so,$(sort $(LINK_ITEMS)) $(EXT_OBJECTS) $(LIBGCC))
|
LDLIBS_SO = $(addprefix $(PWD)/,$(sort $(SHARED_LIBS)))
|
||||||
LDLIBS += $(LDLIBS_A) $(LDLIBS_SO) $(LDLIBS_A)
|
LDLIBS += $(LDLIBS_A) $(LDLIBS_SO) $(LDLIBS_A)
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -119,7 +121,7 @@ Makefile reconfigure: $(MAKEFILE_LIST)
|
|||||||
#
|
#
|
||||||
# Invoke configure script with the Genode environment
|
# Invoke configure script with the Genode environment
|
||||||
#
|
#
|
||||||
Makefile reconfigure: env.sh
|
Makefile reconfigure: env.sh $(SHARED_LIBS)
|
||||||
@$(MSG_CONFIG)$(TARGET)
|
@$(MSG_CONFIG)$(TARGET)
|
||||||
$(VERBOSE)source env.sh && $(PKG_DIR)/configure $(ENV) $(CONFIGURE_ARGS) $(CONFIGURE_OUTPUT_FILTER)
|
$(VERBOSE)source env.sh && $(PKG_DIR)/configure $(ENV) $(CONFIGURE_ARGS) $(CONFIGURE_OUTPUT_FILTER)
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@ INC_DIR += $(REP_DIR)/src/app/seoul/include
|
|||||||
CC_WARN += -Wno-parentheses -Wall
|
CC_WARN += -Wno-parentheses -Wall
|
||||||
CC_CXX_OPT += -march=core2
|
CC_CXX_OPT += -march=core2
|
||||||
CC_CXX_OPT += -mssse3
|
CC_CXX_OPT += -mssse3
|
||||||
|
CC_OPT_PIC :=
|
||||||
|
|
||||||
vpath %.cc $(SEOUL_CONTRIB_DIR)
|
vpath %.cc $(SEOUL_CONTRIB_DIR)
|
||||||
vpath %.cc $(REP_DIR)/src/app/seoul
|
vpath %.cc $(REP_DIR)/src/app/seoul
|
||||||
|
@ -60,4 +60,4 @@ include $(REP_DIR)/mk/noux.mk
|
|||||||
# Unfortunately, the use of '--start-group' and '--end-group' does not suffice
|
# Unfortunately, the use of '--start-group' and '--end-group' does not suffice
|
||||||
# in all cases because 'libtool' strips those arguments from the 'LIBS' variable.
|
# in all cases because 'libtool' strips those arguments from the 'LIBS' variable.
|
||||||
#
|
#
|
||||||
LDLIBS += -Wl,--start-group $(sort $(LINK_ITEMS)) $(sort $(LINK_ITEMS)) $(LIBGCC) -Wl,--end-group
|
LDLIBS += -Wl,--start-group $(sort $(STATIC_LIBS)) $(sort $(STATIC_LIBS)) $(LIBGCC) -Wl,--end-group
|
||||||
|
@ -90,7 +90,7 @@ foreach line [split $symbols "\n"] {
|
|||||||
# linker copies the data from the shared library's symbol into the
|
# linker copies the data from the shared library's symbol into the
|
||||||
# binary's BSS.
|
# binary's BSS.
|
||||||
#
|
#
|
||||||
if {$type == "D"} {
|
if {($type == "D") || ($type == "B")} {
|
||||||
puts "$name $type $size_dec"
|
puts "$name $type $size_dec"
|
||||||
} else {
|
} else {
|
||||||
puts "$name $type"
|
puts "$name $type"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user