Как кросс-компилировать Clang в Ubuntu для Win32? - PullRequest
0 голосов
/ 27 октября 2019
  1. Я скачал и извлек:
    http://releases.llvm.org/5.0.1/llvm-5.0.1.src.tar.xz
    http://releases.llvm.org/5.0.1/cfe-5.0.1.src.tar.xz

  2. Тогда:

$ mv cfe-5.0.1.src llvm-5.0.1.src/tool/clang
Создан следующий llvm-5.0.1.src/mingw_cross_toolchain.cmake файл:
set(CMAKE_SYSTEM_NAME Windows)
set(TOOLCHAIN_PREFIX x86_64-w64-mingw32)

# cross compilers to use for C and C++
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc-posix)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++-posix)
set(CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran)
set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres)

# target environment on the build host system
#   set 1st to dir with the cross compiler's C/C++ headers/libs
set(CMAKE_FIND_ROOT_PATH /usr/lib/gcc/${TOOLCHAIN_PREFIX}/7.3-posix)

# modify default behavior of FIND_XXX() commands to
# search for headers/libs in the target environment and
# search for programs in the build host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
Тогда:
$ cd llvm-5.0.1.src
$ mkdir build
# cd build
$ cmake -D CMAKE_TOOLCHAIN_FILE=../mingw_cross_toolchain.cmake
Затем в следующем build/NATIVE/include/llvm/Config/llvm-config.h у меня есть:
/* Define if this is Unixish platform */
#define LLVM_ON_UNIX 1

/* Define if this is Win32ish platform */
/* #undef LLVM_ON_WIN32 */

, что приведет к сбою сборки. Поскольку LLVM_ON_WIN32 зависит от флага WIN32, я попытался определить этот флаг в командной строке и в mingw_cross_toolchain.cmake, но, увы, без влияния на сгенерированный build/NATIVE/include/llvm/Config/llvm-config.h.

Как мы можем правильно определить этот флаг WIN32

1 Ответ

1 голос
/ 27 октября 2019
  1. Хорошо, поэтому мне нужно принудительно установить флаги в cmake/modules/HandleLLVMOptions.cmake на:
set(WIN32 1)
set(UNIX 0)
Тогда мне нужно будет выполнить будущие промежуточные исполняемые файлы Win32:
$ sudo apt-get install wine-binfmt
$ sudo update-binfmts --import /usr/share/binfmts/wine
После этого мне нужно установить WINEPATH для поиска DLL:
$ export WINEPATH="/usr/x86_64-w64-mingw32/lib/;/usr/lib/gcc/x86_64-w64-mingw32/7.3-posix"

Теперь я смогу все правильно кросс-компилировать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...