1. A method for link time optimization, the method comprising: parsing, by a compiler, intermediate representation files to determine what symbols are present in the intermediate representation files; providing the symbols 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, a preserve list of symbols, the preserve list comprising a list of symbols proven used by the objects and the intermediate representation files; compiling the intermediate representation files and the objects based on the preserve list of symbols, and deleting, by the linker, any remaining unused objects.