coin-or / COIN-OR-OptimizationSuite

A harness for building the bundled suite of interoperable optimization tools available in the COIN-OR repository.
118 stars 41 forks source link

Windows-CI for stables create "-md.zip" binaries that are really "MT" #30

Open jhmgoossens opened 2 weeks ago

jhmgoossens commented 2 weeks ago

The Windows-CI.yml builds for stable branches for the relevant coin-or project all create binaries that are called "-md.zip". These binaries seem to be built using the MSVC flag "MD" to include the Microsoft C runtimes as dynamic link libraries, but in reality these binaries statically link against the Microsoft C runtimes ("MT").

This is discussed in CyLP issue 204 and Cbc PR 674.

Note that the master branch binaries called "-md.zip" are not affected by this issue--these really are "-MD" binaries.

This issue for stables is caused by the fact that we simplified the windows-ci.yml in stables to --enable-msvc (like in masters), but we (I) didn't realize that the configure in master and stables are actually different in this respect: master configure expects --enable-msvc while stable configure supports --enable-msvc=MD, though "=MT" doesn't in work in stable (see above).

For now, to make "MD" binaries in stable, use --enable-msvc=MD and to make MT binaries use --enable-msvc. Maybe stable configure can be fixed here, but master configure already has this fixed by only supporting --enable-msvc which makes proper MD binaries.

This affect the following stables:

Not affected is DyLP (https://github.com/coin-or/DyLP) because if only has a master branch for which the "-md.zip" binaries are OK.

@tkralphs Which of the multiple stables have to be updated for CHiPPS-xx?

jhmgoossens commented 1 week ago

As a result of these changes to windows-ci for stable branches all MSVC Windows binaries are built with "MD", so with dynamically linked runtime. None of the MSVC Windows binaries are "MT". See also learn.microsoft.com.

If you need "MT" binaries to be included in the release artefacts, please raise an issue.

tkralphs commented 3 days ago

Hi @jhmgoossens, sorry for the delay in responding. It's easy to tell the projects that use the "new" build tools from the "old" by just looking for a subdirectory that is the same as the name of the project. If there is one, then it's the "old" build tools. If not, it's the "new. For ALPS (And BiCePS), it's admittedly a little confusing because there is a "new" version of the API developed long ago for use in DiSCO, but this is still using the older build tools (it has not been actively developed in some time). In the meantime, the version 1.5 with the "old" API, which is used by several other projects that are still actively developed, got upgraded to the "new" build tools. The story is similar for BiCePS. So these are the versions still on old build tools that are still used and need to be changed to MD: ALPS 1.5 ALPS 2.0 BiCePS 0.99 BiCePS 0.94 BLIS 0.94