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:
commit
a6c0022d98
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user