Skip to content

GSoC 2021 Project ideas

Laurence Kedward edited this page Feb 16, 2021 · 41 revisions

Introduction

Welcome to the Fortran-Lang ideas page for students applying for Google Summer of Code (GSoC). If you are student interested in applying for GSoC, see the Student instructions page for more information.

The list here is based on priorities identified by Fortran-Lang contributors and should inform students as to the state and direction of each project. If you are interested in an idea on this page, please contact us on our Discourse to ask any questions you have and get the latest information about the project idea. Make sure you have read the existing discussion(s) in any linked issues.

The project ideas on this page are grouped by parent repository; make sure you have familiarised yourself with each repository before exploring the ideas here.

Contents

Fortran Package Manager (fpm)

Local package registry

fpm currently supports decentralised package dependencies whereby dependencies are specified without a central registry. A long-term goal for Fortran-Lang is to host a community-supported registry of fpm packages and for fpm to support interfacing with this and other registries to simplify dependency management.

This project idea aims to acomplish a major step towards a central package registry by implementing support in fpm for a locally-hosted package registry. In particular, this project idea will entail:

  • Defining the manifest syntax to use dependencies from a registry
  • Implementing support for looking up and loading a (local) registry
  • Allowing fpm to manage a local registry by fetching it from a remote registry

Related issues:

  • fpm#321: Implement support for a local registry
  • fpm#35: Full package registry

See also:

Mentors: Laurence Kedward (@lkedward), Milan Curcic (@milancurcic)

Version constraint resolution

The current decentralised package system in fpm allows dependencies to be fetched via a git repository url. As part of this, a git tag or commit can be given to require a specific version of a dependency. There is however no way of specifying version compatibility requirements (e.g. >= 1.0.0, <2.0.0) and no way to resolve many such requirements across a dependency tree.

This project idea will require:

  • Defining a manifest syntax for version compatibility matching
  • Implementing support in fpm for solving a set of version compatibility constraints

A possible approach will be to to interface with an existing satisfiability solver such as:

  • libsolv: interface via iso_c_binding as separate fpm package

See also: existing options for version matching syntax:

Handling compiler arguments

fpm currently has limited support for specifying the command line arguments supplied to the compiler and linker. This is an important functionality when compiling Fortran and C code and is a high-priority item for fpm. Once implemented this functionality also paves the way for supporting features such as OpenMP and MPI.

Compiler argument handling must account for:

  • Different compilers (e.g. gfortran, ifort)
  • Different build profiles (e.g. release, debug, custom)
  • Different argument types (e.g. link-time, local-project, project-wide, ...)

This project idea will require:

  • Implementing manifest syntax for abstracting common compiler options (e.g. fast-math)
  • Implementing manifest syntax for manually specifying compiler flags for different build profiles / different compilers
  • Implementing logic for how compiler arguments propagate between dependencies

Related issues:

  • fpm#112: Thread about managing flags
  • fpm#223: Compiler support and recognizion
  • fpm#350: Proposal for manifest syntax

Mentors: Laurence Kedward (@lkedward), Ondrej Certik (@certik), Brad Richardson (@everythingfunctional)

Preprocessor support

Adding support for both built-in compiler preprocessors and external third-party preprocessors is important for fpm due to the additional flexibility they provide when building complex packages. In particular, the Fortran-lang stdlib project exploits the powerful fypp preprocessor for code generation and it is intended that stdlib will eventually be compatible as an fpm package.

This project idea will require:

  • Implementing a manifest syntax for defining preprocessor variables in a preprocessor-independent manner
  • Passing defined preprocessor variables to built-in preprocessors if necessary
  • Defining a manifest syntax for specifying a third-party preprocessor and the corresponding file suffixes
  • Modifying fpm to optionally invoke a third-party preprocessor before compiling sources

Third-party preprocessors should be specified on a per-project basis, i.e. multiple preprocessors might be required, and fpm should be able to report useful errors for missing third-party preprocessors.

Related issues:

  • fpm#78: support for third-party preprocessors (e.g. fypp)
  • fpm#308: Fortran-based smart code generation in fpm

Mentors: Laurence Kedward (@lkedward)

Extended Testing Support

The aim of this project is it to create a manifest specification to provide defaults to executable targets in fpm projects. Information can be passed as environment variables, command line arguments or as runner.

  • programs should have a way to find resources of which the relative position within the project source directory is known
  • the current binary directory to access other targets within a project
  • default runners like mpirun/cafrun or scripts from test frameworks should be usable to launch programs
  • a general syntax to define environment variables and command line arguments should be defined

Some features should be implemented directly in fpm, while more elaborated functionality could be implemented in a separate fpm package as offical fortran-lang fpm package.

Related issues:

Related discussions:

  • fpm#328: Example which requires external data

Mentors: Sebastian Ehlert (@awvwgk), Brad Richardson (@everythingfunctional)

Source Code Distribution with Foreign Build Systems

The aim of this project is to enable fpm to create source code distributions of itself that can be bootstrapped without fpm.

  • allow fpm to generate source code distributions with non-fpm build systems
  • generated source code distribution should allow to build fpm project without fpm, git or internet access
  • potential third-party build systems are CMake and meson
  • allows easier distribution and packaging of fpm via various packaging ecosystems

Related issues:

  • fpm#69: Have CMake and Make backends
  • fpm#70: Have a Conda backend

Mentors: Sebastian Ehlert (@awvwgk)

Standard Conformance Suite

Aim is to provide an fpm package or a functionality in fpm to check for standard conformance of a compiler.

Prior work:

Mentors: Damian Rouson (@rouson), Arjen Markus (@arjenmarkus)

Fortran Standard Library (stdlib)

Strings

Related issues:

Prior work:

WIP:

Mentors: Brad Richardson (@everythingfunctional), Milan Curcic (@milancurcic)

Containers

Fortran offers all the ingredients needed for building a library of abstract data types, such as linked lists, heaps or binary trees. There is quite a lot of material available already, but the aim of this project is to provide a standardised implementation that can be used "off the shelf". Some requirements: storage of arbitrary types of data, flexible API, so that all common uses are covered, open to further expansion.

Potential related issues:

Mentors: Arjen Markus (@arjenmarkus)

OS integration: filesystem

Cross-platform solution for file system operations.

Related issues:

  • stdlib#201: File system operations
  • stdlib#220: API for file system operations, directory manipulation

WIP implementation:

Mentors: Milan Curcic (@milancurcic)

OS integration: subprocesses

Cross-platform solution to abstract POSIX and Windows API for creating subprocesses.

Related issues:

Discourse thread:

Mentors: Milan Curcic (@milancurcic)

Maintenance of the FORD project

  • check and organize the issue tracker
  • sort and review pull request
  • ping pull request authors and merge patches

Mentors: Brad Richardson (@everythingfunctional)

Use fpm package manifest as project file

  • extract meta data from fpm.toml file instead of FORD project file

Mentors: Sebastian Ehlert (@awvwgk)

Submitting your own idea

You are welcome to apply with your own idea if there is something not on this page that you are interested in and that you think would be a good addition to one of the repositories listed here.

As with the ideas listed here, please discuss your novel idea with us on our Discourse before making your application. This allows us to give feedback on the suitability of your idea as a Fortran-Lang GSoC project and identify potential mentors.