CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS fails when building for Arm64 Windows Desktop target
Testing new CMake 3.10 feature - support for Windows Arm64 target I have encountered several issues. One of them is the inability to generate exports.def file from Windows COFF object files. I suspect it is caused by usage of wrong COFF parser i.e. 32 bit instead of 64 bit or changes to the Windows COFF format which prevent current parser to read it.
I have verified that this is the only problem for several Microsoft vcpkg ports including libwebp library. Current workaround is to use exports.def files generated by other targets i.e. x64 and knock out of custom task vcxproj task used to generate exports.def file by hand project edition.
Steps to reproduce:
- Clone
https://github.com/Microsoft/vcpkg
- Apply my PR
https://github.com/Microsoft/vcpkg/pull/2371
- Build vcpkg by running
.\bootstrap-vcpkg.bat
- run
vcpkg install libwebp:arm64-windows
CMake configuration step should succeed but build will fail with the following error:
[65/65] cmd.exe /C "cmd.exe /C ""C:\Program Files\CMake\bin\cmake.exe" -E __create_def E:\src\ms\vcpkg\buildtrees\libwebp\arm64-windows-rel\CMakeFiles\webp.dir\exports.def E:\src\ms\vcpkg\buildtrees\libwebp\arm64-windows-rel\CMakeFiles\webp.dir\exports.def.objs && cd E:\src\ms\vcpkg\buildtrees\libwebp\arm64-windows-rel" && "C:\Program Files\CMake\bin\cmake.exe" -E vs_link_dll --intdir=CMakeFiles\webp.dir --manifests -- C:\PROGRA~2\MIB055~1\2017\ENTERP~1\VC\Tools\MSVC\1412~1.258\bin\Hostx64\arm64\link.exe CMakeFiles\webp.dir\src\dec\alpha_dec.c.obj CMakeFiles\webp.dir\src\dec\buffer_dec.c.obj CMakeFiles\webp.dir\src\dec\frame_dec.c.obj CMakeFiles\webp.dir\src\dec\idec_dec.c.obj CMakeFiles\webp.dir\src\dec\io_dec.c.obj CMakeFiles\webp.dir\src\dec\quant_dec.c.obj CMakeFiles\webp.dir\src\dec\tree_dec.c.obj CMakeFiles\webp.dir\src\dec\vp8_dec.c.obj CMakeFiles\webp.dir\src\dec\vp8l_dec.c.obj CMakeFiles\webp.dir\src\dec\webp_dec.c.obj CMakeFiles\webp.dir\src\demux\anim_decode.c.obj CMakeFiles\webp.dir\src\demux\demux.c.obj CMakeFiles\webp.dir\src\dsp\alpha_processing.c.obj CMakeFiles\webp.dir\src\dsp\cpu.c.obj CMakeFiles\webp.dir\src\dsp\dec.c.obj CMakeFiles\webp.dir\src\dsp\dec_clip_tables.c.obj CMakeFiles\webp.dir\src\dsp\filters.c.obj CMakeFiles\webp.dir\src\dsp\lossless.c.obj CMakeFiles\webp.dir\src\dsp\rescaler.c.obj CMakeFiles\webp.dir\src\dsp\upsampling.c.obj CMakeFiles\webp.dir\src\dsp\yuv.c.obj CMakeFiles\webp.dir\src\dsp\argb.c.obj CMakeFiles\webp.dir\src\dsp\cost.c.obj CMakeFiles\webp.dir\src\dsp\enc.c.obj CMakeFiles\webp.dir\src\dsp\lossless_enc.c.obj CMakeFiles\webp.dir\src\enc\alpha_enc.c.obj CMakeFiles\webp.dir\src\enc\analysis_enc.c.obj CMakeFiles\webp.dir\src\enc\backward_references_enc.c.obj CMakeFiles\webp.dir\src\enc\config_enc.c.obj CMakeFiles\webp.dir\src\enc\cost_enc.c.obj CMakeFiles\webp.dir\src\enc\delta_palettization_enc.c.obj CMakeFiles\webp.dir\src\enc\filter_enc.c.obj CMakeFiles\webp.dir\src\enc\frame_enc.c.obj CMakeFiles\webp.dir\src\enc\histogram_enc.c.obj CMakeFiles\webp.dir\src\enc\iterator_enc.c.obj CMakeFiles\webp.dir\src\enc\near_lossless_enc.c.obj CMakeFiles\webp.dir\src\enc\picture_enc.c.obj CMakeFiles\webp.dir\src\enc\picture_csp_enc.c.obj CMakeFiles\webp.dir\src\enc\picture_psnr_enc.c.obj CMakeFiles\webp.dir\src\enc\picture_rescale_enc.c.obj CMakeFiles\webp.dir\src\enc\picture_tools_enc.c.obj CMakeFiles\webp.dir\src\enc\predictor_enc.c.obj CMakeFiles\webp.dir\src\enc\quant_enc.c.obj CMakeFiles\webp.dir\src\enc\syntax_enc.c.obj CMakeFiles\webp.dir\src\enc\token_enc.c.obj CMakeFiles\webp.dir\src\enc\tree_enc.c.obj CMakeFiles\webp.dir\src\enc\vp8l_enc.c.obj CMakeFiles\webp.dir\src\enc\webp_enc.c.obj CMakeFiles\webp.dir\src\mux\anim_encode.c.obj CMakeFiles\webp.dir\src\mux\muxedit.c.obj CMakeFiles\webp.dir\src\mux\muxinternal.c.obj CMakeFiles\webp.dir\src\mux\muxread.c.obj CMakeFiles\webp.dir\src\utils\bit_reader_utils.c.obj CMakeFiles\webp.dir\src\utils\color_cache_utils.c.obj CMakeFiles\webp.dir\src\utils\filters_utils.c.obj CMakeFiles\webp.dir\src\utils\huffman_utils.c.obj CMakeFiles\webp.dir\src\utils\quant_levels_dec_utils.c.obj CMakeFiles\webp.dir\src\utils\rescaler_utils.c.obj CMakeFiles\webp.dir\src\utils\random_utils.c.obj CMakeFiles\webp.dir\src\utils\thread_utils.c.obj CMakeFiles\webp.dir\src\utils\utils.c.obj CMakeFiles\webp.dir\src\utils\bit_writer_utils.c.obj CMakeFiles\webp.dir\src\utils\huffman_encode_utils.c.obj CMakeFiles\webp.dir\src\utils\quant_levels_utils.c.obj /out:webp.dll /implib:webp.lib /pdb:webp.pdb /dll /version:0.0 /machine:ARM64 /DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF /DEF:CMakeFiles\webp.dir\exports.def shlwapi.lib ole32.lib windowscodecs.lib kernel32.lib user32.lib && cd ."
FAILED: webp.dll webp.lib
cmd.exe /C "cmd.exe /C ""C:\Program Files\CMake\bin\cmake.exe" -E __create_def E:\src\ms\vcpkg\buildtrees\libwebp\arm64-windows-rel\CMakeFiles\webp.dir\exports.def E:\src\ms\vcpkg\buildtrees\libwebp\arm64-windows-rel\CMakeFiles\webp.dir\exports.def.objs && cd E:\src\ms\vcpkg\buildtrees\libwebp\arm64-windows-rel" && "C:\Program Files\CMake\bin\cmake.exe" -E vs_link_dll --intdir=CMakeFiles\webp.dir --manifests -- C:\PROGRA~2\MIB055~1\2017\ENTERP~1\VC\Tools\MSVC\1412~1.258\bin\Hostx64\arm64\link.exe CMakeFiles\webp.dir\src\dec\alpha_dec.c.obj CMakeFiles\webp.dir\src\dec\buffer_dec.c.obj CMakeFiles\webp.dir\src\dec\frame_dec.c.obj CMakeFiles\webp.dir\src\dec\idec_dec.c.obj CMakeFiles\webp.dir\src\dec\io_dec.c.obj CMakeFiles\webp.dir\src\dec\quant_dec.c.obj CMakeFiles\webp.dir\src\dec\tree_dec.c.obj CMakeFiles\webp.dir\src\dec\vp8_dec.c.obj CMakeFiles\webp.dir\src\dec\vp8l_dec.c.obj CMakeFiles\webp.dir\src\dec\webp_dec.c.obj CMakeFiles\webp.dir\src\demux\anim_decode.c.obj CMakeFiles\webp.dir\src\demux\demux.c.obj CMakeFiles\webp.dir\src\dsp\alpha_processing.c.obj CMakeFiles\webp.dir\src\dsp\cpu.c.obj CMakeFiles\webp.dir\src\dsp\dec.c.obj CMakeFiles\webp.dir\src\dsp\dec_clip_tables.c.obj CMakeFiles\webp.dir\src\dsp\filters.c.obj CMakeFiles\webp.dir\src\dsp\lossless.c.obj CMakeFiles\webp.dir\src\dsp\rescaler.c.obj CMakeFiles\webp.dir\src\dsp\upsampling.c.obj CMakeFiles\webp.dir\src\dsp\yuv.c.obj CMakeFiles\webp.dir\src\dsp\argb.c.obj CMakeFiles\webp.dir\src\dsp\cost.c.obj CMakeFiles\webp.dir\src\dsp\enc.c.obj CMakeFiles\webp.dir\src\dsp\lossless_enc.c.obj CMakeFiles\webp.dir\src\enc\alpha_enc.c.obj CMakeFiles\webp.dir\src\enc\analysis_enc.c.obj CMakeFiles\webp.dir\src\enc\backward_references_enc.c.obj CMakeFiles\webp.dir\src\enc\config_enc.c.obj CMakeFiles\webp.dir\src\enc\cost_enc.c.obj CMakeFiles\webp.dir\src\enc\delta_palettization_enc.c.obj CMakeFiles\webp.dir\src\enc\filter_enc.c.obj CMakeFiles\webp.dir\src\enc\frame_enc.c.obj CMakeFiles\webp.dir\src\enc\histogram_enc.c.obj CMakeFiles\webp.dir\src\enc\iterator_enc.c.obj CMakeFiles\webp.dir\src\enc\near_lossless_enc.c.obj CMakeFiles\webp.dir\src\enc\picture_enc.c.obj CMakeFiles\webp.dir\src\enc\picture_csp_enc.c.obj CMakeFiles\webp.dir\src\enc\picture_psnr_enc.c.obj CMakeFiles\webp.dir\src\enc\picture_rescale_enc.c.obj CMakeFiles\webp.dir\src\enc\picture_tools_enc.c.obj CMakeFiles\webp.dir\src\enc\predictor_enc.c.obj CMakeFiles\webp.dir\src\enc\quant_enc.c.obj CMakeFiles\webp.dir\src\enc\syntax_enc.c.obj CMakeFiles\webp.dir\src\enc\token_enc.c.obj CMakeFiles\webp.dir\src\enc\tree_enc.c.obj CMakeFiles\webp.dir\src\enc\vp8l_enc.c.obj CMakeFiles\webp.dir\src\enc\webp_enc.c.obj CMakeFiles\webp.dir\src\mux\anim_encode.c.obj CMakeFiles\webp.dir\src\mux\muxedit.c.obj CMakeFiles\webp.dir\src\mux\muxinternal.c.obj CMakeFiles\webp.dir\src\mux\muxread.c.obj CMakeFiles\webp.dir\src\utils\bit_reader_utils.c.obj CMakeFiles\webp.dir\src\utils\color_cache_utils.c.obj CMakeFiles\webp.dir\src\utils\filters_utils.c.obj CMakeFiles\webp.dir\src\utils\huffman_utils.c.obj CMakeFiles\webp.dir\src\utils\quant_levels_dec_utils.c.obj CMakeFiles\webp.dir\src\utils\rescaler_utils.c.obj CMakeFiles\webp.dir\src\utils\random_utils.c.obj CMakeFiles\webp.dir\src\utils\thread_utils.c.obj CMakeFiles\webp.dir\src\utils\utils.c.obj CMakeFiles\webp.dir\src\utils\bit_writer_utils.c.obj CMakeFiles\webp.dir\src\utils\huffman_encode_utils.c.obj CMakeFiles\webp.dir\src\utils\quant_levels_utils.c.obj /out:webp.dll /implib:webp.lib /pdb:webp.pdb /dll /version:0.0 /machine:ARM64 /DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF /DEF:CMakeFiles\webp.dir\exports.def shlwapi.lib ole32.lib windowscodecs.lib kernel32.lib user32.lib && cd ."
unrecognized file format in 'CMakeFiles\webp.dir\src\dec\alpha_dec.c.obj'
ninja: build stopped: subcommand failed.