Hi, after a lot of effort I will quit trying to build Open Shading Language for MinGW-w64, at least until a new LLVM version comes out that better supports MinGW-w64. I got to the point where I could configure OSL and build a few files. The critical issue currently is that llvm-3.1 crashes when attempting to work on OSL and llvm-3.0 can't parse some standard c headers of MinGW-w64 properly. So I am stuck. I tried building LLVM with different toolsets (configure/make explicitly supports setting a 64bit target, which might have been the cause of the crashes. However, this build fails (sometimes with a crash)).
However, I will post here the patches I've used so far in case anyone else wants to resume where I've failed. llvm-3.1 can be compiled straight from source with cmake on MSYS. You will need python 2.7 and flex. m4 and bison for MSYS. Use cmake with MSYS Makefiles generator instead of command prompt with MinGW makefiles generator because this produces llvm-config, which is needed for OSL (can be bypassed by fiddling with OSL cmakefiles but for my own attempt I didn't do this). For llvm-3.0 you will also need ruby. For llvm-3.0 you need to substitute the ${LLVM_CONFIG} lines on OSL CMakeFiles with "ruby ${LLVM_CONFIG}". As explained though, llvm 3.0 can't parse MinGW headers right (some atomic operation definitions are missing) For OSL I've used this configuration: ------------------------------------------------- make BUILDARCH=x86_64-w64-mingw32 OPENIMAGEIOHOME=/c/src/oiio-install ILMBASE_HOME=/c/src/lib/mingw64/openexr BOOST_HOME=/c/src/libopt/boost OPENEXR_HOME=/c/src/lib/mingw64/openexr LLVM_DIRECTORY=/ USE_BOOST_WAVE=ON USE_TBB=OFF VERBOSE=ON BUILDSTATIC=ON LINKSTATIC=ON BUILD_TESTING=OFF And these modifications on the source: --------------------------------------------------- Makefile | 2 +- src/CMakeLists.txt | 1 + src/cmake/externalpackages.cmake | 14 +++++++++----- src/liboslcomp/CMakeLists.txt | 4 ++-- src/liboslexec/CMakeLists.txt | 13 ++++++++++--- src/liboslexec/llvm_ops.cpp | 2 +- src/liboslquery/CMakeLists.txt | 2 +- src/testshade/CMakeLists.txt | 2 +- 8 files changed, 26 insertions(+), 14 deletions(-) diff --git a/Makefile b/Makefile index 2510e91..af215a7 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ ifdef PROFILE endif MY_MAKE_FLAGS ?= -MY_CMAKE_FLAGS ?= -g3 +MY_CMAKE_FLAGS ?= -g3 -G "MSYS Makefiles" # Site-specific build instructions ifndef OSL_SITE diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 37e16d9..e4db823 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,6 +9,7 @@ set (OSL_LIBRARY_VERSION_PATCH 0) set (OSO_FILE_VERSION_MAJOR 1) set (OSO_FILE_VERSION_MINOR 0) +set(LLVM_STATIC TRUE) cmake_minimum_required (VERSION 2.6) if (NOT CMAKE_VERSION VERSION_LESS 2.8.4) diff --git a/src/cmake/externalpackages.cmake b/src/cmake/externalpackages.cmake index 083f7e4..805223a 100644 --- a/src/cmake/externalpackages.cmake +++ b/src/cmake/externalpackages.cmake @@ -249,16 +249,16 @@ if (LLVM_DIRECTORY) else () set (LLVM_CONFIG llvm-config) endif () -execute_process (COMMAND ${LLVM_CONFIG} --version +execute_process (COMMAND perl ${LLVM_CONFIG} --version OUTPUT_VARIABLE LLVM_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) -execute_process (COMMAND ${LLVM_CONFIG} --prefix +execute_process (COMMAND perl ${LLVM_CONFIG} --prefix OUTPUT_VARIABLE LLVM_DIRECTORY OUTPUT_STRIP_TRAILING_WHITESPACE) -execute_process (COMMAND ${LLVM_CONFIG} --libdir +execute_process (COMMAND perl ${LLVM_CONFIG} --libdir OUTPUT_VARIABLE LLVM_LIB_DIR OUTPUT_STRIP_TRAILING_WHITESPACE) -execute_process (COMMAND ${LLVM_CONFIG} --includedir +execute_process (COMMAND perl ${LLVM_CONFIG} --includedir OUTPUT_VARIABLE LLVM_INCLUDES OUTPUT_STRIP_TRAILING_WHITESPACE) find_library ( LLVM_LIBRARY @@ -270,6 +270,10 @@ message (STATUS "LLVM includes = ${LLVM_INCLUDES}") message (STATUS "LLVM library = ${LLVM_LIBRARY}") message (STATUS "LLVM lib dir = ${LLVM_LIB_DIR}") +if (LLVM_STATIC) + set (LLVM_LIBRARY TRUE) +endif() + if (LLVM_LIBRARY AND LLVM_INCLUDES AND LLVM_DIRECTORY AND LLVM_LIB_DIR) # ensure include directory is added (in case of non-standard locations include_directories (BEFORE "${LLVM_INCLUDES}") @@ -281,7 +285,7 @@ if (LLVM_LIBRARY AND LLVM_INCLUDES AND LLVM_DIRECTORY AND LLVM_LIB_DIR) # the list of what libraries we need, and substitute that in the right # way for LLVM_LIBRARY. set (LLVM_LIBRARY "") - execute_process (COMMAND ${LLVM_CONFIG} --libs + execute_process (COMMAND perl ${LLVM_CONFIG} --libs OUTPUT_VARIABLE llvm_library_list OUTPUT_STRIP_TRAILING_WHITESPACE) string (REPLACE "-l" "" llvm_library_list ${llvm_library_list}) diff --git a/src/liboslcomp/CMakeLists.txt b/src/liboslcomp/CMakeLists.txt index 31cb829..c9f6751 100644 --- a/src/liboslcomp/CMakeLists.txt +++ b/src/liboslcomp/CMakeLists.txt @@ -6,12 +6,12 @@ FILE ( GLOB compiler_headers "*.h" ) FLEX_BISON ( osllex.l oslgram.y osl liboslcomp_srcs compiler_headers ) ADD_LIBRARY ( oslcomp SHARED ${liboslcomp_srcs} ) -TARGET_LINK_LIBRARIES ( oslcomp ${OPENIMAGEIO_LIBRARY} ${Boost_LIBRARIES} ) +TARGET_LINK_LIBRARIES ( oslcomp ${OPENIMAGEIO_LIBRARY} ${Boost_LIBRARIES} psapi) LINK_ILMBASE ( oslcomp ) IF ( USE_BOOST_WAVE ) ADD_DEFINITIONS ( -DUSE_BOOST_WAVE ) ENDIF () -INSTALL ( TARGETS oslcomp LIBRARY DESTINATION lib ) +INSTALL ( TARGETS oslcomp ARCHIVE DESTINATION lib ) diff --git a/src/liboslexec/CMakeLists.txt b/src/liboslexec/CMakeLists.txt index 1f7ea18..008a2a6 100644 --- a/src/liboslexec/CMakeLists.txt +++ b/src/liboslexec/CMakeLists.txt @@ -41,7 +41,7 @@ MACRO ( LLVM_COMPILE llvm_src srclist ) MESSAGE (STATUS "LLVM_COMPILE bc=${llvm_bc}") MESSAGE (STATUS "LLVM_COMPILE cpp=${llvm_bc_cpp}") SET ( ${srclist} ${${srclist}} ${llvm_bc_cpp} ) - EXEC_PROGRAM ( ${LLVM_DIRECTORY}/bin/llvm-config ARGS --cxxflags OUTPUT_VARIABLE LLVM_COMPILE_FLAGS ) + EXEC_PROGRAM ( "perl ${LLVM_DIRECTORY}/bin/llvm-config ARGS --cxxflags" OUTPUT_VARIABLE LLVM_COMPILE_FLAGS ) set (LLVM_COMPILE_FLAGS "${LLVM_COMPILE_FLAGS} -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -O3 --combine") if (OSL_NAMESPACE) LIST (APPEND LLVM_COMPILE_FLAGS "-DOSL_NAMESPACE=${OSL_NAMESPACE}") @@ -77,7 +77,14 @@ MACRO ( LLVM_COMPILE llvm_src srclist ) -I${CMAKE_SOURCE_DIR}/include -I${CMAKE_BINARY_DIR}/include -I${OPENIMAGEIO_INCLUDES} -I${ILMBASE_INCLUDE_AREA} - -I${Boost_INCLUDE_DIRS} -I${TBB_INCLUDES} -O3 -S -emit-llvm -o ${llvm_asm} ${llvm_src} + -I${Boost_INCLUDE_DIRS} + -Ic:/MinGW/x86_64-w64-mingw32/include + -Ic:/MinGW/include/c++/4.7.2/x86_64-w64-mingw32 + -Ic:/MinGW/include/c++/4.7.2/backward + -Ic:/MinGW/include/c++/4.7.2 + -I${TBB_INCLUDES} + + -O3 -S -emit-llvm -o ${llvm_asm} ${llvm_src} COMMAND ${LLVM_DIRECTORY}/bin/llvm-as -f -o ${llvm_bc} ${llvm_asm} COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/serialize-bc.bash ${llvm_bc} ${llvm_bc_cpp} @@ -105,7 +112,7 @@ TARGET_LINK_LIBRARIES ( oslexec ADD_DEPENDENCIES (oslexec ${CMAKE_CURRENT_SOURCE_DIR}/liboslcexec.map) LINK_ILMBASE ( oslexec ) -INSTALL ( TARGETS oslexec LIBRARY DESTINATION lib ) +INSTALL ( TARGETS oslexec ARCHIVE DESTINATION lib ) diff --git a/src/liboslexec/llvm_ops.cpp b/src/liboslexec/llvm_ops.cpp index c844b0c..ec6dc38 100644 --- a/src/liboslexec/llvm_ops.cpp +++ b/src/liboslexec/llvm_ops.cpp @@ -109,7 +109,7 @@ using OIIO::safe_asinf; using OIIO::safe_acosf; using OIIO::isinf; -#ifdef _WIN32 +#if defined(_WIN32) && !defined(__MINGW32__) using OIIO::roundf; using OIIO::truncf; using OIIO::expm1f; diff --git a/src/liboslquery/CMakeLists.txt b/src/liboslquery/CMakeLists.txt index d326a74..f140339 100644 --- a/src/liboslquery/CMakeLists.txt +++ b/src/liboslquery/CMakeLists.txt @@ -9,5 +9,5 @@ ADD_LIBRARY ( oslquery SHARED ${liboslquery_srcs} ) TARGET_LINK_LIBRARIES ( oslquery ${OPENIMAGEIO_LIBRARY} ${Boost_LIBRARIES} ) LINK_ILMBASE ( oslquery ) -INSTALL ( TARGETS oslquery LIBRARY DESTINATION lib ) +INSTALL ( TARGETS oslquery ARCHIVE DESTINATION lib ) diff --git a/src/testshade/CMakeLists.txt b/src/testshade/CMakeLists.txt index ea56597..3a018d4 100644 --- a/src/testshade/CMakeLists.txt +++ b/src/testshade/CMakeLists.txt @@ -11,7 +11,7 @@ target_link_libraries (libtestshade oslexec oslcomp oslquery ${OPENIMAGEIO_LIBRA set_target_properties (libtestshade PROPERTIES PREFIX "") install (TARGETS libtestshade # RUNTIME DESTINATION "${BINDIR}" COMPONENT user - LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib #COMPONENT user # ARCHIVE DESTINATION "${LIBDIR}" COMPONENT developer ) _______________________________________________ Bf-committers mailing list Bf-committers@blender.org http://lists.blender.org/mailman/listinfo/bf-committers