diff options
| author | don bright <hugh.m.bright@gmail.com> | 2011-12-31 16:02:55 (GMT) | 
|---|---|---|
| committer | don bright <hugh.m.bright@gmail.com> | 2011-12-31 16:02:55 (GMT) | 
| commit | 3d686118bbced68f9a9af69339e2998b28139756 (patch) | |
| tree | a067a65ed67d0afd06f1ad02c86e8d11924f01d6 /tests | |
| parent | 7a044adfb8f7d9a1e64b72fb9a4a873b0449e4f6 (diff) | |
enable linux->mingw32 cross-compilation of tests
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/CMakeLists.txt | 29 | ||||
| -rw-r--r-- | tests/CMingw-env-cross.cmake | 107 | ||||
| -rw-r--r-- | tests/FindGLEW.cmake | 6 | ||||
| -rw-r--r-- | tests/OffscreenContextWGL.cc | 4 | ||||
| -rw-r--r-- | tests/dumptest.cc | 1 | 
5 files changed, 135 insertions, 12 deletions
| diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index cdcc0c0..4f11a7e 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -24,11 +24,11 @@ endif()  # Windows  # -if(WIN32) +if(WIN32 AND MSVC)    set(WIN32_STATIC_BUILD "True")  endif() -if(WIN32_STATIC_BUILD) +if(WIN32_STATIC_BUILD AND MSVC)    if(${CMAKE_BUILD_TYPE} STREQUAL "Debug")      set(EMSG "\nTo build Win32 STATIC OpenSCAD please see doc/testing.txt")      message(FATAL_ERROR ${EMSG}) @@ -36,7 +36,7 @@ if(WIN32_STATIC_BUILD)  endif()  # Disable warnings -if(WIN32) +if(WIN32 AND MSVC)    # too long decorated names    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4503")    # int cast to bool in CGAL @@ -52,7 +52,7 @@ if(WIN32)  endif()  # Debugging - if you uncomment, use nmake -f Makefile > log.txt (the log is big) -if(WIN32) +if(WIN32 AND MSVC)    # Linker debugging    #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -VERBOSE") @@ -60,6 +60,10 @@ if(WIN32)    # you have to pass -DCMAKE_VERBOSE_MAKEFILE=ON to cmake when you run it.   endif() +if(WIN32 AND CMAKE_COMPILER_IS_GNUCXX) +  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -frounding-math") +endif() +  #  # Build test apps  # @@ -256,11 +260,13 @@ inclusion(CGAL_DIR CGAL_INCLUDE_DIRS)  # Imagemagick -find_package(ImageMagick COMPONENTS convert) -if (ImageMagick_convert_FOUND) -  message(STATUS "ImageMagick convert executable found: " ${ImageMagick_convert_EXECUTABLE}) -else() -  message(FATAL_ERROR "Couldn't find imagemagick 'convert' program") +if (NOT SKIP_IMAGEMAGICK) +  find_package(ImageMagick COMPONENTS convert) +  if (ImageMagick_convert_FOUND) +    message(STATUS "ImageMagick convert executable found: " ${ImageMagick_convert_EXECUTABLE}) +  else() +    message(FATAL_ERROR "Couldn't find imagemagick 'convert' program") +  endif()  endif()  # Internal includes @@ -348,6 +354,7 @@ set(OFFSCREEN_SOURCES    system-gl.cc)  add_library(tests-core STATIC ${CORE_SOURCES}) +target_link_libraries(tests-core ${OPENGL_LIBRARY})  add_library(tests-common STATIC ${COMMON_SOURCES})  target_link_libraries(tests-common tests-core)  add_library(tests-cgal STATIC ${CGAL_SOURCES}) @@ -419,6 +426,10 @@ add_executable(throwntogethertest throwntogethertest.cc csgtestcore.cc ../src/Op  set_target_properties(throwntogethertest PROPERTIES COMPILE_FLAGS "-DENABLE_OPENCSG -DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}")  target_link_libraries(throwntogethertest tests-offscreen tests-cgal ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES} ${QT_LIBRARIES} ${OPENCSG_LIBRARY} ${GLEW_LIBRARY} ${COCOA_LIBRARY} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) +if (MINGW_CROSS_ENV_DIR) +  mingw_cross_env_add_missing_libs() +endif() +  #  # Tags tests as disabled. This is more convenient than removing them manually  # from the lists of filenames diff --git a/tests/CMingw-env-cross.cmake b/tests/CMingw-env-cross.cmake new file mode 100644 index 0000000..f13fa8c --- /dev/null +++ b/tests/CMingw-env-cross.cmake @@ -0,0 +1,107 @@ +# Toolchain file for cross compiling OpenSCAD linux->mingw-win32. +#  +# usage:  +#  1. get Brad Pitcher's toolchain for OpenSCAD qmake setup: +# http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Cross-compiling_for_Windows_on_Linux_or_Mac_OS_X +#  2. export MINGW_CROSS_ENV_DIR=where-you-installed-mingw +#  2. cmake . -DCMAKE_TOOLCHAIN_FILE=CMingw-env-cross.cmake +#  3. make should proceed as normal.  +# +# see also +# http://www.vtk.org/Wiki/CMake_Cross_Compiling +# https://bitbucket.org/muellni/mingw-cross-env-cmake/src/2067fcf2d52e/src/cmake-1-toolchain-file.patch +# http://code.google.com/p/qtlobby/source/browse/trunk/toolchain-mingw.cmake +# http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Link-Options.html +# output of qmake  +# +# this file released into public domain by Don Bright 2011 + + +# +# cross-compiler +# +  +set(CMAKE_SYSTEM_NAME Windows) + +set(MINGW_CROSS_ENV_DIR $ENV{MINGW_CROSS_ENV_DIR}) + +set(CMAKE_C_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-gcc) +set(CMAKE_CXX_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-g++) +set(CMAKE_RC_COMPILER i686-pc-mingw32-windres) +set(CMAKE_FIND_ROOT_PATH ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + +# +# libraries +# + +set( Boost_USE_STATIC_LIBS ON ) +set( Boost_USE_MULTITHREADED ON ) +set( Boost_COMPILER "_win32" ) +# set( Boost_DEBUG TRUE ) # for debugging cmake's FindBoost, not boost itself + +set( OPENSCAD_LIBRARIES ${CMAKE_FIND_ROOT_PATH} ) +set( EIGEN2_DIR ${CMAKE_FIND_ROOT_PATH} ) +set( CGAL_DIR ${CMAKE_FIND_ROOT_PATH}/lib/CGAL ) +set( GLEW_DIR ${CMAKE_FIND_ROOT_PATH} ) +set( SKIP_IMAGEMAGICK TRUE ) + +# +# QT +# + +set(QT_QMAKE_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-qmake) +set(QT_MOC_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-moc) +set(QT_UIC_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-uic) + +# +# Cmake fails at mingw-cross. Here we copy the flags and libraries from +# from looking at "qmake && make VERBOSE=1" as well as examining +# the .prl files in mingw-cross-env/usr/i686-pc-mingw32/lib & google +# + +if (NOT MINGW_CROSS_FLAGS_SET) +  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -UQT_DLL -frtti -fexceptions -mthreads -Wall -DQT_LARGEFILE_SUPPORT") +  set(MINGW_CROSS_FLAGS_SET 1) +endif() + +function(mingw_cross_env_info) +  message(STATUS "QT USE FILE: ${QT_USE_FILE}") +  message(STATUS "QT INCLUDES: ${QT_INCLUDES}") +  message(STATUS "QT LIBRARY_DIR: ${QT_LIBRARY_DIR}") +  message(STATUS "QT LIBRARIES: ${QT_LIBRARIES}") +endfunction() + +function(mingw_cross_env_add_missing_libs) +  # mingw_cross_env_info() +  set(mingw_cross_libs msvcr80 imm32 winmm ws2_32 glu32 opengl32 mng lcms tiff jpeg png z) +  target_link_libraries(opencsgtest ${mingw_cross_libs}) +  target_link_libraries(csgtermtest ${mingw_cross_libs}) +  target_link_libraries(csgtexttest ${mingw_cross_libs}) +  target_link_libraries(dumptest ${mingw_cross_libs}) +  target_link_libraries(echotest ${mingw_cross_libs}) +  target_link_libraries(cgalpngtest ${mingw_cross_libs}) +  target_link_libraries(throwntogethertest ${mingw_cross_libs}) +  target_link_libraries(cgaltest ${mingw_cross_libs}) +  target_link_libraries(cgalstlsanitytest ${mingw_cross_libs}) +endfunction() + +# +# -D definitions +# + +if( NOT CROSS_DEFS_SET ) +  add_definitions( -DQT_THREAD_SUPPORT ) +  add_definitions( -DGLEW_STATIC ) +  add_definitions( -DBOOST_STATIC ) +  add_definitions( -DBOOST_THREAD_USE_LIB ) +  add_definitions( -DUNICODE ) + +  # for TWO_DIGIT_EXPONENT. see stdio.h from mingw-env/usr/i686-pc-mingw32/include +  add_definitions( -D__MSVCRT_VERSION__=0x800 )  + +  set(CROSS_DEFS_SET 1) +endif() + diff --git a/tests/FindGLEW.cmake b/tests/FindGLEW.cmake index fa3071f..42b06ff 100644 --- a/tests/FindGLEW.cmake +++ b/tests/FindGLEW.cmake @@ -11,13 +11,17 @@  # http://openlibraries.org/browser/trunk/FindGLEW.cmake?rev=1383  -IF (WIN32) +IF (WIN32 AND MSVC)  	IF (WIN32_STATIC_BUILD) # passed from caller  		SET(GLEW_LIB_SEARCH_NAME glew32s.lib) # static, non-debug (Release)  	ELSE ()  		SET(GLEW_LIB_SEARCH_NAME glew32.lib) # other. untested with OpenSCAD  	ENDIF() +ELSEIF () # GCC +	SET(GLEW_LIB_SEARCH_NAME "libglew32s.a") +ENDIF () +IF (WIN32)  	FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h  		$ENV{PROGRAMFILES}/GLEW/include  		${PROJECT_SOURCE_DIR}/src/nvgl/glew/include diff --git a/tests/OffscreenContextWGL.cc b/tests/OffscreenContextWGL.cc index f36671c..75a7ed2 100644 --- a/tests/OffscreenContextWGL.cc +++ b/tests/OffscreenContextWGL.cc @@ -105,10 +105,10 @@ bool create_wgl_dummy_context(OffscreenContext &ctx)    wc.style = CS_OWNDC;    wc.lpfnWndProc = WndProc;    wc.hInstance = inst; -  wc.lpszClassName = "OpenSCAD"; +  wc.lpszClassName = (LPCWSTR)"OpenSCAD";    RegisterClass( &wc ); -  HWND window = CreateWindow( "OpenSCAD", "OpenSCAD",  +  HWND window = CreateWindow( (LPCWSTR)"OpenSCAD", (LPCWSTR)"OpenSCAD",      WS_CAPTION | WS_POPUPWINDOW,  //| WS_VISIBLE,      0, 0, ctx.width, ctx.height, NULL, NULL, inst, NULL ); diff --git a/tests/dumptest.cc b/tests/dumptest.cc index 22dd96c..f7179d7 100644 --- a/tests/dumptest.cc +++ b/tests/dumptest.cc @@ -45,6 +45,7 @@  #include <iostream>  #include <sstream>  #include <fstream> +#include <stdio.h>  using std::string; | 
