Browse Source
WL#5161: Implement Mats' suggestion of moving OS specific CMake code to OS specific files, instead of
WL#5161: Implement Mats' suggestion of moving OS specific CMake code to OS specific files, instead of
polluting code with IF(CMAKE_SYSTEM_NAME MATCHES...), first on Windows. cmake/libutils.cmake: Fix the case in MERGE_LIBRARIES, where there is no dependency on OS libraries. cmake/os/Windows.cmake: Move windows specific code to cmake/os/Windows.cmake configure.cmake: Move some Windows code to cmake/os/Windows.cmakepull/374/head
5 changed files with 217 additions and 205 deletions
-
33CMakeLists.txt
-
4cmake/Makefile.am
-
6cmake/libutils.cmake
-
183cmake/os/Windows.cmake
-
196configure.cmake
@ -0,0 +1,183 @@ |
|||
# Copyright (C) 2009 Sun Microsystems, Inc |
|||
# |
|||
# 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; version 2 of the License. |
|||
# |
|||
# 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 St, Fifth Floor, Boston, MA 02110-1301 USA |
|||
|
|||
# This file includes Windows specific hacks, mostly around compiler flags |
|||
|
|||
INCLUDE (CheckCSourceCompiles) |
|||
INCLUDE (CheckCXXSourceCompiles) |
|||
INCLUDE (CheckStructHasMember) |
|||
INCLUDE (CheckLibraryExists) |
|||
INCLUDE (CheckFunctionExists) |
|||
INCLUDE (CheckCCompilerFlag) |
|||
INCLUDE (CheckCSourceRuns) |
|||
INCLUDE (CheckSymbolExists) |
|||
INCLUDE (CheckTypeSize) |
|||
|
|||
# Optionally read user configuration, generated by configure.js. |
|||
# This is left for backward compatibility reasons only. |
|||
INCLUDE(win/configure.data OPTIONAL) |
|||
|
|||
# OS display name (version_compile_os etc). |
|||
# Used by the test suite to ignore bugs on some platforms, |
|||
IF(CMAKE_SIZEOF_VOID_P MATCHES 8) |
|||
SET(SYSTEM_TYPE "Win64") |
|||
ELSE() |
|||
SET(SYSTEM_TYPE "Win32") |
|||
ENDIF() |
|||
|
|||
# Intel compiler is almost Visual C++ |
|||
# (same compile flags etc). Set MSVC flag |
|||
IF(CMAKE_C_COMPILER MATCHES "icl") |
|||
SET(MSVC TRUE) |
|||
ENDIF() |
|||
|
|||
ADD_DEFINITIONS("-D_WINDOWS -D__WIN__ -D_CRT_SECURE_NO_DEPRECATE") |
|||
ADD_DEFINITIONS("-D_WIN32_WINNT=0x0501") |
|||
# Speed up build process excluding unused header files |
|||
ADD_DEFINITIONS("-DWIN32_LEAN_AND_MEAN") |
|||
|
|||
# Adjust compiler and linker flags |
|||
IF(MINGW AND CMAKE_SIZEOF_VOIDP EQUAL 4) |
|||
# mininal architecture flags, i486 enables GCC atomics |
|||
ADD_DEFINITIONS(-march=i486) |
|||
ENDIF() |
|||
|
|||
IF(MSVC) |
|||
# Enable debug info also in Release build, and create PDB to be able to analyze |
|||
# crashes |
|||
FOREACH(lang C CXX) |
|||
SET(CMAKE_${lang}_FLAGS_RELEASE "${CMAKE_${lang}_FLAGS_RELEASE} /Zi") |
|||
ENDFOREACH() |
|||
FOREACH(type EXE SHARED MODULE) |
|||
SET(CMAKE_{type}_LINKER_FLAGS_RELEASE "${CMAKE_${type}_LINKER_FLAGS_RELEASE} /debug") |
|||
ENDFOREACH() |
|||
|
|||
# Force static runtime libraries, and remove support for exception handling |
|||
FOREACH(flag |
|||
CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO |
|||
CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_DEBUG_INIT |
|||
CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO |
|||
CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG_INIT) |
|||
STRING(REPLACE "/MD" "/MT" "${flag}" "${${flag}}") |
|||
STRING(REPLACE "/EHsc" "" "${flag}" "${${flag}}") |
|||
ENDFOREACH() |
|||
|
|||
# Fix CMake's predefined huge stack size |
|||
FOREACH(type EXE SHARED MODULE) |
|||
STRING(REGEX REPLACE "/STACK:([^ ]+)" "" CMAKE_${type}_LINKER_FLAGS "${CMAKE_${type}_LINKER_FLAGS}") |
|||
ENDFOREACH() |
|||
|
|||
ADD_DEFINITIONS(-DPTHREAD_STACK_MIN=1048576) |
|||
# Mark 32 bit executables large address aware so they can |
|||
# use > 2GB address space |
|||
IF(CMAKE_SIZEOF_VOID_P MATCHES 4) |
|||
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE") |
|||
ENDIF() |
|||
|
|||
# Speed up multiprocessor build |
|||
IF (MSVC_VERSION GREATER 1400) |
|||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") |
|||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") |
|||
ENDIF() |
|||
|
|||
#TODO: update the code and remove the disabled warnings |
|||
IF (MSVC_VERSION GREATER 1310) |
|||
ADD_DEFINITIONS(/wd4800 /wd4805) |
|||
ADD_DEFINITIONS(/wd4996) |
|||
ENDIF() |
|||
|
|||
SET (PLATFORM X86) |
|||
IF(CMAKE_SIZEOF_VOID_P MATCHES 8) |
|||
# _WIN64 is defined by the compiler itself. |
|||
# Yet, we define it here again to work around a bug with Intellisense |
|||
# described here: http://tinyurl.com/2cb428. |
|||
# Syntax highlighting is important for proper debugger functionality. |
|||
ADD_DEFINITIONS("-D_WIN64") |
|||
SET (PLATFORM X64) |
|||
ENDIF() |
|||
ENDIF() |
|||
|
|||
# Always link with socket library |
|||
LINK_LIBRARIES(ws2_32) |
|||
# ..also for tests |
|||
SET(CMAKE_REQUIRED_LIBRARIES ws2_32) |
|||
|
|||
# System checks |
|||
SET(SIGNAL_WITH_VIO_CLOSE 1) # Something that runtime team needs |
|||
|
|||
# IPv6 constants appeared in Vista SDK first. We need to define them in any case if they are |
|||
# not in headers, to handle dual mode sockets correctly. |
|||
CHECK_SYMBOL_EXISTS(IPPROTO_IPV6 "winsock2.h" HAVE_IPPROTO_IPV6) |
|||
IF(NOT HAVE_IPPROTO_IPV6) |
|||
SET(HAVE_IPPROTO_IPV6 41) |
|||
ENDIF() |
|||
CHECK_SYMBOL_EXISTS(IPV6_V6ONLY "winsock2.h;ws2ipdef.h" HAVE_IPV6_V6ONLY) |
|||
IF(NOT HAVE_IPV6_V6ONLY) |
|||
SET(IPV6_V6ONLY 27) |
|||
ENDIF() |
|||
|
|||
# Some standard functions exist there under different |
|||
# names (e.g popen is _popen or strok_r is _strtok_s) |
|||
# If a replacement function exists, HAVE_FUNCTION is |
|||
# defined to 1. CMake variable <function_name> will also |
|||
# be defined to the replacement name. |
|||
# So for example, CHECK_FUNCTION_REPLACEMENT(popen _popen) |
|||
# will define HAVE_POPEN to 1 and set variable named popen |
|||
# to _popen. If the header template, one needs to have |
|||
# cmakedefine popen @popen@ which will expand to |
|||
# define popen _popen after CONFIGURE_FILE |
|||
|
|||
MACRO(CHECK_FUNCTION_REPLACEMENT function replacement) |
|||
STRING(TOUPPER ${function} function_upper) |
|||
CHECK_FUNCTION_EXISTS(${function} HAVE_${function_upper}) |
|||
IF(NOT HAVE_${function_upper}) |
|||
CHECK_FUNCTION_EXISTS(${replacement} HAVE_${replacement}) |
|||
IF(HAVE_${replacement}) |
|||
SET(HAVE_${function_upper} 1 ) |
|||
SET(${function} ${replacement}) |
|||
ENDIF() |
|||
ENDIF() |
|||
ENDMACRO() |
|||
MACRO(CHECK_SYMBOL_REPLACEMENT symbol replacement header) |
|||
STRING(TOUPPER ${symbol} symbol_upper) |
|||
CHECK_SYMBOL_EXISTS(${symbol} ${header} HAVE_${symbol_upper}) |
|||
IF(NOT HAVE_${symbol_upper}) |
|||
CHECK_SYMBOL_EXISTS(${replacement} ${header} HAVE_${replacement}) |
|||
IF(HAVE_${replacement}) |
|||
SET(HAVE_${symbol_upper} 1) |
|||
SET(${symbol} ${replacement}) |
|||
ENDIF() |
|||
ENDIF() |
|||
ENDMACRO() |
|||
|
|||
CHECK_SYMBOL_REPLACEMENT(S_IROTH _S_IREAD sys/stat.h) |
|||
CHECK_SYMBOL_REPLACEMENT(S_IFIFO _S_IFIFO sys/stat.h) |
|||
CHECK_SYMBOL_REPLACEMENT(SIGQUIT SIGTERM signal.h) |
|||
CHECK_SYMBOL_REPLACEMENT(SIGPIPE SIGINT signal.h) |
|||
CHECK_SYMBOL_REPLACEMENT(isnan _isnan float.h) |
|||
CHECK_SYMBOL_REPLACEMENT(finite _finite float.h) |
|||
CHECK_FUNCTION_REPLACEMENT(popen _popen) |
|||
CHECK_FUNCTION_REPLACEMENT(pclose _pclose) |
|||
CHECK_FUNCTION_REPLACEMENT(access _access) |
|||
CHECK_FUNCTION_REPLACEMENT(strcasecmp _stricmp) |
|||
CHECK_FUNCTION_REPLACEMENT(strncasecmp _strnicmp) |
|||
CHECK_FUNCTION_REPLACEMENT(snprintf _snprintf) |
|||
CHECK_FUNCTION_REPLACEMENT(strtok_r strtok_s) |
|||
CHECK_FUNCTION_REPLACEMENT(strtoll _strtoi64) |
|||
CHECK_FUNCTION_REPLACEMENT(strtoull _strtoui64) |
|||
CHECK_TYPE_SIZE(ssize_t SIZE_OF_SSIZE_T) |
|||
IF(NOT HAVE_SIZE_OF_SSIZE_T) |
|||
SET(ssize_t SSIZE_T) |
|||
ENDIF() |
Write
Preview
Loading…
Cancel
Save
Reference in new issue