diff --git a/weld/.gitrepo b/weld/.gitrepo
new file mode 100644
index 0000000..16acab7
--- /dev/null
+++ b/weld/.gitrepo
@@ -0,0 +1,11 @@
+; DO NOT EDIT (unless you know what you are doing)
+;
+; This subdirectory is a git "subrepo", and this file is maintained by the
+; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme
+;
+[subrepo]
+	remote = https://github.com/agottem/weld.git
+	branch = master
+	commit = d0cd07b1a1ef8b64e2b9c828c1eaf601ceba89df
+	parent = 776cae55973781c60915d282121039d68a273036
+	cmdver = 0.3.1
diff --git a/weld/AUTHOR b/weld/AUTHOR
new file mode 100644
index 0000000..5b49bfa
--- /dev/null
+++ b/weld/AUTHOR
@@ -0,0 +1,2 @@
+Weld was invented, designed, and implemented by Andrew Gottemoller.  Visit the website
+http://www.agottem.com for contact information.
diff --git a/weld/COPYING b/weld/COPYING
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/weld/COPYING
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/weld/README b/weld/README
new file mode 100644
index 0000000..f76bdb3
--- /dev/null
+++ b/weld/README
@@ -0,0 +1,4 @@
+For detailed information on using, building, and modifying Weld, please visit:
+http://www.agottem.com/weld
+
+Additional information may be found within the doc/ directory included with the Weld installation
diff --git a/weld/WELD_LICENSE b/weld/WELD_LICENSE
new file mode 100644
index 0000000..7df8c4d
--- /dev/null
+++ b/weld/WELD_LICENSE
@@ -0,0 +1,10 @@
+Weld is free software: you can redistribute it and/or modify it under the terms of the GNU General
+Public License as published by the Free Software Foundation, either version 3 of the License, or (at
+your option) any later version.
+
+Weld is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
+implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+License for more details.
+
+You should have received a copy of the GNU General Public License along with Weld.  If not, see
+<http://www.gnu.org/licenses/>.
diff --git a/weld/config.mk b/weld/config.mk
new file mode 100644
index 0000000..c58aafb
--- /dev/null
+++ b/weld/config.mk
@@ -0,0 +1,31 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# Define default config options
+
+
+source_path     ?= .
+build_path      ?= ./build/out
+include_subdir  ?= include
+source_subdir   ?= source
+resource_subdir ?= resource
+arch            ?= amd64
+mode            ?= debug
+platform        ?= $(if $(WINDIR),win32,unix)
+shell_name      ?= $(if $(WINDIR),cmd,sh)
+c_toolchain     ?= gcc
+
+ifeq ($(platform),unix)
+    os := $(shell uname)
+    ifeq ($(os),Linux)
+        unix_flavor ?= linux
+    else ifeq ($(os),Darwin)
+        unix_flavor ?= darwin
+        gcc_opt_use_clang ?= 1
+    else ifeq ($(os),FreeBSD)
+        unix_flavor ?= bsd
+    endif
+endif
diff --git a/weld/def.mk b/weld/def.mk
new file mode 100644
index 0000000..fa45475
--- /dev/null
+++ b/weld/def.mk
@@ -0,0 +1,156 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines the rule to expand for each component
+# definition file found
+
+
+define def_file_rule
+
+    # Clear out all possible variables a component definition file
+    # may define
+    def_file            :=
+    def_path            :=
+    def_deps            :=
+    def_include_subdir  :=
+    def_source_subdir   :=
+    def_resource_subdir :=
+    name                :=
+    type                :=
+    lang                :=
+    header_list         :=
+    resource_list       :=
+    source_list         :=
+    definition_list     :=
+    source_lib_list     :=
+    lib_list            :=
+    static_lib_list     :=
+    lib_path_list       :=
+    include_path_list   :=
+    compiler_flag_list  :=
+    link_flag_list      :=
+
+
+    $$(call debug_info,including def: $(1))
+
+    def_file := $(1)
+    def_path := $$(call def_file_to_root_path,$$(def_file))
+    def_deps := $$(def_file) $$(config_file) $$(def_deps)
+
+
+    ifeq ($$(def_include_subdir),)
+        def_include_subdir := $$(include_subdir)
+    endif
+
+    ifeq ($$(def_source_subdir),)
+        def_source_subdir := $$(source_subdir)
+    endif
+
+    ifeq ($$(def_resource_subdir),)
+        def_resource_subdir := $$(resource_subdir)
+    endif
+
+
+    # Include the found component definition file
+    include $$(def_file)
+
+    # Custom component definition files might not bother with a name so skip the below stuff if
+    # that's the case'
+    ifneq ($$(name),)
+        ifneq ($$(filter $$(name), $$(build_target_list)),)
+            $$(call def_error,duplicate component name used here: $$($$(name).def_file))
+        endif
+
+        $$(name).def_file := $$(def_file)
+
+        # Include the config file again after including the definition file.
+        # This way a config file could specify component-specific settings
+        -include $$(config_file)
+
+
+        #  If a header list was specified, include header rules
+        ifneq ($$(header_list),)
+            include $$(weld_path)/headers.mk
+        endif
+
+        # If a resource list was specified, include resourcerules
+        ifneq ($$(resource_list),)
+            include $$(weld_path)/resources.mk
+        endif
+
+        # If the type is set to bin or lib include the compilation rules for the
+        # specified language
+        ifneq ($$(filter bin lib,$$(type)),)
+            include $$(weld_path)/lang/$$(lang).mk
+        endif
+
+        # Add the found component to the standard set of build targets
+        build_target_list         := $$(name) $$(build_target_list)
+        headers_target_list       := $$(name)_headers $$(headers_target_list)
+        clean_target_list         := clean_$$(name) $$(clean_target_list)
+        clean_headers_target_list := clean_$$(name)_headers
+
+
+        # Declare default targets for this component.  Various component rules
+        # may add build steps as dependencies to these targets
+        .PHONY : $$(name)_headers
+        $$(name)_headers : $$(name)_def_headers
+        $$(name)_headers :
+
+        .PHONY : $$(name)_def_headers
+        $$(name)_def_headers :
+
+        .PHONY : clean_$$(name)_headers
+        clean_$$(name)_headers : clean_$$(name)_def_headers
+        clean_$$(name)_headers :
+
+        .PHONY : clean_$$(name)_def_headers
+        clean_$$(name)_def_headers :
+
+        .PHONY : $$(name)_compile
+        $$(name)_compile : $$(name)_def_compile
+        $$(name)_compile :
+
+        .PHONY : $$(name)_def_compile
+        $$(name)_def_compile :
+
+        .PHONY : clean_$$(name)_compile
+        clean_$$(name)_compile : clean_$$(name)_def_compile
+        clean_$$(name)_compile :
+
+        .PHONY : clean_$$(name)_def_compile
+        clean_$$(name)_def_compile :
+
+        .PHONY : $$(name)_resources
+        $$(name)_resources : $$(name)_def_resources
+        $$(name)_resources :
+
+        .PHONY : $$(name)_def_resources
+        $$(name)_def_resources :
+
+        .PHONY : clean_$$(name)_resources
+        clean_$$(name)_resources : clean_$$(name)_def_resources
+        clean_$$(name)_resources :
+
+        .PHONY : clean_$$(name)_def_resources
+        clean_$$(name)_def_resources :
+
+        # Define the "make <name>" target for the component.  This target
+        # should build the entire component
+        .PHONY : $$(name)
+        $$(name) : $$(name)_headers
+        $$(name) : $$(name)_compile
+        $$(name) : $$(name)_resources
+        $$(name) :
+
+        .PHONY : clean_$$(name)
+        clean_$$(name) : clean_$$(name)_headers
+        clean_$$(name) : clean_$$(name)_compile
+        clean_$$(name) : clean_$$(name)_resources
+        clean_$$(name) :
+    endif
+
+endef
diff --git a/weld/disc.mk b/weld/disc.mk
new file mode 100644
index 0000000..da00bfe
--- /dev/null
+++ b/weld/disc.mk
@@ -0,0 +1,21 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile discovers all the component definition files in a weld
+# project and expands a set of rules for each found component
+
+
+# If the user hasn't specified a predefined list of component definition
+# files go ahead and discover them
+ifeq ($(def_file_list),)
+
+    def_file_list := $(call find_files,$(source_path),$(def_file_name))
+
+endif
+
+
+# Expand a component definition rule for each found component
+$(foreach file,$(def_file_list),$(eval $(call def_file_rule,$(file))))
diff --git a/weld/doc/c.def.mk.template b/weld/doc/c.def.mk.template
new file mode 100644
index 0000000..93b7144
--- /dev/null
+++ b/weld/doc/c.def.mk.template
@@ -0,0 +1,95 @@
+# For detailed information on using, building, and modifying Weld, please visit:
+# http://www.agottem.com/weld
+
+# This is a template for a C or C++ component definition.  These component definitions
+# should have the following layout:
+#     ./
+#         def.mk
+#         source/
+#             source1.c
+#             source2.c
+#         include/
+#             header1.h
+#             header2.h
+#         resource/
+#             resource1.blaz
+
+# Specify the name of the component definition.  This name must be unique throughout
+# the source tree
+name := my_name
+
+# Specify the type of component.  May be one of:
+#    lib -- build static library
+#    bin -- build a binary
+# The name of the build produced build artifact will be derived from the specified
+# name of the component
+type := lib
+
+# Specify the language the component source is written in.  May be one of:
+#    c   -- compile as c99
+#    cpp -- compile as c++11
+lang := c
+
+# Optionally specify source files should live in "src/" instead of "source/"
+def_source_subdir := src
+
+# Optionally specify headers live in "inc/" instead of "include/"
+def_include_subdir := include
+
+# Optionally specify resources live in "res/" instead of "resource/"
+def_resource_subdir := res
+
+# Specify a list of  headers to make available to other components.  These headers
+# should exist in the include/ directory of the component.
+#
+# Each specified header will be copied to the build path as
+# <build_path>/include/<name>/file.h.  Other components may include these files by
+# using #include <name/file.h>
+header_list := file.h bar.h blaz.h
+
+# Specify a list of source files to build for this component.  These source
+# files should exist in the source/ directory of the component.
+source_list := file.c bar.c blaz.c fun.c help.c private.c
+
+# Specify a lsit of resource files to copy to bin directory of the build path.
+# These resource files should exist in the resource/ directory of the component.
+resource_list := img/cat.jpg img/another_cat.jpg text/help.txt
+
+
+# Specify a list of preprocessor definitions to set during the compilation.
+definition_list := BUILD_COMPONENT=$(name) ENABLE_THIS_FEATURE
+
+
+# Specify explicit include paths to use during compilation
+include_path_list := /some/other/include
+
+
+# Specify a list of libraries this component should link against.  These libraries
+# should be libraries which are part of the source tree and can be built.  Only
+# the library name should be specified.
+source_lib_list := my_foo_lib my_bar_lib
+
+# Specify a list of external libraries this component should link against.  These
+# libraries should exist outside of the source tree.  Typically system libraries or
+# third party libraries are set here.  The toolchain will select the most
+# appropriate option, which may be a shared or static library
+lib_list := GL glut
+
+# Specify a list of external libraries this component should link against.  These
+# libraries should exist outside of the source tree.  Typically system libraries or
+# third party libraries are set here. A static version of the library must be
+# available for linking
+static_lib_list := ssl
+
+# Specify a list of library paths to use during the compilation of this component
+lib_path_list := /some/other/lib
+
+
+# Specify compiler flags to use for the components compilation
+compiler_flag_list := -Wno-crappy-warnings
+
+# Specify linker flags to use for this components compilation
+link_flag_list := -Wl,foobar
+
+# Specify additional dependencies build artifacts should have
+def_deps := /my/global/dep
diff --git a/weld/doc/command_line.txt b/weld/doc/command_line.txt
new file mode 100644
index 0000000..f0b67e5
--- /dev/null
+++ b/weld/doc/command_line.txt
@@ -0,0 +1,91 @@
+For detailed information on using, building, and modifying Weld, please visit:
+http://www.agottem.com/weld
+
+Weld provides a variety of options when building.  When building, the following variables may be set
+either in your environment or on the command line:
+
+    source_path   -- set to the root of the project
+    build_path    -- set to the directory all build output should be directed to
+    config_file   -- arbitrary file to include with the build which may set additional settings
+    mode          -- set to 'release' or 'debug' to build the desired binary
+    arch          -- set to the desired architecture such as 'i686' or 'amd64'
+    platform      -- set to the desired platform target such as 'unix' or 'win32'
+    c_toolchain   -- set to the toolchain to use for the build such as 'gcc'
+    show_progress -- set to 1 to print the name of each artifact being built
+    debug_weld    -- set to 1 to print out internal weld debugging info
+
+The above variables may be simply set in your weld project's top-level makefile or in a config file
+which is specified by the "config_file" variable.  For instance, you could define the config file
+"example_config.mk" below:
+
+example_config.mk:
+    source_path := /my/projects/fun
+    build_path  := /my/projects/build
+    mode        := debug
+    arch        := i686
+    platform    := linux
+    c_toolchain := gcc
+
+You could then build with the command line:
+    make config_file=example_config.mk
+
+Alternatively you could simply add these options to your project's top-level makefile:
+
+makefile:
+    source_path := /my/projects/fun
+    build_path  := /my/projects/build
+    mode        := debug
+    arch        := i686
+    platform    := linux
+    c_toolchain := gcc
+
+    include $(weld_path)/weld.mk
+
+With the above, you could then simply build with the command line:
+    make
+
+Once your weld project is setup, you can build by specifying the following targets
+
+    # build everything
+    make
+    make build
+
+    # clean everything
+    make clean
+
+    # build just a single component and its dependencies
+    make my_component_name
+
+    # build just a single source file for a component
+    make my_component_name/source.o
+
+    # install just a component's headers
+    make my_component_name_headers
+
+    # clean just a component's headers
+    make clean_my_component_name_headers
+
+    # install just a component's resources
+    make my_component_name_resources
+
+    # clean just a component's resources
+    make clean_my_component_name_resources
+
+    # make just a library
+    make libmy_component_name.a
+
+    # make just a binary
+    make bin/my_component_name
+
+The above make commands may be a bit verbose for your taste as each command is echoed
+to the terminal.  For something a little easier to read, you might prefer:
+    make --quiet show_progress=1
+
+There are quite a few options and possibilities involved here.  For the best experience,
+I recommend doing something like this:
+    alias weld="make -C /my/project/root --quiet show_progress=1""
+
+The above will enable you to, from any directory, do the following:
+    weld my_component
+    weld clean
+    weld
diff --git a/weld/doc/overview.txt b/weld/doc/overview.txt
new file mode 100644
index 0000000..4d4026c
--- /dev/null
+++ b/weld/doc/overview.txt
@@ -0,0 +1,50 @@
+For detailed information on using, building, and modifying Weld, please visit:
+http://www.agottem.com/weld
+
+Weld is a build system for GNU make.  It is an implementation of a non-recursive make system.  Weld
+is intended for C and C++ projects, however, could be easily extended to other languages.  Weld is
+designed to work on Linux or FreeBSD using GCC and Windows using MinGW.
+
+To start using Weld, first create a directory to host all the source for your project.  A typical
+project is expected to be composed of many libraries and binaries with a single top level makefile.
+An example layout may be something like:
+
+    my_project/
+        makefile
+
+        libs/
+            gui/
+                graph/
+                    def.mk
+                    source/...
+                    include/...
+                button/
+                    def.mk
+                    source/...
+                    include/...
+            data/
+                compute/
+                    compute.mk
+                    source/...
+                    include/...
+        bins/
+            my_app/
+                def.mk
+                source/...
+
+The above example lays out a project with a handful of libs and a binary.  To build, simply type
+make at the top-level.  Weld will do a simple find for any files name "def.mk".  Each "def.mk" is
+then included and a complete dependency tree is constructed.  This means make knows how every build
+artifact is related and what order things need to be built in.  If make's "-j" option is used you'll
+perform a build with optimal parallelization.
+
+Additionally, because the full dependency tree is known, incremental builds will only ever build
+precisely what is needed.  If dependencies haven't changed, no time will be wasted needlessly
+rebuilding components.
+
+In addition to Weld generating a complete dependency tree for you, it'll also define useful targets.
+For instance, "make libcompute.a" will build just the compute library and any dependencies.  "make
+my_app" will build just my_app and any dependencies.  "make clean" will clean the project.
+
+For details on specifying def.mk files, see the "c.def.mk.template" or "resource.def.mk.template"
+files.  For insight into the weld command line, see the "command_line.txt" file.
diff --git a/weld/doc/project.makefile.template b/weld/doc/project.makefile.template
new file mode 100644
index 0000000..994121f
--- /dev/null
+++ b/weld/doc/project.makefile.template
@@ -0,0 +1,36 @@
+# For detailed information on using, building, and modifying Weld, please visit:
+# http://www.agottem.com/weld
+
+# There should be just a single makefile for an entire weld project.  A weld
+# project is expected to consist of many libraries, binaries, and resources.
+# This top level makefile should specify defaults for the project and include
+# the weld.mk file.
+
+# Specify sane defaults -- the projects source lives in the same directory
+# as this makefile, the build will be output to the ./build folder, and
+# sane defaults for the rest
+source_path := .
+build_path  := ./build
+arch        := amd64
+mode        ?= debug
+shell_name  := sh
+platform    := unix
+unix_flavor := linux
+c_toolchain := gcc
+
+# GCC toolchain specific options
+
+# Clang and gcc are mostly compatible, so use all the gcc compilation infra but
+# switch the compiler name to clang/clang++
+gcc_opt_use_clang := 1
+
+# Specify additional settings applicable to every component
+global_compiler_flag_list := -Wall
+global_link_flags         := -Wl,foo
+global_definition_list    := MY_PROJECT_NAME
+global_include_path_list  := /third/party/include/path
+global_lib_path           := /third/party/lib/path
+
+
+# Include the "weld.mk" file in the weld build system directory
+include /path/to/weld/install/weld.mk
diff --git a/weld/doc/resource.def.mk.template b/weld/doc/resource.def.mk.template
new file mode 100644
index 0000000..6a8a8e9
--- /dev/null
+++ b/weld/doc/resource.def.mk.template
@@ -0,0 +1,21 @@
+# For detailed information on using, building, and modifying Weld, please visit:
+# http://www.agottem.com/weld
+
+# This is a template for a resource only component definition.  These
+# component definitions should have the following layout:
+#     ./
+#         def.mk
+#         resource/
+#             resource1.blaz
+#             resource2.bar
+
+# Specify the name of the component definition.  This name must be unique throughout
+# the source tree
+name := my_res
+
+# Specify a list of resource files to copy to bin directory of the build path.
+# These resource files should exist in the resource/ directory of the component.
+resource_list := img/cat.jpg img/another_cat.jpg text/help.txt
+
+# Specify additional dependencies each resource build artifact should have
+def_deps := /some/file
diff --git a/weld/headers.mk b/weld/headers.mk
new file mode 100644
index 0000000..2e8032d
--- /dev/null
+++ b/weld/headers.mk
@@ -0,0 +1,74 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines the set of rules for a header list
+
+
+# This makefile is included for each component definition so clear out
+# any variables used by this makefile
+def_header_path        :=
+def_header_output_path :=
+header_file            :=
+header_name            :=
+def_header_file        :=
+header_alias           :=
+dest_path              :=
+header_goal_list       :=
+
+
+# Figure out the include path for this component definition
+def_header_path        := $(def_path)/$(def_include_subdir)
+def_header_output_path := $(header_output_path)/$(name)
+
+define header_file_rule
+
+    $$(call debug_info,header specified: $(1))
+
+    header_file     := $(1)
+    header_name     := $$(notdir $$(header_file))
+    def_header_file := $$(def_header_path)/$$(header_file)
+    header_alias    := $$(name)/$$(header_name)
+
+    header_goal_list := $$(header_alias) $$(header_goal_list)
+
+    directory_list := $$(dest_path) $$(directory_list)
+
+    # Define an alias for the header file so the user can do
+    # "make name/header.h" on the command line
+    vpath $$(header_alias) $$(header_output_path)
+
+    # Set the target specific variables and dependencies for this header
+    $$(header_alias) : header_path     := $$(header_path)
+    $$(header_alias) : def_header_file := $$(def_header_file)
+    $$(header_alias) : header_alias    := $$(header_alias)
+    $$(header_alias) : $$(def_deps)
+    $$(header_alias) : $$(def_header_file)
+
+endef
+
+
+# Expand the header file rule for each header specified
+$(foreach file,$(header_list),$(eval $(call header_file_rule,$(file))))
+
+# Add the output header directory to the list of directories we need to build
+directory_list := $(def_header_output_path) $(directory_list)
+
+
+# Add the list of header goals as a dependency of the component definition's
+# headers target
+$(name)_def_headers : $(header_goal_list)
+
+# Define the actual recipe for a header
+$(header_goal_list) : | $(def_header_output_path)
+	$(call print_progress,$(header_alias))
+	$(call soft_copy,$(def_header_file),$(header_output_path)/$(header_alias))
+
+.PHONY : clean_$(name)_def_headers
+clean_$(name)_def_headers : header_output_path := $(header_output_path)
+clean_$(name)_def_headers : header_goal_list   := $(header_goal_list)
+clean_$(name)_def_headers :
+	$(call print_progress,$@)
+	$(call remove_files,$(addprefix $(header_output_path)/,$(header_goal_list)))
diff --git a/weld/lang/c.mk b/weld/lang/c.mk
new file mode 100644
index 0000000..ab4e51a
--- /dev/null
+++ b/weld/lang/c.mk
@@ -0,0 +1,13 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines how to construct compilation rules for c
+# component definitions.  Since c is vastly superior to cpp,
+# cpp component definitions will also include this file.
+
+
+# Include the compile rules for c component definitions.
+include $(weld_path)/toolchain/$(c_toolchain)/compile.mk
diff --git a/weld/lang/cpp.mk b/weld/lang/cpp.mk
new file mode 100644
index 0000000..029c7d2
--- /dev/null
+++ b/weld/lang/cpp.mk
@@ -0,0 +1,13 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines how to construct compilation rules for cpp
+# component definitions
+
+
+# cpp is compatible with the c compilation rules so just include the
+# c stuff
+include $(weld_path)/lang/c.mk
diff --git a/weld/paths.mk b/weld/paths.mk
new file mode 100644
index 0000000..85d8877
--- /dev/null
+++ b/weld/paths.mk
@@ -0,0 +1,16 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This make file derives all the necessary paths the weld build will
+# require
+def_file_name := def.mk
+
+output_path          := $(build_path)/$(platform)/$(arch)/$(mode)
+bin_output_path      := $(output_path)/bin
+lib_output_path      := $(output_path)/lib
+obj_output_path      := $(output_path)/obj
+header_output_path   := $(output_path)/include
+resource_output_path := $(output_path)/bin
diff --git a/weld/resources.mk b/weld/resources.mk
new file mode 100644
index 0000000..fcb7247
--- /dev/null
+++ b/weld/resources.mk
@@ -0,0 +1,70 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines the set of rules for a resource list
+
+
+# This makefile is included for each component definition so clear out
+# any variables used by this makefile
+def_resource_path  :=
+resource_file      :=
+def_resource_file  :=
+resource_alias     :=
+dest_path          :=
+resource_goal_list :=
+
+
+# Figure out the resource path for this component definition
+def_resource_path := $(def_path)/$(def_resource_subdir)
+
+define resource_file_rule
+
+    $$(call debug_info,resource specified: $(1))
+
+    resource_file     := $(1)
+    def_resource_file := $$(def_resource_path)/$$(resource_file)
+    resource_alias    := $$(resource_file)
+
+    dest_path := $$(dir $$(resource_output_path)/$$(resource_file))
+
+    resource_goal_list := $$(resource_alias) $$(resource_goal_list)
+
+    directory_list := $$(dest_path) $$(directory_list)
+
+    # Define an alias for the resource file so the user can do
+    # "make path/to/resource" on the command line
+    vpath $$(resource_alias) $$(resource_output_path)
+
+    # Set the target specific variables and dependencies for this resource
+    $$(resource_alias) : resource_output_path := $$(resource_output_path)
+    $$(resource_alias) : def_resource_file    := $$(def_resource_file)
+    $$(resource_alias) : resource_alias       := $$(resource_alias)
+    $$(resource_alias) : $$(def_deps)
+    $$(resource_alias) : $$(def_resource_file)
+    $$(resource_alias) : | $$(dest_path)
+
+endef
+
+
+# Expand the resource rule for each resource specified
+$(foreach file,$(resource_list),$(eval $(call resource_file_rule,$(file))))
+
+
+# Add the list of resource goals as a dependency of the component definition's
+# headers target
+$(name)_def_resources : $(resource_goal_list)
+
+# Define the actual recipe for a resource
+$(resource_goal_list) :
+	$(call print_progress,$(resource_alias))
+	$(call soft_copy,$(def_resource_file),$(resource_output_path)/$(resource_alias))
+
+.PHONY : clean_$(name)_resources
+clean_$(name)_resources : resource_output_path := $(resource_output_path)
+clean_$(name)_resources : resource_goal_list   := $(resource_goal_list)
+clean_$(name)_resources :
+	$(call print_progress,$@)
+	$(call remove_files,$(addprefix $(resource_output_path)/,$(resource_goal_list)))
diff --git a/weld/shell/cmd.mk b/weld/shell/cmd.mk
new file mode 100644
index 0000000..01e01b8
--- /dev/null
+++ b/weld/shell/cmd.mk
@@ -0,0 +1,34 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines cmd specific functionality used throughout weld
+
+
+# Convert a native path name to a universal representation
+path_to_universal = $(subst \,/,$(1))
+
+# Convert a universtal path name to the native representation
+path_to_native = $(subst /,\,$(1))
+
+# Find all files of the specified name beneath the specified path
+find_files = $(strip $(call path_to_universal,$(shell dir /B /S $(call path_to_native,$(1)/$(2)))))
+
+# Windows doesn't support symlinking so soft and hard copy both
+# make copies'
+soft_copy = $(strip copy /V $(call path_to_native,$(1) $(2)) 1>NUL)
+hard_copy = $(strip copy /V $(call path_to_native,$(1) $(2)) 1>NUL)
+
+# Remove files which exist
+remove_files  = $(strip $(if $(wildcard $(1)),del /Q /F $(call path_to_native,$(wildcard $(1))),))
+
+# Create a directory tree
+make_directory = $(strip $(if $(wildcard $(1)),,mkdir $(call path_to_native,$(1))))
+
+# Remove directory that exists
+remove_directory  = $(strip $(if $(wildcard $(1)),rmdir /Q /S $(call path_to_native,$(wildcard $(1))),))
+
+# Print to stdout
+print  = echo $(1)
diff --git a/weld/shell/sh.mk b/weld/shell/sh.mk
new file mode 100644
index 0000000..1c1ae71
--- /dev/null
+++ b/weld/shell/sh.mk
@@ -0,0 +1,36 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines sh specific functionality used throughout weld
+
+
+# Convert a native path name to a universal representation
+path_to_universal = $(1)
+
+# Convert a universtal path name to the native representation
+path_to_native = $(1)
+
+# Find all files of the specified name beneath the specified path
+find_files = $(strip $(call path_to_universal,$(shell find $(call path_to_native,$(1)) -name $(call path_to_native,$(2)))))
+
+# Create a symlink to a file (requires passing --check-symlink-times on make command line)
+# soft_copy = $(strip ln -s -f $(call path_to_native,$(abspath $(1)) $(abspath $(2))))
+soft_copy = $(strip cp $(call path_to_native,$(1) $(2)))
+
+# Make an actual copy of a file
+hard_copy = $(strip cp $(call path_to_native,$(1) $(2)))
+
+# Remove files which exist
+remove_files = $(strip $(if $(wildcard $(1)),rm -f $(call path_to_native,$(wildcard $(1))),))
+
+# Create a directory tree
+make_directory = $(strip $(if $(wildcard $(1)),,mkdir -p $(call path_to_native,$(1))))
+
+# Remove directory that exists
+remove_directory = $(strip $(if $(wildcard $(1)),rm -rf $(call path_to_native,$(wildcard $(1))),))
+
+# Print to stdout
+print = echo $(1)
diff --git a/weld/toolchain/gcc/arch/amd64.mk b/weld/toolchain/gcc/arch/amd64.mk
new file mode 100644
index 0000000..8b4b0d1
--- /dev/null
+++ b/weld/toolchain/gcc/arch/amd64.mk
@@ -0,0 +1,10 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines settings for the amd64 architecture
+
+
+compiler_flag_list := -march=x86-64 $(compiler_flag_list)
diff --git a/weld/toolchain/gcc/arch/i686.mk b/weld/toolchain/gcc/arch/i686.mk
new file mode 100644
index 0000000..d71e78e
--- /dev/null
+++ b/weld/toolchain/gcc/arch/i686.mk
@@ -0,0 +1,10 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines settings for the i686 architecture
+
+
+compiler_flag_list := -march=i686 $(compiler_flag_list)
diff --git a/weld/toolchain/gcc/compile.mk b/weld/toolchain/gcc/compile.mk
new file mode 100644
index 0000000..97dfd46
--- /dev/null
+++ b/weld/toolchain/gcc/compile.mk
@@ -0,0 +1,172 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines the set of rules for a header list
+
+
+# This makefile is included for each component definition so clear out
+# any variables used by this makefile
+c_toolchain_path       :=
+def_source_path        :=
+def_obj_output_path    :=
+source_file            :=
+source_name            :=
+def_source_file        :=
+obj_alias              :=
+obj_goal_list          :=
+obj_goal_file_list     :=
+compile_goal           :=
+compile_goal_path      :=
+full_compile_goal_path :=
+
+
+c_toolchain_path    := $(weld_path)/toolchain/gcc
+def_source_path     := $(def_path)/$(def_source_subdir)
+def_obj_output_path := $(obj_output_path)/$(name)
+
+
+# Add the weld project's lib and header paths to the specified lib
+# and include path lists
+lib_path_list     := $(lib_output_path) $(global_lib_path_list) $(lib_path_list)
+include_path_list := $(header_output_path) $(global_include_path_list) $(include_path_list)
+
+# Add the global definition list to the component definition's list
+definition_list := $(global_definition_list) $(definition_list)
+
+# Specify a default set of compiler flags in addition to those
+# flags specified by the component definition
+compiler_flag_list := -g                              \
+                      -fstrict-aliasing               \
+                      -funsigned-char                 \
+                      -Wall                           \
+                      -Winline                        \
+                      -Wmissing-field-initializers    \
+                      -Wsign-compare                  \
+                      -Wstrict-aliasing=1             \
+                      -pedantic                       \
+                      $(global_compiler_flag_list)    \
+                      $(compiler_flag_list)
+
+# Add the global link flags to the component definition's list
+link_flag_list := $(global_link_flag_list) $(link_flag_list)
+
+# Include settings for the specified language, platform, mode, and
+# architecture
+include $(c_toolchain_path)/lang/$(lang).mk
+include $(c_toolchain_path)/platform/$(platform).mk
+include $(c_toolchain_path)/mode/$(mode).mk
+include $(c_toolchain_path)/arch/$(arch).mk
+
+define source_file_rule
+
+    $(call debug_info,source specified: $(1))
+
+    source_file     := $(1)
+    source_name     := $$(notdir $(1))
+    def_source_file := $$(def_source_path)/$$(source_file)
+    obj_alias       := $$(name)/$$(basename $$(source_name)).o
+
+    obj_goal_list := $$(obj_alias) $$(obj_goal_list)
+
+    # Define an alias for the object file so the user can do
+    # "make name/foo.o" on the command line
+    vpath $$(obj_alias) $$(obj_output_path)
+
+    # Try to include the object's dependency file generated by
+    # a previous compile
+    -include $$(obj_output_path)/$$(obj_alias).d
+
+    # Set the target specific variables and dependencies for this
+    # object
+    $$(obj_alias) : def_source_file := $$(def_source_file)
+    $$(obj_alias) : obj_alias       := $$(obj_alias)
+    $$(obj_alias) : $$(def_deps)
+    $$(obj_alias) : $$(def_source_file)
+
+endef
+
+
+# Expand the source file rule for each source specified
+$(foreach file,$(source_list),$(eval $(call source_file_rule,$(file))))
+
+obj_goal_file_list     := $(addprefix $(obj_output_path)/,$(obj_goal_list))
+source_lib_file_list   := $(addsuffix .a,$(addprefix lib,$(source_lib_list)))
+full_compile_goal_path := $(dir $(compile_goal_path)/$(compile_goal))
+
+
+# Add the necessary output directories to the list of directories to create
+directory_list := $(def_obj_output_path) $(full_compile_goal_path) $(directory_list)
+
+
+# Create aliases for the compile goal and library names
+vpath %.a             $(lib_path_list)
+vpath $(compile_goal) $(compile_goal_path)
+
+# Add the component's compile goal as a dependency to this component's
+# compile target
+$(name)_def_compile : $(compile_goal)
+
+# The actual recipe for an object file
+$(obj_goal_list) : compile_command    := $(compile_command)
+$(obj_goal_list) : obj_output_path    := $(obj_output_path)
+$(obj_goal_list) : include_path_list  := $(include_path_list)
+$(obj_goal_list) : definition_list    := $(definition_list)
+$(obj_goal_list) : compiler_flag_list := $(compiler_flag_list)
+$(obj_goal_list) : | headers
+$(obj_goal_list) : | $(def_obj_output_path)
+$(obj_goal_list) :
+	$(call print_progress,$(obj_alias))
+	$(strip                                                                                       \
+        $(compile_command) -o $(call path_to_native,$(obj_output_path)/$(obj_alias))              \
+            -MD -MP -MF $(call path_to_native,$(obj_output_path)/$(obj_alias).d) -MQ $(obj_alias) \
+            $(compiler_flag_list)                                                                 \
+            $(addprefix -I,$(call path_to_native,$(include_path_list)))                           \
+            $(addprefix -D,$(definition_list))                                                    \
+            -c $(call path_to_native,$(def_source_file)))
+
+# The actual recipe for linking a library or binary
+$(compile_goal) : compile_command    := $(compile_command)
+$(compile_goal) : link_flag_list     := $(link_flag_list)
+$(compile_goal) : compile_goal       := $(compile_goal)
+$(compile_goal) : compile_goal_path  := $(compile_goal_path)
+$(compile_goal) : obj_goal_file_list := $(obj_goal_file_list)
+$(compile_goal) : lib_path_list      := $(lib_path_list)
+$(compile_goal) : lib_list           := $(lib_list)
+$(compile_goal) : static_lib_list    := $(static_lib_list)
+$(compile_goal) : source_lib_list    := $(source_lib_list)
+$(compile_goal) : $(obj_goal_list)
+$(compile_goal) : $(source_lib_file_list)
+$(compile_goal) : | $(full_compile_goal_path)
+$(compile_goal) :
+	$(call print_progress,$(compile_goal))
+    ifeq ($(type), lib)
+	    $(call remove_files,$(call path_to_native,$(compile_goal_path)/$(compile_goal)))
+	    $(strip                                                             \
+            ar rcs                                                          \
+                $(link_flag_list)                                           \
+                $(call path_to_native,$(compile_goal_path)/$(compile_goal)) \
+                $(call path_to_native,$(obj_goal_file_list)))
+    else
+	    $(strip                                                                                   \
+            $(compile_command) -o $(call path_to_native,$(compile_goal_path)/$(compile_goal))     \
+                $(link_flag_list)                                                                 \
+                $(addprefix -L,$(call path_to_native,$(lib_path_list)))                           \
+                $(call path_to_native,$(obj_goal_file_list))                                      \
+                -Wl,--start-group                                                                 \
+                $(addprefix -l,$(lib_list) $(source_lib_list))                                    \
+                $(addsuffix .a,$(addprefix -l:lib,$(static_lib_list)))                            \
+                -Wl,--end-group)
+    endif
+
+.PHONY : clean_$(name)_def_compile
+clean_$(name)_def_compile : def_obj_output_path := $(def_obj_output_path)
+clean_$(name)_def_compile : compile_goal        := $(compile_goal)
+clean_$(name)_def_compile : compile_goal_path   := $(compile_goal_path)
+clean_$(name)_def_compile :
+	$(call print_progress,$@)
+	$(call remove_files,$(def_obj_output_path)/*.o)
+	$(call remove_files,$(def_obj_output_path)/*.o.*)
+	$(call remove_files,$(compile_goal_path)/$(compile_goal))
diff --git a/weld/toolchain/gcc/lang/c.mk b/weld/toolchain/gcc/lang/c.mk
new file mode 100644
index 0000000..94c07ac
--- /dev/null
+++ b/weld/toolchain/gcc/lang/c.mk
@@ -0,0 +1,12 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines settings for the c language
+
+
+compile_command := $(if $(gcc_opt_use_clang),clang,gcc)
+
+compiler_flag_list := -std=c99 $(compiler_flag_list)
diff --git a/weld/toolchain/gcc/lang/cpp.mk b/weld/toolchain/gcc/lang/cpp.mk
new file mode 100644
index 0000000..4a84a12
--- /dev/null
+++ b/weld/toolchain/gcc/lang/cpp.mk
@@ -0,0 +1,12 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines settings for the cpp language
+
+
+compile_command := $(if $(gcc_opt_use_clang),clang++,g++)
+
+compiler_flag_list := -std=c++11 $(compiler_flag_list)
diff --git a/weld/toolchain/gcc/mode/debug.mk b/weld/toolchain/gcc/mode/debug.mk
new file mode 100644
index 0000000..988072c
--- /dev/null
+++ b/weld/toolchain/gcc/mode/debug.mk
@@ -0,0 +1,10 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines settings for debug mode
+
+
+compiler_flag_list := -O0 -fno-inline-functions $(compiler_flag_list)
diff --git a/weld/toolchain/gcc/mode/release.mk b/weld/toolchain/gcc/mode/release.mk
new file mode 100644
index 0000000..09aa392
--- /dev/null
+++ b/weld/toolchain/gcc/mode/release.mk
@@ -0,0 +1,14 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines settings for release mode
+
+
+compiler_flag_list := -O3 $(compiler_flag_list)
+
+ifeq ($(type), bin)
+    link_flag_list := -Wl,-O,1 $(link_flag_list)
+endif
diff --git a/weld/toolchain/gcc/platform/unix.mk b/weld/toolchain/gcc/platform/unix.mk
new file mode 100644
index 0000000..387529a
--- /dev/null
+++ b/weld/toolchain/gcc/platform/unix.mk
@@ -0,0 +1,22 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines settings for the unix platform (linux, bsd, etc)
+
+
+ifeq ($(type), bin)
+    compile_goal      := $(patsubst $(output_path)/%,%,$(bin_output_path))/$(name)
+    compile_goal_path := $(output_path)
+else
+    compile_goal      := lib$(name).a
+    compile_goal_path := $(lib_output_path)
+endif
+
+ifeq ($(unix_flavor), bsd)
+    definition_list := _BSD_SOURCE $(definition_list)
+else ifeq ($(unix_flavor), linux)
+    definition_list := _DEFAULT_SOURCE $(definition_list)
+endif
diff --git a/weld/toolchain/gcc/platform/win32.mk b/weld/toolchain/gcc/platform/win32.mk
new file mode 100644
index 0000000..06a12e3
--- /dev/null
+++ b/weld/toolchain/gcc/platform/win32.mk
@@ -0,0 +1,26 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines settings for the windows platform
+
+
+ifeq ($(type), bin)
+    compile_goal      := $(patsubst $(output_path)/%,%,$(bin_output_path))/$(name).exe
+    compile_goal_path := $(output_path)
+
+    link_flag_list := -mwindows $(link_flag_list)
+else
+    compile_goal      := lib$(name).a
+    compile_goal_path := $(lib_output_path)
+endif
+
+definition_list := WIN32                 \
+                   UNICODE               \
+                   WINVER=0x0400         \
+                   _WIN32_WINNT=0x0400   \
+                   _WIN32_WINDOWS=0x0400 \
+                   _WIN32_IE=0x0500      \
+                   $(definition_list)
diff --git a/weld/utils.mk b/weld/utils.mk
new file mode 100644
index 0000000..c69e89c
--- /dev/null
+++ b/weld/utils.mk
@@ -0,0 +1,23 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This makefile defines utility functions used throughout weld
+
+
+# Print only if the user specified "show_progress=1"
+print_progress = $(if $(show_progress),@$(call print,$(1)),)
+
+# Print only if the user specified "debug_weld=1"
+debug_info = $(if $(debug_weld),$(info debug-weld: $(1)),)
+
+# Print an component definition related error message and stop the build
+def_error = $(error $(def_file): $(1))
+
+# Convert a component definition file to the components root path
+def_file_to_root_path = $(patsubst %/$(def_file_name),%,$(1))
+
+# Check if any values in a list contain a specific character
+list_contains_char = $(if $(filter-out $(words $(1)) 0, $(words $(subst $(2), ,$(1)))),1,)
diff --git a/weld/weld.mk b/weld/weld.mk
new file mode 100644
index 0000000..94b47a2
--- /dev/null
+++ b/weld/weld.mk
@@ -0,0 +1,86 @@
+# Copyright 2015 Andrew Gottemoller.
+#
+# This software is a copyrighted work licensed under the terms of the
+# Weld license.  Please consult the file "WELD_LICENSE" for
+# details.
+
+# This is the entry point into the weld build system.  This file should
+# be included by a project's root level makefile'
+
+
+# Weld doesn't use implicit rules so turn them off
+.SUFFIXES :
+
+
+# Figure out the path of this makefile
+weld_makefile := $(lastword $(MAKEFILE_LIST))
+weld_path     := $(dir $(weld_makefile))
+
+
+# If a config file is specified, include it
+-include $(config_file)
+
+# Set the defaults
+include $(weld_path)/config.mk
+
+# Verify the config file has set all the necessary variables
+ifeq ($(source_path),)
+    $(error csdk_path is not set)
+endif
+
+ifeq ($(build_path),)
+    $(error build_path is not set)
+endif
+
+ifeq ($(arch),)
+    $(error arch is not set)
+endif
+
+ifeq ($(mode),)
+    $(error mode is not set)
+endif
+
+ifeq ($(shell_name),)
+    $(error shell_name is not set)
+endif
+
+ifeq ($(platform),)
+    $(error platform is not set)
+endif
+
+ifeq ($(c_toolchain),)
+    $(error c_toolchain is not set)
+endif
+
+
+# Set derived path values
+include $(weld_path)/paths.mk
+
+# Include shell functions and standard utility functions
+include $(weld_path)/shell/$(shell_name).mk
+include $(weld_path)/utils.mk
+
+# Discover and include all the specified component definitions found
+# for this project
+include $(weld_path)/def.mk
+include $(weld_path)/disc.mk
+
+
+# Define the top level targets
+.DEFAULT_GOAL := build
+
+
+.PHONY : build
+build : $(build_target_list)
+
+.PHONE : headers
+headers : $(headers_target_list)
+
+.PHONY : clean
+clean : $(clean_target_list)
+
+.PHONE : clean_headers
+clean_headers : $(clean_headers_target_list)
+
+$(sort $(directory_list)) :
+	$(call make_directory,$@)
