Welcome to mirror list, hosted at ThFree Co, Russian Federation.

platform_win32_mingw.cmake « platform « cmake « build_files - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 216568bd0690e9ac4a446b9ec641069d5c4c6823 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
# ***** BEGIN GPL LICENSE BLOCK *****
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2016, Blender Foundation
# All rights reserved.
#
# Contributor(s): Sergey Sharybin.
#
# ***** END GPL LICENSE BLOCK *****

# Libraries configuration for Windows when compiling with MinGW.

# keep GCC specific stuff here
include(CheckCSourceCompiles)
# Setup 64bit and 64bit windows systems
CHECK_C_SOURCE_COMPILES("
	#ifndef __MINGW64__
	#error
	#endif
	int main(void) { return 0; }
	"
	WITH_MINGW64
)

if(NOT DEFINED LIBDIR)
	if(WITH_MINGW64)
		message(STATUS "Compiling for 64 bit with MinGW-w64.")
		set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw64)
	else()
		message(STATUS "Compiling for 32 bit with MinGW-w32.")
		set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw32)

		if(WITH_RAYOPTIMIZATION)
			message(WARNING "MinGW-w32 is known to be unstable with 'WITH_RAYOPTIMIZATION' option enabled.")
		endif()
	endif()
else()
	message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
endif()
if(NOT EXISTS "${LIBDIR}/")
	message(FATAL_ERROR "Windows requires pre-compiled libs at: '${LIBDIR}'")
endif()

list(APPEND PLATFORM_LINKLIBS
	-lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32
	-lz -lstdc++ -lole32 -luuid -lwsock32 -lpsapi -ldbghelp
)

if(WITH_INPUT_IME)
	list(APPEND PLATFORM_LINKLIBS -limm32)
endif()

set(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing")

if(WITH_MINGW64)
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
	list(APPEND PLATFORM_LINKLIBS -lpthread)

	add_definitions(-DFREE_WINDOWS64 -DMS_WIN64)
endif()

add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)

add_definitions(-DFREE_WINDOWS)

set(PNG "${LIBDIR}/png")
set(PNG_INCLUDE_DIRS "${PNG}/include")
set(PNG_LIBPATH ${PNG}/lib) # not cmake defined

if(WITH_MINGW64)
	set(JPEG_LIBRARIES jpeg)
else()
	set(JPEG_LIBRARIES libjpeg)
endif()
set(PNG_LIBRARIES png)

set(ZLIB ${LIBDIR}/zlib)
set(ZLIB_INCLUDE_DIRS ${ZLIB}/include)
set(ZLIB_LIBPATH ${ZLIB}/lib)
set(ZLIB_LIBRARIES z)

set(JPEG "${LIBDIR}/jpeg")
set(JPEG_INCLUDE_DIR "${JPEG}/include")
set(JPEG_LIBPATH ${JPEG}/lib) # not cmake defined

# comes with own pthread library
if(NOT WITH_MINGW64)
	set(PTHREADS ${LIBDIR}/pthreads)
	#set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include)
	set(PTHREADS_LIBPATH ${PTHREADS}/lib)
	set(PTHREADS_LIBRARIES pthreadGC2)
endif()

set(FREETYPE ${LIBDIR}/freetype)
set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2)
set(FREETYPE_LIBPATH ${FREETYPE}/lib)
set(FREETYPE_LIBRARY freetype)

if(WITH_FFTW3)
	set(FFTW3 ${LIBDIR}/fftw3)
	set(FFTW3_LIBRARIES fftw3)
	set(FFTW3_INCLUDE_DIRS ${FFTW3}/include)
	set(FFTW3_LIBPATH ${FFTW3}/lib)
endif()

if(WITH_OPENCOLLADA)
	set(OPENCOLLADA ${LIBDIR}/opencollada)
	set(OPENCOLLADA_INCLUDE_DIRS
		${OPENCOLLADA}/include/opencollada/COLLADAStreamWriter
		${OPENCOLLADA}/include/opencollada/COLLADABaseUtils
		${OPENCOLLADA}/include/opencollada/COLLADAFramework
		${OPENCOLLADA}/include/opencollada/COLLADASaxFrameworkLoader
		${OPENCOLLADA}/include/opencollada/GeneratedSaxParser
	)
	set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib/opencollada)
	set(OPENCOLLADA_LIBRARIES
		OpenCOLLADAStreamWriter
		OpenCOLLADASaxFrameworkLoader
		OpenCOLLADAFramework
		OpenCOLLADABaseUtils
		GeneratedSaxParser
		UTF MathMLSolver buffer ftoa xml
	)
	set(PCRE_LIBRARIES pcre)
endif()

if(WITH_CODEC_FFMPEG)
	set(FFMPEG ${LIBDIR}/ffmpeg)
	set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
	if(WITH_MINGW64)
		set(FFMPEG_LIBRARIES avcodec.dll avformat.dll avdevice.dll avutil.dll swscale.dll swresample.dll)
	else()
		set(FFMPEG_LIBRARIES avcodec-55 avformat-55 avdevice-55 avutil-52 swscale-2)
	endif()
	set(FFMPEG_LIBPATH ${FFMPEG}/lib)
endif()

if(WITH_IMAGE_OPENEXR)
	set(OPENEXR ${LIBDIR}/openexr)
	set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include)
	set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR)
	set(OPENEXR_LIBRARIES Half IlmImf Imath IlmThread Iex)
	set(OPENEXR_LIBPATH ${OPENEXR}/lib)
endif()

if(WITH_IMAGE_TIFF)
	set(TIFF ${LIBDIR}/tiff)
	set(TIFF_LIBRARY tiff)
	set(TIFF_INCLUDE_DIR ${TIFF}/include)
	set(TIFF_LIBPATH ${TIFF}/lib)
endif()

if(WITH_JACK)
	set(JACK ${LIBDIR}/jack)
	set(JACK_INCLUDE_DIRS ${JACK}/include/jack ${JACK}/include)
	set(JACK_LIBRARIES jack)
	set(JACK_LIBPATH ${JACK}/lib)

	# TODO, gives linking errors, force off
	set(WITH_JACK OFF)
endif()

if(WITH_PYTHON)
	# normally cached but not since we include them with blender
	set(PYTHON_VERSION 3.5) #  CACHE STRING)
	string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
	set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}")  # CACHE PATH)
	set(PYTHON_LIBRARY "${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}mw.lib")  # CACHE FILEPATH)
	unset(_PYTHON_VERSION_NO_DOTS)

	# uncached vars
	set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
	set(PYTHON_LIBRARIES  "${PYTHON_LIBRARY}")
endif()

if(WITH_BOOST)
	set(BOOST ${LIBDIR}/boost)
	set(BOOST_INCLUDE_DIR ${BOOST}/include)
	if(WITH_MINGW64)
		set(BOOST_POSTFIX "mgw47-mt-s-1_49")
		set(BOOST_DEBUG_POSTFIX "mgw47-mt-sd-1_49")
	else()
		set(BOOST_POSTFIX "mgw46-mt-s-1_49")
		set(BOOST_DEBUG_POSTFIX "mgw46-mt-sd-1_49")
	endif()
	set(BOOST_LIBRARIES
		optimized boost_date_time-${BOOST_POSTFIX} boost_filesystem-${BOOST_POSTFIX}
		boost_regex-${BOOST_POSTFIX}
		boost_system-${BOOST_POSTFIX} boost_thread-${BOOST_POSTFIX}
		debug boost_date_time-${BOOST_DEBUG_POSTFIX} boost_filesystem-${BOOST_DEBUG_POSTFIX}
		boost_regex-${BOOST_DEBUG_POSTFIX}
		boost_system-${BOOST_DEBUG_POSTFIX} boost_thread-${BOOST_DEBUG_POSTFIX})
	if(WITH_INTERNATIONAL)
		set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
			optimized boost_locale-${BOOST_POSTFIX}
			debug boost_locale-${BOOST_DEBUG_POSTFIX}
		)
	endif()
	if(WITH_CYCLES_OSL)
		set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
			optimized boost_wave-${BOOST_POSTFIX}
			debug boost_wave-${BOOST_DEBUG_POSTFIX}
		)
	endif()
	set(BOOST_LIBPATH ${BOOST}/lib)
	set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB -DBOOST_THREAD_USE_LIB ")
endif()

if(WITH_OPENIMAGEIO)
	set(OPENIMAGEIO ${LIBDIR}/openimageio)
	set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include)
	set(OPENIMAGEIO_LIBRARIES OpenImageIO)
	set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib)
	set(OPENIMAGEIO_DEFINITIONS "")
	set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
endif()

if(WITH_LLVM)
	set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH	"Path to the LLVM installation")
	set(LLVM_LIBPATH ${LLVM_ROOT_DIR}/lib)
	# Explicitly set llvm lib order.
	#---- WARNING ON GCC ORDER OF LIBS IS IMPORTANT, DO NOT CHANGE! ---------
	set(LLVM_LIBRARY LLVMSelectionDAG LLVMCodeGen LLVMScalarOpts LLVMAnalysis LLVMArchive
		LLVMAsmParser LLVMAsmPrinter
		LLVMBitReader LLVMBitWriter
		LLVMDebugInfo LLVMExecutionEngine
		LLVMInstCombine LLVMInstrumentation
		LLVMInterpreter LLVMJIT
		LLVMLinker LLVMMC
		LLVMMCDisassembler LLVMMCJIT
		LLVMMCParser LLVMObject
		LLVMRuntimeDyld
		LLVMSupport
		LLVMTableGen LLVMTarget
		LLVMTransformUtils LLVMVectorize
		LLVMX86AsmParser LLVMX86AsmPrinter
		LLVMX86CodeGen LLVMX86Desc
		LLVMX86Disassembler LLVMX86Info
		LLVMX86Utils LLVMipa
		LLVMipo LLVMCore)
	# imagehelp is needed by LLVM 3.1 on MinGW, check lib\Support\Windows\Signals.inc
	list(APPEND PLATFORM_LINKLIBS -limagehlp)
endif()

if(WITH_OPENCOLORIO)
	set(OPENCOLORIO ${LIBDIR}/opencolorio)
	set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include)
	set(OPENCOLORIO_LIBRARIES OpenColorIO)
	set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib)
	set(OPENCOLORIO_DEFINITIONS)
endif()

if(WITH_SDL)
	set(SDL ${LIBDIR}/sdl)
	set(SDL_INCLUDE_DIR ${SDL}/include)
	set(SDL_LIBRARY SDL)
	set(SDL_LIBPATH ${SDL}/lib)
endif()

if(WITH_OPENVDB)
	set(OPENVDB ${LIBDIR}/openvdb)
	set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include)
	set(OPENVDB_LIBRARIES openvdb ${TBB_LIBRARIES})
	set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib)
	set(OPENVDB_DEFINITIONS)
endif()

if(WITH_ALEMBIC)
	# TODO(sergey): For until someone drops by and compiles libraries for
	# MinGW we allow users to compile their own Alembic library and use
	# that via find_package(),
	#
	# Once precompiled libraries are there we'll use hardcoded locations.
	find_package_wrapper(Alembic)
	if(WITH_ALEMBIC_HDF5)
		set(HDF5_ROOT_DIR ${LIBDIR}/hdf5)
		find_package_wrapper(HDF5)
	endif()
	if(NOT ALEMBIC_FOUND OR (WITH_ALEMBIC_HDF5 AND NOT HDF5_FOUND))
		set(WITH_ALEMBIC OFF)
		set(WITH_ALEMBIC_HDF5 OFF)
	endif()
endif()

set(PLATFORM_LINKFLAGS "-Xlinker --stack=2097152")

## DISABLE - causes linking errors
## for re-distribution, so users dont need mingw installed
# set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-libgcc -static-libstdc++")