Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migration to CMake build system #6

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

emprice
Copy link

@emprice emprice commented Jan 30, 2024

The major addition in this commit is the use of CMake to automatically detect the build environment, compilers, and libraries. This offers several advantages over the existing Makefile system:

  • CMake automatically enables static source dependency analysis, in a portable way, so that dependencies are tracked correctly without needing to hardcode them, regardless of host compilers.
  • Using CMake allows for a completely out-of-source build, with no files being overwritten in the original tree. This means that a developer can have several compatible builds of FARGO3D simultaneously with different build flags set, rather than needing a different clone of the code for every project or configuration.
  • CMake is used by many HPC codes, so migrating the build system makes it easier for others to interface FARGO3D with external libraries; CMake can frequently find installed libraries with little to no user input.

Additional changes include:

  • Replaced macros X, Y, Z with XDIM, YDIM, ZDIM, which reduces unintentional collisions with external libraries. Other single-letter macros may be worth reexamining for the same reason.
  • Reformatted template files and reworked code generation scripts to take advantage of Python's built-in string formatting capability. Since Python 2 is long deprecated, using newer features is not a compatibility concern.
  • Changed most #ifdef directives to #if directives. This is easier to interface with CMake and also easier to debug: GCC, for example, can warn you if a macro used in #if is undefined, which reduces the chance of a spelling error interfering with desired behavior.

Since this is a rather significant change to the base code, if the developers are interested in the new capability, I'm happy to continue developing it on this feature branch.

 + The major addition in this commit is the use of CMake to automatically
   detect the build environment, compilers, and libraries. This offers
   several advantages over the existing Makefile system:
     - CMake automatically enables static source dependency analysis, in
       a portable way, so that dependencies are tracked correctly
       without needing to hardcode them, regardless of host compilers.
     - Using CMake allows for a completely out-of-source build, with no
       files being overwritten in the original tree. This means that a
       developer can have several compatible builds of FARGO3D
       simultaneously with different build flags set, rather than needing
       a different clone of the code for every project or configuration.
     - CMake is used by many HPC codes, so migrating the build system
       makes it easier for others to interface FARGO3D with external
       libraries; CMake can frequently find installed libraries with
       little to no user input.
 + Replaced macros X, Y, Z with XDIM, YDIM, ZDIM, which reduces
   unintentional collisions with external libraries. Other single-letter
   macros may be worth reexamining for the same reason.
 + Reformatted template files and reworked code generation scripts to
   take advantage of Python's built-in string formatting capability.
   Since Python 2 is long deprecated, using newer features is not a
   compatibility concern.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant