1
0

Merge pull request #17 from CapeLeidokos/ng_pr_link_order_dependency_fix_java

Fix link order problems with inter-library/inter-plugin dependencies
This commit is contained in:
Jesse Vincent 2019-05-31 19:37:41 +08:00 committed by GitHub
commit a6c0022d98
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -22,6 +22,7 @@ compiler.path={runtime.tools.avr-gcc.path}/bin/
compiler.c.cmd=avr-gcc
compiler.c.flags=-c -g -Os {compiler.warning_flags} -std=gnu11 -ffunction-sections -fdata-sections -MMD
compiler.c.elf.flags={compiler.warning_flags} -Os -Wl,--gc-sections
compiler.c.elf.flags_join_archives=rcT
compiler.c.elf.cmd=avr-gcc
compiler.S.flags=-c -g -x assembler-with-cpp
compiler.cpp.cmd=avr-g++
@ -64,8 +65,29 @@ recipe.S.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.S.flags} -mmcu={b
archive_file_path={build.path}/{archive_file}
recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}"
## Combine gc-sections, archives, and objects
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -mmcu={build.mcu} {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" {object_files} "{build.path}/{archive_file}" "-L{build.path}" -lm
################################################################################
## PLEASE NOTE: The way we link our elf binary significantly differs from the
## way that Arduino handles things by default.
## The original linker command has been split up into three
## steps (recipe.c.combine.pattern, recipe.hooks.linking.postlink.1.pattern
## and recipe.hooks.linking.postlink.2.pattern).
## This is necessary to prevent link errors reporting unresolved symbols
## due to order dependencies of libraries and objects appearing
## in the linker command line.
##
## CHANGED WRT DEFAULT: Generate a large .a archive to prevent link order issues with garbage collection
recipe.c.combine.pattern="{compiler.path}/{compiler.ar.cmd}" {compiler.c.elf.flags_join_archives} "{build.path}/{build.project_name}_joined.a" {object_files} "{build.path}/{archive_file}"
##
## NEWLY INTRODUCED: Link with global garbage collection (considering all
## objects and libraries together).
recipe.hooks.linking.postlink.1.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -mmcu={build.mcu} {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}_joined.a" "-L{build.path}" -lm
##
## NEWLY INTRODUCED: Removing the joined library is required to avoid malformed archives that
## would otherwise result when updating a pre-existing
## joined archive file during a subsequent firmware build.
##
recipe.hooks.linking.postlink.2.pattern={tools.rm.cmd} "{build.path}/{build.project_name}_joined.a"
################################################################################
## Create output files (.eep and .hex)
recipe.objcopy.eep.pattern="{compiler.path}{compiler.objcopy.cmd}" {compiler.objcopy.eep.flags} {compiler.objcopy.eep.extra_flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.eep"
@ -127,6 +149,9 @@ tools.dfu-programmer.upload.params.quiet=
tools.dfu-programmer.upload.noverify=
tools.dfu-programmer.upload.pattern=/bin/sh -c '"{cmd.path}" atmega32u4 erase && "{cmd.path}" atmega32u4 flash "{build.path}/{build.project_name}.hex" && "{cmd.path}" atmega32u4 start'
tools.rm.cmd=rm -f
tools.rm.cmd.windows=powershell.exe Remove-Item -LiteralPath
# USB Default Flags
# Default blank usb manufacturer will be filled in at compile time
# - from numeric vendor ID, set to Unknown otherwise