Closed JeanLucPons closed 1 year ago
Is the CMake port/patch used for the Windows build in 47e1caadf0f2152a5504fda0cb7e3d28c4725858 coming from CaeruleusAqua/omniORB-cmake ?
As this repo isn't maintained anymore, I created a fork: https://github.com/beenje/omniORB-cmake I updated it for 4.2.5.
Issue could indeed come from here. It could also be some compilation flags specific to conda-forge?
I try to compare the autotools build system and the CMake one but so far nothing... any progress on your side?
I would be really surprised if the compiler activation script of conda forge set compiler options that would break the build of the project.
For now, a safety measure would be to mark the Windows package as broken
.
Sorry I haven't had time to check yet. Will try to investigate in the coming days.
To give some update. I spent quite some time on this issue but still haven't found a fix.
I decided to give up on the cmake fork (which requires some effort to maintain) and to use the default build system. Unfortunately I haven't managed to compile yet in a conda env. I posted on the omniORB mailing list but haven't got any feedback yet. ESRF will ask Duncan to have a look.
@beenje in mk/win32.mk
you need to replace /manifest
by -manifest
and /outputresource
by -outputresource
.
@beenje in
mk/win32.mk
you need to replace/manifest
by-manifest
and/outputresource
by-outputresource
.
Yes, thanks, I did (not for /outputresource
but for /manifest
). I also had to replace DUMPBIN.EXE /SYMBOLS
with DUMPBIN.EXE -SYMBOLS
. Otherwise the /
is replaced with the path of the conda env...
I opened a draft PR (in link). I compiled locally with python 3.11 and got it working. Still having some issues with other python versions that I have to investigate. Another issue is that it's not ABI compatible with the previous build. Not sure what to do about that.
I found out that you made a lot of progress but after investigating your issue on the mailing list... great job!
Regarding the ABI incompatibility in
public: __cdecl CORBA::TypeCode_member::~TypeCode_member(void) __ptr64
is the __ptr64
the issue?
Looking at the dll generated (e.g. omniDynamic425_vc16_rt.dll
) with the official build system (that I also built locally), I get:
It would be interesting to check with dependency walker why the tango.dll
complains (and if it loads the proper version of the omniorb dll).
Reynald found the -manifest
trick on Monday and I did some progress since. You can see the full patch I applied on the 4.2.5 sources here: https://github.com/conda-forge/omniorb-feedstock/pull/38/files#diff-20ae539d30792fad4cddd68d7138913e44b8c460d3ec228d57119b01d826fb10
It includes some modifications to keep the same DLL name as in the previous build (without _vc16
and only the major version number). The -MACHINE:X64
, I took from https://github.com/tango-controls/omniorb-windows-ci/blob/master/appveyor.yml
Here are the missing symbols in omniorb4_rt.dll
:
CORBA::Any::~Any(void)
CORBA::TypeCode_member::~TypeCode_member(void)
void CORBA::IDLType_Helper::release(class CORBA::_objref_IDLType *)
This is probably due to a change of c++ standard, /std:c++14
being the default since msvc 2017. I guess cpptango needs to be rebuilt with the same compiler options...
I rebuilt omniorb as well and cpptango (9.3.6 and 9.4.1) and pytango (9.3.6 and 9.4.1). @sdebionne could you please try? You'll need the latest build from each package.
I also tested TangoTest (didn't have to recompile it).
Thanks for the update, everything looks good to me! This issue was painful for Tango / Conda / Windows users so I am really grateful that it's been fixed.
For the records, just updating pytango
wont work, it would not update cpptango
and omniorb-libs
automatically. Since the versions are not binary compatible (e.g. it would segfault), incrementing the build number is probably not enough...
>mamba update omniorb-libs cpptango pytango
>mamba list
# Name Version Build Channel
cpptango 9.4.1 h7f68e99_2 conda-forge
pytango 9.4.1 py311h44fd347_1 conda-forge
omniorb-libs 4.2.5 h27dd91c_6 conda-forge
@conda-forge-admin The build system used for building omniorb has been updated and the resulting builds are binary incompatible with the previous ones. Just incrementing the build number would not prevent to mix incompatible binaries. What would be the proper way to handle that issue?
Solution to issue cannot be found in the documentation.
Issue
Hello, It seems that there is a marshalling issue with 4.2.5 conda forge build (Windows 64bit). More details in the following issue: https://gitlab.com/tango-controls/cppTango/-/issues/1066 Thanks
Installed packages
Environment info