Automating Multilanguage Development Processes for the High-Performance Software Lifecycle Benjamin A. Allan 1 and Boyana Norris 2 1 Sandia National Laboratories, Livermore, CA, USA, baallan@ca.sandia.gov 2 Argonne National Laboratory, Argonne, IL, USA, norris@mcs.anl.gov Abstract. The component-based software engineering approach based on the Scientific Interface Definition Language(SIDL), Babel, and the Common Component Architecture have been employed successfully in high-performance multilanguage software projects dominated by the de- velopment of new code. Large scientific projects that rely on existing object-oriented (non-component) code, however, have additional automa- tion requirements, including: (1) fully automated component wrapper generation from non-component code; (2) single expression of interfaces so that maintainers and users have no development lag or code mismatch between changes to the wrapped code and changes to the wrappers; and (3) extensible source code markup for directing the wrapping process of ambiguous cases. These issues are not currently addressed by the high- performance software development tool community. We describe a com- bination of extensions to the SIDL syntax, the Babel code generation processes, and the bocca tool to address these issues, providing dramatic reductions in component software development time. 1 Background and Motivating Challenges 1.1 Component-Based Software Engineering for HPC Components There are many existing component-based application frame- works. CCA requires language interoperability through SIDL for integrating, rather than rewriting, diverse libraries into larger applications. Currently SIDL and Babel provide the strict separation of implementation language from public functionality. SIDL provides a Java-like object model with support (automatic or manual depending on the bound implementation lan- guage) for memory management, static type safety, and exception handling. The result is restricting; each of the supported modern implementation lan- guages (C++, Python, Java, Fortran) loses some features which do not map easily to the others. Particularly, function arguments are restricted to the subset that can be trivially and canonically mapped to SIDL. The typical SIDL/Babel wrapping process to create a component involves: