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 | |
parent | 7a044adfb8f7d9a1e64b72fb9a4a873b0449e4f6 (diff) |
enable linux->mingw32 cross-compilation of tests
-rw-r--r-- | doc/testing.txt | 11 | ||||
-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 |
6 files changed, 145 insertions, 13 deletions
diff --git a/doc/testing.txt b/doc/testing.txt index a50c95f..c0edc6f 100644 --- a/doc/testing.txt +++ b/doc/testing.txt @@ -10,7 +10,7 @@ $ cd tests $ cmake . $ make -Windows: +Windows + MSVC: First, get a normal build working by following instructions at http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Building_on_Windows @@ -22,6 +22,15 @@ Then, from the QT command prompt: > cmake . > nmake -f Makefile +Cross compiling Linux->Windows: + +Follow the instructions for cross-compiling with qmake at +http://en.wikibooks.org/wiki/OpenSCAD_User_Manual + +$ cd tests +$ cmake . -DMINGW_CROSS_ENV_DIR=<mingw dir> -DCMAKE_TOOLCHAIN_FILE=CMingw-env-cross.cmake +$ make + B) Running tests $ ctest Runs tests enabled by default 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; |