To develop an application with SYMPHONY, you need to first understand how the source files are organized. Note that in this chapter, all path names are given Unix-style. When you unpack the SYMPHONY source distribution, you will notice at the root level a number of files associated with the automatic configuration system, as well as a number of subdirectories, each of which corresponds to a library used by SYMPHONY for some specific functionality. The files associated with SYMPHONY itself are located in the SYMPHONY subdirectory. Within the SYMPHONY subdirectory are a number of other subdirectories, including one called src containing the source files for SYMPHONY itself.
Also in the main SYMPHONY/ subdirectory, there is a subdirectory called Applications/ (see Sections 2.2.2.4 and 2.2.3.4) for instructions on building the applications). The Applications/ subdirectory contains the source code for a number of sample applications developed with SYMPHONY, as well as function stubs for developing a custom application using SYMPHONY's callbacks. The subdirectory SYMPHONY/Applications/USER contains the files needed for implementing the callbacks and is a template for developing an application. In this directory and its subdirectories, which mirror the subdirectories of SYMPHONY itself, each file contains function stubs that can be filled in to create a new custom application. There is a separate subdirectory for each module—master ( Master/), tree management ( TreeManager/), cut generation ( CutGen/), cut management ( CutPool/), and node processing ( LP/). Within each subdirectory, there is a file, initially called USER/*/user_*.c, where * is the name of the module. The primary thing that you, as the user, need to understand to build a custom application is how to fill in these stubs. That is what the second part of this chapter is about. Before describing that, however, we will discuss how to build your application.