-
-
Notifications
You must be signed in to change notification settings - Fork 17
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
Windows support and Ipopt 3.12.13 #34
Conversation
Hi! This is the friendly automated conda-forge-linting service. I just wanted to let you know that I linted all conda-recipes in your PR ( |
Neat! Where can I learn more about the |
@chrisdembia I don't know the best place; everything I've learned about m2w64 has been random conda-forge feedstock issue trackers. There is some discussion here: ContinuumIO/anaconda-issues#1484 The toolchain package itself is deprecated but the technology has been rolled into conda-forge's official compiler support, so I think it's still okay to use (but it has a new name). MSVC does not appear to compile Ipopt (I tried that first), and it is not officially supported upstream. The compiler stack used here is essentially MinGW. |
Okay thank you. I'm hoping to use Ipopt in a C++ project compiled with Visual Studio, and my understanding is I cannot use libraries compiled with MinGW. I think Ipopt can be compiled with Visual Studio; it's just that its MUMPS dependency is written in Fortran and needs to be compiled with gfortran or another open-source Fortran compiler. Anyway, I was just curious. You can ignore my comments. |
@conda-forge-admin, please rerender |
…nda-forge-pinning 2019.12.18
@conda-forge/core It looks to me like something weird is happening in the Linux build infrastructure. Configure seems to be pulling in the link flag |
I can reproduce the Linux error locally with |
Here's an excerpt from the config.log:
Notice we're getting back This looks like a bad interaction between the gcc output and Ipopt's configure script. This is a known upstream bug for a long time: https://projects.coin-or.org/Ipopt/ticket/215 - (So how did the Linux build ever work...?) |
This workaround commit was just a test to see if the Linux build will work if you hardcode FLIBS. The real solution (which should probably become its own PR) will be to patch the upstream I'd like to get functioning Ipopt 3.12.x for all platforms before dealing with 3.13, though. |
Hi! This is the friendly automated conda-forge-linting service. I was trying to look for recipes to lint for you, but it appears we have a merge conflict. Please ping the 'conda-forge/core' team (using the @ notation in a comment) if you believe this is a bug. |
Hi! This is the friendly automated conda-forge-linting service. I just wanted to let you know that I linted all conda-recipes in your PR ( |
@conda-forge-admin, please rerender |
I'm not sure if we are supposed to license the build scripts anything other than the default. But I am sure that other feedstocks likely contain patches that are taken from non-BSD-3 licensed code. |
@@ -8,6 +8,7 @@ mkdir build | |||
cd build | |||
|
|||
../configure \ | |||
FLIBS="-L$PREFIX/lib -L$BUILD_PREFIX/bin/../lib/gcc/x86_64-conda_cos6-linux-gnu/7.3.0 -L$BUILD_PREFIX/bin/../lib/gcc -L$BUILD_PREFIX/bin/../lib/gcc/x86_64-conda_cos6-linux-gnu/7.3.0/../../../../x86_64-conda_cos6-linux-gnu/lib/../lib -L$BUILD_PREFIX/bin/../x86_64-conda_cos6-linux-gnu/sysroot/lib/../lib -L$BUILD_PREFIX/bin/../x86_64-conda_cos6-linux-gnu/sysroot/usr/lib/../lib -L$BUILD_PREFIX/bin/../lib/gcc/x86_64-conda_cos6-linux-gnu/7.3.0/../../../../x86_64-conda_cos6-linux-gnu/lib -L$BUILD_PREFIX/bin/../x86_64-conda_cos6-linux-gnu/sysroot/lib -L$BUILD_PREFIX/bin/../x86_64-conda_cos6-linux-gnu/sysroot/usr/lib -lrt -lgfortran -lm -lquadmath" \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this change necessary? Seems like these should be discovered rather than specified explicitly.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That shouldn't be here and looks like a rebase error on my part.
@isuruf Would you be willing to answer our questions here and double check this windows build? |
Only rarely. Most packages use MSVC.
The C runtime that MinGW and MSVC are using are slightly different. Therefore, there might be incompatibilities. (segfaults when you try to free an object created in a different C runtime) |
Thanks! There is also the list of questions in the very first comment that we don't have answers to. |
Also, the C++ runtimes are completely different. |
|
Since there's CMake support, why not try VS2015? |
@isuruf One part of the ipopt build process requires a working Fortran compiler, at least for the 3.12.x versions. Also, when I naively tried changing the build script to create CMake VS Makefiles, I received errors unrelated to a missing Fortran compiler. Generally speaking, upstream seemed to recommend the MSYS/MinGW option for building: https://projects.coin-or.org/Ipopt/browser/stable/3.12/Ipopt/doc/documentation.pdf?format=raw The story might have changed for 3.13, since they rewrote the build system, but I haven't looked at it yet. I'm not saying it's impossible, but it's unclear how much work it would be. |
We are are using flang in th slycot feedstock with cmake: https://github.com/conda-forge/slycot-feedstock Maybe that's possible? |
These new commits for a MSVC-compatible build depend on conda-forge/mumps-feedstock#56 Even with that PR, locally I get some test failures for the built-in examples. However, the majority of them pass and I am not sure if some numerical instability is to be expected here. |
…da-forge-pinning 2020.02.12
Hi, i tested the 3.12.13 package from the pycalphad channel, it does not include the file IpoptConfig.h which is needed by IpDebug.hpp, IpJournalist.hpp and IpTypes.hpp |
@nniclausse Are those files needed by downstream packages, or only at build time? |
I'm trying to build an app that use ipopt, this app includes IpTNLP.hpp, which requires IpUtils.hpp -> IpTypes.hpp -> IpoptConfig.h -> config_ipopt_default.h |
Ah ok, I think the reason I didn't catch it is because I was testing against the C interface without making sure C++ still worked. |
Hi @richardotis, I am interesting in helping to get this merged, any suggestion on what are the next steps that need to be addressed? Thanks! |
I guess we can close this PR as it has been superseded by #47 @conda-forge/ipopt . |
Checklist
0
(if the version changed)conda-smithy
(Use the phrase@conda-forge-admin, please rerender
in a comment in this PR for automated rerendering)Closes #1
This PR is an attempt to get Windows support working for ipopt using the m2w64 toolchain and cmake. The cmake scripts are based on the awesome efforts of @ycollet to ship CMake scripts for the whole Coin-OR ecosystem: https://github.com/ycollet/coinor-cmake
The scripts here are lightly modified to address some path differences, and for stability across future versions of Ipopt.
compiler('m2w64_c')
syntax didn't work locally when I ranconda build recipe -m .ci_support\win_c_compilervs2015cxx_compilervs2015.yaml
. Help would be appreciated here.