To manage the complex demands of modern high-performance computing (HPC), software applications increasingly depend on software developed by other teams, often at other institutions. An HPC software ecosystem approach is required to support dependencies on third-party scientific software. An ecosystem approach provides layers of activity above the individual software product level that promote interoperability, quality improvement, porting, testing and deployment. The U.S. Exascale Computing Project (ECP) developed its HPC software ecosystem using a three-pronged approach. First, ECP adopted and invested in Spack, a package manager designed to handle complex HPC package dependencies. Second, ECP created the Extreme Scale Scientific Software Stack (E4S), an effort that supports developing, deploying and running scientific applications on HPC platforms. Third, ECP supported software product communities, or Software Development Kits (SDKs) to develop and promote best practices, improve software interoperability, and other collaborative efforts. This paper describes ECP contributions to HPC software ecosystem challenges.