mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-02 14:30:43 +00:00

There are, sadly, many combinations of linkage in use throughout the tree. The main differentiator, though, is between program/libraries related to Gecko or not. Kind of. Some need mozglue, some don't. Some need dependent linkage, some standalone. Anyways, these new templates remove the need to manually define the right dependencies against xpcomglue, nspr, mozalloc and mozglue in most cases. Places that build programs and were resetting MOZ_GLUE_PROGRAM_LDFLAGS or that build libraries and were resetting MOZ_GLUE_LDFLAGS can now just not use those Gecko-specific templates.
51 lines
1.7 KiB
Makefile
51 lines
1.7 KiB
Makefile
#
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
INTERNAL_TOOLS = 1
|
|
|
|
OS_CXXFLAGS := $(filter-out -fno-exceptions,$(OS_CXXFLAGS)) -fexceptions
|
|
|
|
include $(topsrcdir)/config/rules.mk
|
|
|
|
test-array$(DLL_SUFFIX) test-ctors$(DLL_SUFFIX): %$(DLL_SUFFIX): %.$(OBJ_SUFFIX) elfhack
|
|
$(MKSHLIB) $(LDFLAGS) $< -nostartfiles
|
|
@echo ===
|
|
@echo === If you get failures below, please file a bug describing the error
|
|
@echo === and your environment \(compiler and linker versions\), and use
|
|
@echo === --disable-elf-hack until this is fixed.
|
|
@echo ===
|
|
# Fail if the library doesn't have $(DT_TYPE) .dynamic info
|
|
$(TOOLCHAIN_PREFIX)readelf -d $@ | grep '($(DT_TYPE))'
|
|
@rm -f $@.bak
|
|
$(CURDIR)/elfhack -b -f $@
|
|
# Fail if the backup file doesn't exist
|
|
[ -f '$@.bak' ]
|
|
# Fail if the new library doesn't contain less relocations
|
|
[ $$($(TOOLCHAIN_PREFIX)objdump -R $@.bak | wc -l) -gt $$(objdump -R $@ | wc -l) ]
|
|
|
|
test-array$(DLL_SUFFIX) test-ctors$(DLL_SUFFIX): DSO_SONAME=$@
|
|
test-array$(DLL_SUFFIX): DT_TYPE=INIT_ARRAY
|
|
test-ctors$(DLL_SUFFIX): DT_TYPE=INIT
|
|
|
|
.PRECIOUS: test-array$(DLL_SUFFIX) test-ctors$(DLL_SUFFIX)
|
|
|
|
GARBAGE += test-array$(DLL_SUFFIX) test-ctors$(DLL_SUFFIX) test-array$(DLL_SUFFIX).bak test-ctors$(DLL_SUFFIX).bak
|
|
|
|
ifndef CROSS_COMPILE
|
|
ifdef COMPILE_ENVIRONMENT
|
|
libs:: test-array$(DLL_SUFFIX) test-ctors$(DLL_SUFFIX)
|
|
|
|
dummy: dummy.$(OBJ_SUFFIX)
|
|
$(CC) -o $@ $^ $(LDFLAGS)
|
|
|
|
libs:: dummy
|
|
# Will either crash or return exit code 1 if elfhack is broken
|
|
LD_PRELOAD=$(CURDIR)/test-array$(DLL_SUFFIX) $(CURDIR)/dummy
|
|
LD_PRELOAD=$(CURDIR)/test-ctors$(DLL_SUFFIX) $(CURDIR)/dummy
|
|
|
|
GARBAGE += dummy
|
|
endif
|
|
endif
|