Skip to content

Using clang-sys for header paths breaks any non-default-target builds #53

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

Closed
vvuk opened this issue Sep 8, 2016 · 1 comment
Closed

Comments

@vvuk
Copy link
Contributor

vvuk commented Sep 8, 2016

This breaks msvc (or really any non-default-target bindings generation):

When llvm/clang is built for the gnu target by default (needed for msvc bindings generation, because it's easier to use those default include paths and let the msvc target get them from $INCLUDE), clang behaves properly:

$ vladimir@glacier[5307]$ clang -E -x c++ - -v
Target: x86_64-w64-windows-gnu
[...]
#include "..." search starts here:
#include <...> search starts here:
 W:\msys64\mingw64\include\c++\6.1.0
 W:\msys64\mingw64\include\c++\6.1.0\x86_64-w64-mingw32
 W:\msys64\mingw64\include\c++\6.1.0\backward
 C:\proj\llvm\build-mingw64\bin\..\lib\clang\3.9.0\include
 W:\msys64\mingw64\lib\gcc\x86_64-w64-mingw32\6.1.0\include
 W:\msys64\mingw64\lib\gcc\x86_64-w64-mingw32\6.1.0\include-fixed
 W:\msys64\mingw64\x86_64-w64-mingw32\include
 W:\msys64\mingw64\include
End of search list.
$ vladimir@glacier[5307]$ clang --target=x86_64-pc-win32 -E -x c++ - -v
Target: x86_64-pc-windows-msvc
[...]
#include "..." search starts here:
#include <...> search starts here:
 C:\proj\llvm\build-mingw64\bin\..\lib\clang\3.9.0\include
 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include
 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include
 C:\Program Files (x86)\Windows Kits\10\include\10.0.10586.0\ucrt
 C:\Program Files (x86)\Windows Kits\10\include\10.0.10586.0\shared
 C:\Program Files (x86)\Windows Kits\10\include\10.0.10586.0\um
 C:\Program Files (x86)\Windows Kits\10\include\10.0.10586.0\winrt
End of search list.

But when rust-bindgen is passed --target=x86_64-pc-win32, it gets:

$ ./etc/bindings.sh msvc14
...
Target: x86_64-pc-windows-msvc
#include "..." search starts here:
#include <...> search starts here:
 ../target/debug/build/mozjs_sys-4ab490f4d99d7124/out/dist/include
 W:\msys64\mingw64\include\c++\6.1.0
 W:\msys64\mingw64\include\c++\6.1.0\x86_64-w64-mingw32
 W:\msys64\mingw64\include\c++\6.1.0\backward
 C:\proj\llvm\build-mingw64\bin\..\lib\clang\3.9.0\include
 W:\msys64\mingw64\lib\gcc\x86_64-w64-mingw32\6.1.0\include
 W:\msys64\mingw64\lib\gcc\x86_64-w64-mingw32\6.1.0\include-fixed
 W:\msys64\mingw64\x86_64-w64-mingw32\include
 W:\msys64\mingw64\include
 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include
 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include
 C:\Program Files (x86)\Windows Kits\10\include\10.0.10586.0\ucrt
 C:\Program Files (x86)\Windows Kits\10\include\10.0.10586.0\shared
 C:\Program Files (x86)\Windows Kits\10\include\10.0.10586.0\um
 C:\Program Files (x86)\Windows Kits\10\include\10.0.10586.0\winrt
End of search list.

which then totally breaks the generation.

I'm going to hack around this by skipping the clang-sys isystem stuff (why is it needed?) if --target is specified.

bors-servo pushed a commit that referenced this issue Sep 8, 2016
Skip -isystem stuff if --target is specified, and don't strip leading _ on Windows

The -isystem stuff fixes issue #53.

Stripping leading _ on Windows is weird; it needs to not be stripped on MSVC (leading @), but on gcc at one point it needed to be.  But now it no longer does.  I don't know.  'cargo test' succeeds with mozjs bindings generated with these fixes.
@emilio
Copy link
Contributor

emilio commented Apr 22, 2017

This was fixed in #54, thanks vlad :)

@emilio emilio closed this as completed Apr 22, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants