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

platform_apple_xcode.cmake « platform « cmake « build_files - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: e76a7783939f278c47081e8c905b9d06bda4845c (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
# ***** 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): Jacques Beaurain.
#
# ***** END GPL LICENSE BLOCK *****

# Xcode and system configuration for Apple.

# require newer cmake on osx because of version handling,
# older cmake cannot handle 2 digit subversion!
cmake_minimum_required(VERSION 3.0.0)

if(NOT CMAKE_OSX_ARCHITECTURES)
	set(CMAKE_OSX_ARCHITECTURES x86_64 CACHE STRING
		"Choose the architecture you want to build Blender for: i386, x86_64 or ppc"
		FORCE)
endif()

if(NOT DEFINED OSX_SYSTEM)
	execute_process(
			COMMAND xcodebuild -version -sdk macosx SDKVersion
			OUTPUT_VARIABLE OSX_SYSTEM
			OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()

# workaround for incorrect cmake xcode lookup for developer previews - XCODE_VERSION does not
# take xcode-select path into account but would always look  into /Applications/Xcode.app
# while dev versions are named Xcode<version>-DP<preview_number>
execute_process(
		COMMAND xcode-select --print-path
		OUTPUT_VARIABLE XCODE_CHECK OUTPUT_STRIP_TRAILING_WHITESPACE)
string(REPLACE "/Contents/Developer" "" XCODE_BUNDLE ${XCODE_CHECK}) # truncate to bundlepath in any case

if(${CMAKE_GENERATOR} MATCHES "Xcode")

	# earlier xcode has no bundled developer dir, no sense in getting xcode path from
	if(${XCODE_VERSION} VERSION_GREATER 4.2) 
		# reduce to XCode name without dp extension
		string(SUBSTRING "${XCODE_CHECK}" 14 6 DP_NAME) 
		if(${DP_NAME} MATCHES Xcode5)
			set(XCODE_VERSION 5)
		endif()
	endif()

	##### cmake incompatibility with xcode  4.3 and higher #####
	if(${XCODE_VERSION} MATCHES '') # cmake fails due looking for xcode in the wrong path, thus will be empty var
		message(FATAL_ERROR "Xcode 4.3 and higher must be used with cmake 2.8-8 or higher")
	endif()
	### end cmake incompatibility with xcode 4.3 and higher ###
	
	if(${XCODE_VERSION} VERSION_EQUAL 4 OR ${XCODE_VERSION} VERSION_GREATER 4 AND ${XCODE_VERSION} VERSION_LESS 4.3)
		# Xcode 4 defaults to the Apple LLVM Compiler.
		# Override the default compiler selection because Blender only compiles with gcc up to xcode 4.2
		set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
		message(STATUS "Setting compiler to: " ${CMAKE_XCODE_ATTRIBUTE_GCC_VERSION})
	endif()
else() # unix makefile generator does not fill XCODE_VERSION var, so we get it with a command
	execute_process(COMMAND xcodebuild -version OUTPUT_VARIABLE XCODE_VERS_BUILD_NR)
	string(SUBSTRING "${XCODE_VERS_BUILD_NR}" 6 3 XCODE_VERSION) # truncate away build-nr
	unset(XCODE_VERS_BUILD_NR)
endif()

message(STATUS "Detected OS X ${OSX_SYSTEM} and Xcode ${XCODE_VERSION} at ${XCODE_BUNDLE}")

if(${XCODE_VERSION} VERSION_LESS 4.3)
	# use guaranteed existing sdk
	set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX${OSX_SYSTEM}.sdk CACHE PATH "" FORCE)
else()
	# note: xcode-select path could be ambigous,
	# cause /Applications/Xcode.app/Contents/Developer or /Applications/Xcode.app would be allowed
	# so i use a selfcomposed bundlepath here  
	set(OSX_SYSROOT_PREFIX ${XCODE_BUNDLE}/Contents/Developer/Platforms/MacOSX.platform)
	message(STATUS "OSX_SYSROOT_PREFIX: " ${OSX_SYSROOT_PREFIX})
	set(OSX_DEVELOPER_PREFIX /Developer/SDKs/MacOSX${OSX_SYSTEM}.sdk) # use guaranteed existing sdk
	set(CMAKE_OSX_SYSROOT ${OSX_SYSROOT_PREFIX}/${OSX_DEVELOPER_PREFIX} CACHE PATH "" FORCE)
	if(${CMAKE_GENERATOR} MATCHES "Xcode")
		# to silence sdk not found warning, just overrides CMAKE_OSX_SYSROOT
		set(CMAKE_XCODE_ATTRIBUTE_SDKROOT macosx${OSX_SYSTEM})
	endif()
endif()

if(OSX_SYSTEM MATCHES 10.9)
	# make sure syslibs and headers are looked up in sdk ( expecially for 10.9 openGL atm. )
	set(CMAKE_FIND_ROOT_PATH ${CMAKE_OSX_SYSROOT})
endif()

if(WITH_CXX11)
	# 10.9 is our min. target, if you use higher sdk, weak linking happens
	if(CMAKE_OSX_DEPLOYMENT_TARGET)
		if(${CMAKE_OSX_DEPLOYMENT_TARGET} VERSION_LESS 10.9)
			message(STATUS "Setting deployment target to 10.9, lower versions are incompatible with WITH_CXX11")
			set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "" FORCE)
		endif()
	else()
		set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "" FORCE)
	endif()
else()
	if(NOT CMAKE_OSX_DEPLOYMENT_TARGET)
		# 10.6 is our min. target, if you use higher sdk, weak linking happens
		set(CMAKE_OSX_DEPLOYMENT_TARGET "10.6" CACHE STRING "" FORCE)
	endif()
endif()

if(NOT ${CMAKE_GENERATOR} MATCHES "Xcode")
	# force CMAKE_OSX_DEPLOYMENT_TARGET for makefiles, will not work else ( cmake bug ? )
	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
	add_definitions("-DMACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
endif()

macro(apple_check_quicktime)
	# QuickTime framework is no longer available in SDK 10.12+
	if(WITH_CODEC_QUICKTIME AND ${OSX_SYSTEM} VERSION_GREATER 10.11)
		set(WITH_CODEC_QUICKTIME OFF CACHE BOOL "" FORCE)
		message(STATUS "QuickTime not supported by SDK ${OSX_SYSTEM}, disabling WITH_CODEC_QUICKTIME")
	endif()
endmacro()