1. A method for link time optimization, the method comprising: receiving a customized linker script; parsing, by a compiler, intermediate representation files to determine what symbols are present in the intermediate representation files; providing the symbols determined by the parsing to a linker; creating, by the linker, a symbol use tree of all the symbols that are present in the intermediate representation files and other symbols in binary code received by the linker; discarding, by the linker, any received objects for which no use can be identified and all dependencies of the objects; providing, from the linker to the compiler, after the discarding, a preserve list of symbols, the preserve list comprising a list of: only symbols in both the intermediate representation files and the binary code that are proven used by the objects and the intermediate representation files, and any additional symbols specified by the customized linker script; compiling the intermediate representation files and the objects based on the preserve list of symbols, and deleting, by the linker, any remaining unused objects.