// options.h -- handle command line options for gold -*- C++ -*-
-// Copyright 2006, 2007, 2008 Free Software Foundation, Inc.
+// Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
class Target;
class Plugin_manager;
+// Incremental build action for a specific file, as selected by the user.
+
+enum Incremental_disposition
+{
+ // Determine the status from the timestamp (default).
+ INCREMENTAL_CHECK,
+ // Assume the file changed from the previous build.
+ INCREMENTAL_CHANGED,
+ // Assume the file didn't change from the previous build.
+ INCREMENTAL_UNCHANGED
+};
+
// The nested namespace is to contain all the global variables and
// structs that need to be defined in the .h file, but do not need to
// be used outside this class.
is_in_sysroot() const
{ return this->is_in_sysroot_; }
+ // Return whether this is considered a system directory.
+ bool
+ is_system_directory() const
+ { return this->put_in_sysroot_ || this->is_in_sysroot_; }
+
private:
+ // The directory name.
std::string name_;
+ // True if the sysroot should be added as a prefix for this
+ // directory (if there is a sysroot). This is true for system
+ // directories that we search by default.
bool put_in_sysroot_;
+ // True if this directory is in the sysroot (if there is a sysroot).
+ // This is true if there is a sysroot and either 1) put_in_sysroot_
+ // is true, or 2) the directory happens to be in the sysroot based
+ // on a pathname comparison.
bool is_in_sysroot_;
};
N_("Set program start address"), N_("ADDRESS"));
DEFINE_bool(export_dynamic, options::TWO_DASHES, 'E', false,
- N_("Export all dynamic symbols"), NULL);
+ N_("Export all dynamic symbols"),
+ N_("Do not export all dynamic symbols (default)"));
DEFINE_bool(eh_frame_hdr, options::TWO_DASHES, '\0', false,
N_("Create exception frame header"), NULL);
DEFINE_string(dynamic_linker, options::TWO_DASHES, 'I', NULL,
N_("Set dynamic linker path"), N_("PROGRAM"));
+ DEFINE_bool(incremental, options::TWO_DASHES, '\0', false,
+ N_("Work in progress; do not use"),
+ N_("Do a full build"));
+
+ DEFINE_special(incremental_changed, options::TWO_DASHES, '\0',
+ N_("Assume files changed"), NULL);
+
+ DEFINE_special(incremental_unchanged, options::TWO_DASHES, '\0',
+ N_("Assume files didn't change"), NULL);
+
+ DEFINE_special(incremental_unknown, options::TWO_DASHES, '\0',
+ N_("Use timestamps to check files (default)"), NULL);
+
DEFINE_special(just_symbols, options::TWO_DASHES, '\0',
N_("Read only symbol values from FILE"), N_("FILE"));
#ifdef ENABLE_PLUGINS
DEFINE_special(plugin, options::TWO_DASHES, '\0',
- N_("Load a plugin library"), N_("PLUGIN[,ARG,...]"));
+ N_("Load a plugin library"), N_("PLUGIN"));
+ DEFINE_special(plugin_opt, options::TWO_DASHES, '\0',
+ N_("Pass an option to the plugin"), N_("OPTION"));
#endif
DEFINE_bool(preread_archive_symbols, options::TWO_DASHES, '\0', false,
DEFINE_bool(strip_lto_sections, options::TWO_DASHES, '\0', true,
N_("Strip LTO intermediate code sections"), NULL);
+ DEFINE_bool(no_keep_memory, options::TWO_DASHES, 's', false,
+ N_("Use less memory and more disk I/O (included only for compatibility with GNU ld)"), NULL);
+
DEFINE_bool(shared, options::ONE_DASH, '\0', false,
N_("Generate shared library"), NULL);
+ DEFINE_bool(Bshareable, options::ONE_DASH, '\0', false,
+ N_("Generate shared library"), NULL);
+
// This is not actually special in any way, but I need to give it
// a non-standard accessor-function name because 'static' is a keyword.
DEFINE_special(static, options::ONE_DASH, '\0',
N_("Do not link against shared libraries"), NULL);
+ DEFINE_bool(gc_sections, options::TWO_DASHES, '\0', false,
+ N_("Remove unused sections"),
+ N_("Don't remove unused sections (default)"));
+
+ DEFINE_bool(print_gc_sections, options::TWO_DASHES, '\0', false,
+ N_("List removed unused sections on stderr"),
+ N_("Do not list removed unused sections"));
+
DEFINE_bool(stats, options::TWO_DASHES, '\0', false,
N_("Print resource usage statistics"), NULL);
DEFINE_special(version_script, options::TWO_DASHES, '\0',
N_("Read version script"), N_("FILE"));
+ DEFINE_bool(warn_search_mismatch, options::TWO_DASHES, '\0', true,
+ N_("Warn when skipping an incompatible library"),
+ N_("Don't warn when skipping an incompatible library"));
+
DEFINE_bool(whole_archive, options::TWO_DASHES, '\0', false,
N_("Include all archive contents"),
N_("Include only needed archive contents"));
Object_format format_enum() const;
Object_format oformat_enum() const;
+ // Return whether FILENAME is in a system directory.
+ bool
+ is_in_system_directory(const std::string& name) const;
+
// These are the best way to get access to the execstack state,
// not execstack() and noexecstack() which are hard to use properly.
bool
in_dynamic_list(const char* symbol) const
{ return this->dynamic_list_.version_script_info()->symbol_is_local(symbol); }
+ // The disposition given by the --incremental-changed,
+ // --incremental-unchanged or --incremental-unknown option. The
+ // value may change as we proceed parsing the command line flags.
+ Incremental_disposition
+ incremental_disposition() const
+ { return this->incremental_disposition_; }
+
private:
// Don't copy this structure.
General_options(const General_options&);
// Add a plugin and its arguments to the list of plugins.
void
- add_plugin(const char* arg);
+ add_plugin(const char *filename);
+
+ // Add a plugin option.
+ void
+ add_plugin_option(const char* opt);
// Whether to mark the stack as executable.
Execstack execstack_status_;
// script.cc, we store this as a Script_options object, even though
// we only use a single Version_tree from it.
Script_options dynamic_list_;
+ // The disposition given by the --incremental-changed,
+ // --incremental-unchanged or --incremental-unknown option. The
+ // value may change as we proceed parsing the command line flags.
+ Incremental_disposition incremental_disposition_;
+ // Wheater we have seen one of the options that require incremental
+ // build (--incremental-changed, --incremental-unchanged or
+ // --incremental-unknown)
+ bool implicit_incremental_;
};
// The position-dependent options. We use this to store the state of
this->set_Bdynamic(options.Bdynamic());
this->set_format_enum(options.format_enum());
this->set_whole_archive(options.whole_archive());
+ this->set_incremental_disposition(options.incremental_disposition());
}
DEFINE_posdep(as_needed, bool);
DEFINE_posdep(Bdynamic, bool);
DEFINE_posdep(format_enum, General_options::Object_format);
DEFINE_posdep(whole_archive, bool);
+ DEFINE_posdep(incremental_disposition, Incremental_disposition);
private:
// This is a General_options with everything set to its default