This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.

See crosstool-NG for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFC] Refactor autoconf options and build scripts


List,

Crosstool-NG has become a very useful and valuable tool for creating
custom GCC based toolchains, and over time a lot of new features have
been added.

The addition of features, and the complexity of options each component
can support makes developing new features (multi_cc, multiple
different libcs, new targets, new hosts, etc...) very difficult.

A large majority of components Crosstool-NG builds utilize the
autotools build approach, and have a multitude of different options
that may have many external dependencies. These dependencies are
difficult at best to track in one build script, let alone across many
scripts.

My first proposal on re-factoring Crosstool-NG is to move these
autoconf arguments (--with-options) to Kconfig options/strings that
can be selected or depended on by other components and move them out
of the build scripts to additionally simplify the build scripts.

For instance:

https://github.com/crosstool-ng/crosstool-ng/blob/master/scripts/build/cc/100-gcc.sh#L242
==========================================================
    if [ "${CT_CC_CXA_ATEXIT}" = "y" ]; then
        extra_config+=("--enable-__cxa_atexit")
    else
        extra_config+=("--disable-__cxa_atexit")
    fi
==========================================================

Could turn into:
==========================================================
if CC_CXA_ATEXIT
config CC_CXA_ATEXIT_CONFIG
    string "--enable-__cxa_atexit"
    depends on CC_CXA_ATEXIT
else # ! CC_CXA_ATEXIT
config CC_CXA_ATEXIT_CONFIG
    string "--disable-__cxa_atexit"
    depends on !CC_CXA_ATEXIT
endif # CC_CXA_ATEXIT
==========================================================

Then in the scripts/build/cc/100-gcc.sh, it would only have an override like:
==========================================================
CONFIGURE_OPTS += ${CT_CC_CXA_ATEXIT_CONFIG}
==========================================================

My second proposal is to refactor the build scripts themselves into a generic
build script. Then the current build scripts (i.e.: scripts/build/cc/100-gcc.sh)
would override variables and functionality in the generic build script, as
needed.

The benefits of making the build scripts more generic and moving the
configuration options out of the build scripts would allow for Crosstool-NG to
become more flexible for future development.

Cheers,

-Bryan

--
For unsubscribe information see http://sourceware.org/lists.html#faq


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]