Trilinos icon indicating copy to clipboard operation
Trilinos copied to clipboard

Dropping support for Makefile.export.* files with TriBITS/Trilinos refactoring to support modern CMake features

Open bartlettroscoe opened this issue 4 years ago • 41 comments

CC: @trilinos/framework, @trilinos/trilinos-product-owners

Blocked By: #8401

As part of the imminent TriBITS refactoring described in TriBITSPub/TriBITS#299 to use modern CMake target-based features will that will be enabled by the upgrade of the minimum required CMake (see #8401) be that the current implementation for generating export makefiles (i.e. Makefile.export.* files) will be broken and it may be difficult to bring it back.

We discussed this topic and the topic of dropping support for Makefile.export.* files at the Trilinos Product Leaders Meeting on 12/16/2020. The action items that came out of that were:

  • [x] Add an example raw CMake project in Trilinos/demos/ that uses find_package(Trilinos) and uses some functionality in Trilinos ... See demos/simpleBuildAgainstTrilinos
  • [x] Create a plan for customers to transition to no Makefile.export.Trilinos files. (I.e., either switch to CMake or manually get the list of libraries you need such as with CMAKE_EXPORT_COMPILE_COMMANDS) ... Plan is for customers to use CMake or manually maintain their link lines (like Sierra does)
  • [x] Craft and send out an email to various mail lists announcing dropping support for Makefile.export.Trilinos and get feedback from internal and external customers ... Sent out emails on 5/19/2021 stating support will be dropped on 6/10/2021
  • [x] Send out reminder email about dropping support for Makefile.export.Trilinos on 6/10/2021.
  • [x] Update documentation on trilinos.github.io related to building against Trilinos (update Find_Trilinos.txt and remove Export_Makefile.txt) ... See PR https://github.com/trilinos/trilinos.github.io/pull/49 ...
  • [x] Drop support for Makefile.export.Trilinos from TriBITS and Trilinos 'develop' on 6/10/2021 ... See PR #9284
  • [x] Send out one list set of emails to various mail lists announcing that Trilinos 'develop' (as of the merge of PR #9284) no longer supports Makefile.export.* files.
  • [x] Talk with Scott Collis about dropping support for Makefile.export.Trilinos (~~meeting set for 6/22/2021~~ ... pushed back till 7/9/2021).

bartlettroscoe avatar Dec 17 '20 23:12 bartlettroscoe

Create a plan for customers to transition to no Makefile.export.Trilinos files. (I.e., either switch to CMake or manually get the list of libraries you need such as with CMAKE_EXPORT_COMPILE_COMMANDS).

Making this way more general could help: https://gitlab.kitware.com/paraview/paraview/-/blob/master/Clients/CommandLineExecutables/paraview-config.in. That is heavily ParaView-specific, but is an outline of what would be needed for something more generally.

mathstuf avatar Dec 17 '20 23:12 mathstuf

Aw, man. Those things are useful.

csiefer2 avatar Jan 06 '21 16:01 csiefer2

Aw, man. Those things are useful.

@csiefer2, the goal would be to move customers to use CMake for their projects using Trilinos.

bartlettroscoe avatar Jan 06 '21 17:01 bartlettroscoe

Guess that just means I need to learn how to write cmake from scratch for little toy codes that use Trilinos...

Do we have any documentation for that?

csiefer2 avatar Jan 07 '21 03:01 csiefer2

Do we have any documentation for that?

Before these changes are pushed into Trilinos, we will have instructions and an example in Trilinos (probably in the demos directory). It's only a few lines of code to pull trilinos into a new cmake app.

rppawlo avatar Jan 07 '21 13:01 rppawlo

Do we have any documentation for that?

@csiefer2, we will. See above.

bartlettroscoe avatar Jan 07 '21 16:01 bartlettroscoe

@csiefer2, we will. See above.

Missed that! Cool! Thanks!

csiefer2 avatar Jan 12 '21 20:01 csiefer2

Related to:

  • SEPW-213
  • SEPW-214

bartlettroscoe avatar Mar 08 '21 20:03 bartlettroscoe

Looks like there is some urgency for at least and example using find_pakage(Trilinos) as per #8857. I can't believe there is no documentation or even an hint in Trilinos about how to do this. (In my defense, I did not write any of the CMake code in TriBITS or Trilinos to support TrilinosConfig.cmake. But I will have to rewrite this as part of https://github.com/TriBITSPub/TriBITS/issues/299.)

bartlettroscoe avatar Mar 09 '21 21:03 bartlettroscoe

CC: @rppawlo, @jwillenbring

Turns out an example of how to build against Trilinos using CMake already exists under demos/buildAgainstTrilinos. I have no idea if that still works or not. I did not even know that this example even existed!

I can test and update this example to make sure it works but then we need to protect this in PR testing.

@trilinos/framework, could you consider setting up the PR builds to do an install of Trilinos and then build and test this example project? We need to ensure that example always works and it will also do some level of installation testing.

bartlettroscoe avatar Mar 09 '21 22:03 bartlettroscoe

FYI: PR #8867 takes care of the example of how to build and link against installed Trilinos using CMake. Please give this a review and provide comments there.

bartlettroscoe avatar Mar 10 '21 16:03 bartlettroscoe

With the merge of PR #8867 a simple CMake example now exists.

bartlettroscoe avatar Mar 11 '21 14:03 bartlettroscoe

@ccober6, @trilinos/trilinos-product-owners,

It is time to drop support for Makefile.export.* files to enable the TriBITS refactor that I am now finally able to dive into (see riBITSPub/TriBITS#367).

I vote that the plan to transition from Makefile.export.* is for downstream customers to use CMake. Any objections to that?

I want to propose that we send out announcements to internal and external stakeholders ASAP saying that support for Makefile.export.* files will be dropped and then go ahead and remove support for them in Trilinos as a trial to see who this impacts. Initially we can disable support in such a way that we could bring it back for a short amount of time but it will not be long once I get into TriBITSPub/TriBITS#299 that it will not be easy to bring it back.

Who do we send out announcements to or should we just disable Makefile.export.* files right away and see who complains? People have been warned about this for a long time.

bartlettroscoe avatar Apr 23 '21 02:04 bartlettroscoe

BTW, the example in:

https://gitlab.kitware.com/paraview/paraview/-/blob/master/Clients/CommandLineExecutables/paraview-config.in

pointed to by @mathstuf above basically creates a mock CMake project that imports a <Package>Config.cmake file (using find_package(<Package>)) and then runs a verbose build and grabs the include directories and link libraries out of the STDOUT. It looks like it would not be too hard to make that work if someone is really passionate about keeping support for the Makefile.export.Trilinos file. (That could be hacked into Trilinos if needed.)

bartlettroscoe avatar Apr 23 '21 02:04 bartlettroscoe

@trilinos/trilinos-product-owners,

To show how long this issue has been discussed, there is a long email thread going back to January 2020 with various internal Trilinos customers that started with the below (redacted) email chain. I can post the full email thread in an internal SNL issue tracker if desired.


From: Bartlett, Roscoe A Sent: Monday, January 27, 2020 1:50 PM To: [redacted] Subject: Makefile.export.Trilinos and Makefile.export.<Package> support?

Hello Trilinos Product Leads,

As was mentioned at the ATDM PI Meeting today, one piece of functionality that has not been tested yet with the Kokkos 3.0 CMake refactoring is the generation of Makefile.export.Trilinos and Makefile.export.<Package> files which is supported by TriBITS as documented at:

  • https://tribits.org/doc/TribitsBuildReference.html#generating-export-files

This allows Makefile-based projects to easily use Trilinos installations. This was functionality written years ago, first by Kevin Long, then then extended by Brent P. and maintained a little by Nico S. and myself over the years. (I was the first to add some automated testing for it a few years ago to help protect it on the TriBITS side as part of CASL).

I don’t know how many Makefile-based projects still use generated Makefile.export.Trilinos and Makefile.export.<Package> files but I know that the MOOSE code from INL uses them to link to Trilinos and that is used in the CASL VERA code (which is still be maintained as of now). But with CASL ending, it might be that the post-CASL work will not be depending on MOOSE and MOOSE will not longer be needing to use Trilinos. And they don’t even mention Trilinos, for example, at:

  • https://mooseframework.inl.gov/getting_started/installation/manual_installation_gcc.html

So perhaps this is the time to dump support for Makefile-based projects? (I would very much like to dump support for Makefile-based projects from TriBITS in the current refactoring work that I am doing so I would personally welcome this.)

But at the very least, there should be some attempt to poll the Trilinos user community and find out who removing support for Makefile.export.Trilinos and Makefile.export.<Package> files will impact.

Should we create a Trilinos GitHub issue for this?

Thanks,

-Ross


From: On Behalf Of Glass, Micheal W Sent: Monday, January 27, 2020 1:07 PM To: [redacted] Cc: [redacted] Subject: Weekly PI Status Meeting - 01.27.2020

[redacted]

  1. Siva a. Asked Ross to send cmake/makefiles issues to Trilinos leaders group

[redacted]

bartlettroscoe avatar Apr 23 '21 03:04 bartlettroscoe

@trilinos/trilinos-product-owners, @ccober6,

Any final objections before I do this?


From: Bartlett, Roscoe A Sent: Tuesday, April 27, 2021 1:39 PM To: @trilinos/trilinos-product-owners, @ccober6 Subject: RE: Makefile.export.Trilinos and Makefile.export.<Package> support?

Hello Trilinos Product Area Leads and Product Manager,

I am ready to pull the trigger on removing support for export Makefiles in TriBITS (and therefore in Trilinos) to make room for the modernization of TriBITS as long discussed.

See my comment in:

https://github.com/trilinos/Trilinos/issues/8498#issuecomment-825342514

Any final objections before I post a PR to Trilinos with an updated TriBITS with no support for export Makefiles?

Thanks,

-Ross

bartlettroscoe avatar Apr 27 '21 17:04 bartlettroscoe

Just a few questions:

  1. Who is dependent on export Makefiles?
    • ExxonMobil CRADA is OK. We are going to freeze our version of Trilinos, since the CRADA is finished.
    • Others? Are they ready?
  2. Have you sent out an email announcing this (from your check list above)?
  3. What is the timeline on this? A few days/weeks?

ccober6 avatar Apr 27 '21 18:04 ccober6

@ccober6,

Who is dependent on export Makefiles? Others? Are they ready?

The only SNL APP that I know of that was still using export Makefiles was Xyce but they had a plan to fix that. I will ping the PI to make sure they are ready for this.

Have you sent out an email announcing this (from your check list above)?

I have not. What are the right email lists to use for this? [email protected]? Are there any others? Someone please tell me.

What is the timeline on this? A few days/weeks?

A couple of weeks at most. Basically I can't do TriBITSPub/TriBITS#299 without removing support for export Makefiles. Once that refactoring starts (in the next week), then there is no going back. (Yes, there are ways that you could generate Makefile.export.Trilinos that may work like described above but that could take a significant amount of effort. But the plan was to stop supporting Makefile-based projects and only support CMake-based projects.)

bartlettroscoe avatar Apr 27 '21 19:04 bartlettroscoe

@bartlettroscoe

@ccober6,

Who is dependent on export Makefiles? Others? Are they ready?

The only SNL APP that I know of that was still using export Makefiles was Xyce but they had a plan to fix that. I will ping the PI to make sure they are ready for this.

Great!

Have you sent out an email announcing this (from your check list above)?

I have not. What are the right email lists to use for this? [email protected]? Are there any others? Someone please tell me.

I would suggest sending this to [email protected], [email protected] and [email protected]. We probably need to give a time frame to give folks a chance to handle this.

We should also mention this at the SART meeting in two weeks (the meeting was this morning :( ). I have added it to the agenda for 2021-05-11. (https://wiki.sandia.gov/display/TRIL/2021-05-11+SART+Meeting+Notes)

What is the timeline on this? A few days/weeks?

A couple of weeks at most. Basically I can't do TriBITSPub/TriBITS#299 without removing support for export Makefiles. Once that refactoring starts (in the next week), then there is no going back. (Yes, there are ways that you could generate Makefile.export.Trilinos that may work like described above but that could take a significant amount of effort. But the plan was to stop supporting Makefile-based projects and only support CMake-based projects.)

Yeah, all the more we should make sure folks have a heads up on this and the timeline.

ccober6 avatar Apr 27 '21 20:04 ccober6

I would suggest sending this to [email protected], [email protected] and [email protected]. We probably need to give a time frame to give folks a chance to handle this.

@ccober6, okay, I will create a draft email and send to you and the Trilinos Product Area Leads to provide feedback before I send it out for real.

bartlettroscoe avatar Apr 27 '21 20:04 bartlettroscoe

I will create a draft email and send to you and the Trilinos Product Area Leads to provide feedback before I send it out for real.

FYI: I sent out a draft of the email to the Trilinos Product Area Leads and I will get feedback in that email chain.

bartlettroscoe avatar Apr 27 '21 22:04 bartlettroscoe

@ccober6

Shoot, it looks like an important Trilinos customer has not made the transition from Autotools (based on Makefiles) to CMake as hopped and they say early June at the earliest. This would seem to be a major impediment to doing the TriBITS refactoring in TriBITSPub/TriBITS#299 unless we find a way to keep supporting Makefile.export.* files (as described above).

bartlettroscoe avatar Apr 27 '21 22:04 bartlettroscoe

Yeah, saw the email thread. Let's work out a timeline with the customer.

ccober6 avatar Apr 27 '21 23:04 ccober6

FYI: Xyce is working to switch their daily integration build against Trilinos 'master' from autotools to CMake. There was an issue with using shared libs that caused ugly configure warnings and those warnings were also shown in simpleBuildAgainstTrilinos. I fixed that project in PR #9112 to make those warnings go away and hopefully Xyce can do the same thing.

The goal is to not require use to keep supporting Makefile.export.* files in order to support Xyce.

bartlettroscoe avatar May 07 '21 18:05 bartlettroscoe

From: Bartlett, Roscoe A Sent: Wednesday, May 19, 2021 3:08 PM To: @trilinos/trilinos-product-owners Subject: RE: DRAFT: Trilinos dropping support for Makefile.export.Trilinos

Hello All,

From recent conversations with Xyce in [redacted] it sounds like they are very close (weeks away) to switching Xyce over to using CMake for their daily Trilinos integration testing builds (but with Xyce + Trilinos ‘develop’ and Charon + Xyce + Trilinos ‘develop’). Therefore, I think it is time to send out the below draft email to the various Trilinos email lists floating a trial date for removal for support for the Makefile.export.* files. I will float a trial date of June 10, 2021.

I will be sending out the first set of emails later today to see what type of response we get.

-Ross

bartlettroscoe avatar May 19 '21 19:05 bartlettroscoe

From: Bartlett, Roscoe A Sent: Wednesday, May 19, 2021 3:59 PM To: [trilinos-developers] Cc: [trilinos-framework] Subject: Trilinos dropping support for Makefile.export.* files

Hello Trilinos Developers,

If you are not using the installed Makefile.export.Trilinos or the package-level Makefile.export. files, then please ignore.

I am writing this email to announce that as part of a CMake build-system modernization effort, Trilinos will be dropping support for the installed Makefile.export.Trilinos and package-level Makefile.export. files that are used by Makefile-based projects to get information to build and link against an installation of Trilinos. The current target date for dropping support in the Trilinos ‘develop’ branch is Thursday, June 10, 2021.

The expectation is that the majority of Trilinos customer projects are (or soon will be) using CMake and can therefore use the CMake command find_package(Trilinos COMPONNETS …) or find_package(<TrilinosPackage>) that pulls in info from the installed TrilinosConfig.cmake and package-level <TrilinosPackage>Config.cmake files.

An updated example project using CMake to pull in an installation of Trilinos is given in:

  • https://github.com/trilinos/Trilinos/tree/master/demos/simpleBuildAgainstTrilinos

This change has been discussed in the Trilinos community for over a year with some background mentioned in:

  • https://github.com/trilinos/Trilinos/issues/8498

and the technical reasons for this are discussed in:

  • https://github.com/TriBITSPub/TriBITS/issues/299

If this change on this time scale will cause a significant impediment to your project, then please let us know ASAP!

Also, please forward this email to anyone who you think might be impacted by this and/or may want to provide some feedback.

Thanks,

-Ross

P.S. It is possible to bring back support for the installed Makefile.export.Trilinos and package-level Makefile.export. files using a different approach after this refactoring to modern CMake. But there needs to be a strong need from the customer community to justify this and resources will need to be allocated to implement and support this going forward. (But the expectation is that enough of the Trilinos user community has already moved to CMake that there is not a strong need for this.)

bartlettroscoe avatar May 19 '21 20:05 bartlettroscoe

@jwillenbring, can you please approve the email shown below to get sent out to the Trilinos user community?


From: Bartlett, Roscoe A Sent: Wednesday, May 19, 2021 4:06 PM To: '[email protected]'. '[email protected]' Cc: [trilinos-framework] Subject: Trilinos dropping support for Makefile.export.* files

Hello Trilinos Users,

If you are not using the installed Makefile.export.Trilinos or the package-level Makefile.export. files, then please ignore.

[same as above]

bartlettroscoe avatar May 19 '21 20:05 bartlettroscoe

Okay, I think I have gotten emails sent out to all of the Trilinos developer and user email lists that @ccober6 pointed me to offline (two examples are shown above).

bartlettroscoe avatar May 19 '21 22:05 bartlettroscoe

CC: @keitat, @ccober6

Excellent news. I can happily report the Xyce + Trilinos 'develop' and Charon + Xyce + Trilinos 'develop' integration efforts have been upgraded to use CMake for building Xyce and are no longer requiring Makefile.export.* files from Trilinos! (See internal issue 216 for details.)

Also, I only got back one response to my emails from 5/19/2021 shown above from an internal customer about concern for dropping support for Makefile.export.* files by 6/10/2021. @ccober6 responded to that customer and I believe the problem is mittigated.

Therefore, I don't see any impediment to dropping support Makefile.export.* files from Trilinos 'develop' on 6/10/2021.

@ccober6, do I need to send out another email to any email lists warning people about dropping support for Makefile.export.* files from Trilinos 'develop' on 6/10/2021? I don't want to spam people but I also don't want to catch people off guard. (The truth is that no matter what you do, some people will feel like you are spamming them and other people will feel like you dropped a bomb on them.)

bartlettroscoe avatar May 28 '21 15:05 bartlettroscoe

@bartlettroscoe I am assuming you meant 06/10/2021. I agree about spamming folks, but still keeping them informed. I would suggest sending a reminder on 06/07/2021. There is a SART meeting on 06/08/2021, and I have added a reminder to the agenda. I would just follow-up after the fact letting folks know it is done. Does this sound reasonable?

ccober6 avatar May 28 '21 17:05 ccober6