Я скачал и извлек:
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
Тогда:
$ 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