[ 
https://issues.apache.org/jira/browse/THRIFT-2571?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14501483#comment-14501483
 ] 

James E. King, III commented on THRIFT-2571:
--------------------------------------------

I'm on the development tip.  I'm using this to start up the environment (using 
MSVC10 and Boost 1.58 built for 64-bit only, all variants):
{quote}
"C:\Program Files (x86)\CMake\bin\cmake.exe" ..\thrift -G"NMake Makefiles" 
-DWITH_BOOSTTHREADS=ON -DBOOST_ROOT=C:\Boost 
-DZLIB_ROOT=C:\win3p\tools\x64\zlib-1.2.5 
-DOPENSSL_ROOT_DIR=C:\win3p\tools\x64\openssl-1.0.1b 
-DFLEX_EXECUTABLE=C:\Users\Jim\workspace\winflexbison\win_flex.exe 
-DBISON_EXECUTABLE=C:\Users\Jim\workspace\winflexbison\win_bison.exe 
-DLIBEVENT_ROOT=C:\Users\Jim\workspace\libevent
{quote}

I found I had to add the following to build/cmake/DefinePlatformSpecific.cmake 
in the MSVC section:
{noformat}
    # Disable boost auto linking pragmas - cmake includes the right files
    add_definitions("-DBOOST_ALL_NO_LIB")
{noformat}

Without doing that, the build for thriftd.dll would fail:
{noformat}
Linking CXX shared library ..\..\bin\thriftd.dll
LINK : fatal error LNK1104: cannot open file 
'libboost_thread-vc100-mt-gd-1_58.lib'
{noformat}

With that fix, I ran into an issue where libevent defines a header called 
"event.h", and so does the Windows Platform SDK.  The windows one gets used 
instead of the libevent one, so it fails when compiling the non-blocking 
server.  I had to make a copy of libevent\include\event2\event.h and put it 
into libevent\include, since it looks like the libevent\include folder is the 
one that one wants on the include path.  I also had to change 
FindLibevent.cmake as follows:
{noformat}
set(LibEvent_EXTRA_PREFIXES /usr/local /opt/local "$ENV{HOME}" 
"${LIBEVENT_ROOT}")
foreach(prefix ${LibEvent_EXTRA_PREFIXES})
  list(APPEND LibEvent_INCLUDE_PATHS "${prefix}/include")
  list(APPEND LibEvent_LIBRARIES_PATHS "${prefix}")
  list(APPEND LibEvent_LIBRARIES_PATHS "${prefix}/lib")
endforeach()
{noformat}
I added LIBEVENT_ROOT and I added the non-"/lib" LibEvent_LIBRARIES search path.

Unfortunately I still cannot build the nonblocking server because "event.h" is 
loading the Platform SDK one.  But I am more than half way built!

> Simplify cross compilation using CMake
> --------------------------------------
>
>                 Key: THRIFT-2571
>                 URL: https://issues.apache.org/jira/browse/THRIFT-2571
>             Project: Thrift
>          Issue Type: Improvement
>          Components: Compiler (General)
>    Affects Versions: 1.0
>            Reporter: Pascal Bach
>            Assignee: Henrique Mendonça
>            Priority: Minor
>             Fix For: 0.9.2
>
>
> Using CMake would simplify cross compilation.
> The for example the same build script can be used to build:
> - Native for Linux using GCC
> - Native for Windows using Visual Studio
> - Cross compile for ARM on Linux
> - Cross compile for Windows form Linux using mingw32
> It also makes it easy to generate project files for Eclipse or Visual Studio.
> h2. Some examples:
> {code:title=Create an eclipse project|borderStyle=solid}
> mkdir build_ec && cd build_ec
> cmake -G "Eclipse CDT4 - Unix Makefiles" ../compiler/cpp
> make
> {code} 
> Now open the folder build_ec using eclipse.
> {code:title=Create a Visual Studio project (Windows only)|borderStyle=solid}
> mkdir build_vs && cd build_vs
> cmake -G "Visual Studio 12" ../compiler/cpp
> {code} 
> Now open the folder build_vs using Visual Studio.
> {code:title=Cross compile using mingw32|borderStyle=solid}
> mkdir build_mingw32 && cd build_mingw32
> cmake -DCMAKE_TOOLCHAIN_FILE=../contrib/mingw32-toolchain.cmake 
> ../compiler/cpp
> make
> {code} 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to