VCVRack / rack-plugin-toolchain

53 stars 12 forks source link

The library used by build toolchain is not as windows compatible as the dev one #5

Closed squinkylabs closed 1 year ago

squinkylabs commented 3 years ago

Micorosoft Visual C++, and a normal desktop dev build with MYSY2 provides the following overload:

std::ifstream::open(wchar_t *);

This lets windows programs use unicode pathnames with input streams.

The works with a normal desktop build, but the toolchain will not accept it. Apparently a different c++ library is used there?

cschol commented 3 years ago

The tool chain environment is the standard. It is required to successfully make cross-compilation for three platforms possible.

The fact that the MSYS2 environment is different is unfortunate, but we have provided the build tool chain for developers to allow them to build their code in the production environment.

We are planning on updating the tool chain as new versions become available, but at this time (before v2) no tool chain update is planned.

squinkylabs commented 3 years ago

Yeah, that makes sense. It's certainly unfortunate that the builds are so different. Will the makefile (plugin.mk?) be updated in the future so that it at least uses the same static linkage that the toolchain uses?

cschol commented 3 years ago

The Makefile is the same. The tool chain only uses a fixed, defined compiler for each platform. I am not sure I understand why the linkage would be different in the dev environment (e.g. MSYS2). Can you explain that further?

squinkylabs commented 3 years ago

I had thought that the linkage to the c++ support libraries was dynamic in a desktop build, and static with a toolchain build. I always figured static with toolchain was intended to make library plugins not require a specific gcc runtime dll. Which makes sense, but I don't think that's what the desktop build does.

Of course I could be utterly wrong about this.

Which is to say - I don't think the makefile is the same. again - could easily be wrong. Have to confess the only time I've looked into this a lot was when the toolchain first started to be used for builds - four of my modules started crashing constantly. After a hectic couple of days trying everything I ripped out all the crashing code and re-wrote it.

Since then, every now and then I run into so crash, but I now know not to look for the cause - just remove the offending standard library function and replace with my own version.

cschol commented 3 years ago

I checked, you are correct. The tool chain links statically and the current v1 Makefile in the SDK does not. The comment in the tool chain Makefile says that in v2 the static linking will be added to the plugin.mk file and the tool chain and the dev environment will be the same. I was under the assumption that plugin.mk had already been updated, but it has not.

squinkylabs commented 3 years ago

ah, thank!

cschol commented 1 year ago

This issue is obsolete with the updates in v2 of Rack's plugin build process.