[sbasi] 2016-05-29: I successfully cross-compiled a Tcl extension from Linux for Windows. I did it with cmake[1] and MinGW-w64[2]. The only problem was that cmake did not find the Tcl header files and libraries. Apart from that, it was actually surprisingly simple.A little more detail:
- The extension was already set up to be configured and compiled with cmake (see also Cmake)
- Needed tools: MinGW-w64, cmake
- Also needed: Tcl header files and libraries for Windows. I got them from tombert's tcltk, and saved them in /home/foo/crosscompile/
- The next step was to create a toolchain file for cross-compilation:
# # Toolchain file to cross-compile for windows # # the name of the target operating system SET(CMAKE_SYSTEM_NAME Windows) # which compilers to use for C and C++ SET(CMAKE_C_COMPILER i686-w64-mingw32-cc) SET(CMAKE_CXX_COMPILER i686-w64-mingw32-c++) # here is the target environment located SET(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32) # adjust the default behaviour of the FIND_XXX() commands: # search headers and libraries in the target environment, search # programs in the 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) # settings for Tcl/tk # we need to set these variables manually, because cmake does not find them set (TCL_INCLUDE_PATH /home/foo/crosscompile/include/) set (TCL_STUB_LIBRARY /home/foo/crosscompile/lib/libtclstub86.a) set (TK_INCLUDE_PATH /home/foo/crosscompile/include/) set (TK_STUB_LIBRARY /home/foo/crosscompile/lib/libtkstub86.a)
- Assuming the toolchain file is saved in /home/foo/crosscompile/toolchain.cmake, the extension can be compiled with:
$ cmake -DCMAKE_TOOLCHAIN_FILE=/home/foo/crosscompile/toolchain.cmake ${path_to_source_dir} $ makeTo be noted that the only dependencies of the extension in question were the standard C library and Tcl/Tk. With more deps, things might get a little harder.