summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/testing.txt11
-rw-r--r--tests/CMakeLists.txt29
-rw-r--r--tests/CMingw-env-cross.cmake107
-rw-r--r--tests/FindGLEW.cmake6
-rw-r--r--tests/OffscreenContextWGL.cc4
-rw-r--r--tests/dumptest.cc1
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;
contact: Jan Huwald // Impressum