• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#-------------------------------------------------------------------------
2# drawElements CMake utilities
3# ----------------------------
4#
5# Copyright 2014 The Android Open Source Project
6#
7# Licensed under the Apache License, Version 2.0 (the "License");
8# you may not use this file except in compliance with the License.
9# You may obtain a copy of the License at
10#
11#      http://www.apache.org/licenses/LICENSE-2.0
12#
13# Unless required by applicable law or agreed to in writing, software
14# distributed under the License is distributed on an "AS IS" BASIS,
15# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16# See the License for the specific language governing permissions and
17# limitations under the License.
18#
19#-------------------------------------------------------------------------
20
21# \note Always include this file in main project file, with NO_POLICY_SCOPE
22#       AFTER project(name) statement.
23#
24# project(deproject)
25# include(delibs/cmake/Defs.cmake NO_POLICY_SCOPE)
26
27cmake_policy(VERSION 3.10.2)
28
29# \todo [pyry] More intelligent detection, perhaps use some script?
30
31# cmake files can use DE_DEFS variable to check that this file has been included
32set(DE_DEFS 1)
33
34macro (DE_MAKE_ENV_BOOL BASE VALUE)
35	if (${BASE} STREQUAL ${BASE}_${VALUE})
36		set(${BASE}_IS_${VALUE} 1)
37	else ()
38		set(${BASE}_IS_${VALUE} 0)
39	endif ()
40endmacro ()
41
42# Add build type RelWithAsserts
43set(CMAKE_CXX_FLAGS_RELWITHASSERTS ${CMAKE_CXX_FLAGS_RELEASE})
44set(CMAKE_C_FLAGS_RELWITHASSERTS ${CMAKE_C_FLAGS_RELEASE})
45set(CMAKE_EXE_LINKER_FLAGS_RELWITHASSERTS ${CMAKE_EXE_LINKER_FLAGS_RELEASE})
46set(CMAKE_SHARED_LINKER_FLAGS_RELWITHASSERTS ${CMAKE_SHARED_LINKER_FLAGS_RELEASE})
47
48# Os detection
49if (NOT DEFINED DE_OS)
50	if (WIN32)
51		set(DE_OS "DE_OS_WIN32")
52	elseif (APPLE)
53		set(DE_OS "DE_OS_OSX")
54	elseif (UNIX)
55		set(DE_OS "DE_OS_UNIX")
56	else ()
57		set(DE_OS "DE_OS_VANILLA")
58	endif ()
59endif ()
60
61# DE_OS_IS_{PLATFORM} definitions
62DE_MAKE_ENV_BOOL("DE_OS" "VANILLA")
63DE_MAKE_ENV_BOOL("DE_OS" "WIN32")
64DE_MAKE_ENV_BOOL("DE_OS" "UNIX")
65DE_MAKE_ENV_BOOL("DE_OS" "WINCE")
66DE_MAKE_ENV_BOOL("DE_OS" "OSX")
67DE_MAKE_ENV_BOOL("DE_OS" "ANDROID")
68DE_MAKE_ENV_BOOL("DE_OS" "IOS")
69
70# Prevent mixed compile with GCC and Clang
71if (NOT (CMAKE_C_COMPILER_ID MATCHES "GNU") EQUAL (CMAKE_CXX_COMPILER_ID MATCHES "GNU"))
72	message(FATAL_ERROR "CMake C and CXX compilers do not match. Both or neither must be GNU.")
73elseif (NOT (CMAKE_C_COMPILER_ID MATCHES "Clang") EQUAL (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
74	message(FATAL_ERROR "CMake C and CXX compilers do not match. Both or neither must be Clang.")
75endif ()
76
77# Compiler detection
78if (NOT DEFINED DE_COMPILER)
79	if ((CMAKE_C_COMPILER_ID MATCHES "MSVC") OR MSVC)
80		set(DE_COMPILER "DE_COMPILER_MSC")
81	elseif (CMAKE_C_COMPILER_ID MATCHES "GNU")
82		set(DE_COMPILER "DE_COMPILER_GCC")
83	elseif (CMAKE_C_COMPILER_ID MATCHES "Clang")
84		set(DE_COMPILER "DE_COMPILER_CLANG")
85
86	# Guess based on OS
87	elseif (DE_OS_IS_WIN32)
88		set(DE_COMPILER "DE_COMPILER_MSC")
89	elseif (DE_OS_IS_UNIX OR DE_OS_IS_ANDROID)
90		set(DE_COMPILER "DE_COMPILER_GCC")
91	elseif (DE_OS_IS_OSX OR DE_OS_IS_IOS)
92		set(DE_COMPILER "DE_COMPILER_CLANG")
93
94	else ()
95		set(DE_COMPILER "DE_COMPILER_VANILLA")
96	endif ()
97endif ()
98
99# DE_COMPILER_IS_{COMPILER} definitions
100DE_MAKE_ENV_BOOL("DE_COMPILER" "VANILLA")
101DE_MAKE_ENV_BOOL("DE_COMPILER" "MSC")
102DE_MAKE_ENV_BOOL("DE_COMPILER" "GCC")
103DE_MAKE_ENV_BOOL("DE_COMPILER" "CLANG")
104
105# Pointer size detection
106if (NOT DEFINED DE_PTR_SIZE)
107	if (DEFINED CMAKE_SIZEOF_VOID_P)
108		set(DE_PTR_SIZE ${CMAKE_SIZEOF_VOID_P})
109	else ()
110		set(DE_PTR_SIZE 4)
111	endif ()
112endif ()
113
114# CPU detection
115if (NOT DEFINED DE_CPU)
116	if (DE_PTR_SIZE EQUAL 8)
117		set(DE_CPU "DE_CPU_X86_64")
118	else ()
119		set(DE_CPU "DE_CPU_X86")
120	endif ()
121endif ()
122
123# DE_CPU_IS_{CPU} definitions
124DE_MAKE_ENV_BOOL("DE_CPU" "VANILLA")
125DE_MAKE_ENV_BOOL("DE_CPU" "X86")
126DE_MAKE_ENV_BOOL("DE_CPU" "ARM")
127DE_MAKE_ENV_BOOL("DE_CPU" "ARM_64")
128
129# \note [petri] Re-wrote in this ugly manner, because CMake 2.6 seems to
130#               barf about the parenthesis in the previous way. Ugh.
131#if (NOT ((DE_PTR_SIZE EQUAL 4) OR (DE_PTR_SIZE EQUAL 8)))
132if (DE_PTR_SIZE EQUAL 4)
133elseif (DE_PTR_SIZE EQUAL 8)
134else ()
135	message(FATAL_ERROR "DE_PTR_SIZE (${DE_PTR_SIZE}) is invalid")
136endif ()
137
138# Debug definitions
139if (NOT DEFINED DE_DEBUG)
140	if (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithAsserts")
141		set(DE_DEBUG 1)
142	else ()
143		set(DE_DEBUG 0)
144	endif ()
145endif ()
146
147# Android API version
148if (DE_OS_IS_ANDROID AND NOT DEFINED DE_ANDROID_API)
149	set(DE_ANDROID_API 5)
150endif ()
151
152message(STATUS "DE_OS          = ${DE_OS}")
153message(STATUS "DE_COMPILER    = ${DE_COMPILER}")
154message(STATUS "DE_CPU         = ${DE_CPU}")
155message(STATUS "DE_PTR_SIZE    = ${DE_PTR_SIZE}")
156message(STATUS "DE_DEBUG       = ${DE_DEBUG}")
157if (DE_OS_IS_ANDROID)
158	message(STATUS "DE_ANDROID_API = ${DE_ANDROID_API}")
159endif ()
160
161# Expose definitions
162if (DE_DEBUG)
163	add_definitions(-DDE_DEBUG)
164endif ()
165
166add_definitions("-DDE_OS=${DE_OS}")
167add_definitions("-DDE_COMPILER=${DE_COMPILER}")
168add_definitions("-DDE_CPU=${DE_CPU}")
169add_definitions("-DDE_PTR_SIZE=${DE_PTR_SIZE}")
170
171if (DE_OS_IS_ANDROID)
172	add_definitions("-DDE_ANDROID_API=${DE_ANDROID_API}")
173endif ()
174