- bugfixes to build on debians multi-platform build system

This commit is contained in:
Mark Vejvoda 2011-12-23 04:38:42 +00:00
parent 2224d75d10
commit 496b847999
3 changed files with 146 additions and 7 deletions

View File

@ -0,0 +1,145 @@
# special macros SpecialMacros.cmake
include(CheckFunctionExists)
include(AddFileDependencies)
macro(special_add_library lib)
if (WIN32)
add_library(${lib} STATIC ${ARGN})
else (WIN32)
add_library(${lib} SHARED ${ARGN})
endif (WIN32)
endmacro(special_add_library)
macro(special_check_for_sse _max_sse_level_desired)
set(${_max_sse_level_desired})
message(STATUS "Max SSE desired: [${_max_sse_level_desired}]")
# check for SSE extensions
include(CheckCXXSourceRuns)
if( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX )
set(SSE_FLAGS)
set(CMAKE_REQUIRED_FLAGS "-msse3")
check_cxx_source_runs("
#include <pmmintrin.h>
int main()
{
__m128d a, b;
double vals[2] = {0};
a = _mm_loadu_pd(vals);
b = _mm_hadd_pd(a,a);
_mm_storeu_pd(vals, b);
return 0;
}"
HAS_SSE3_EXTENSIONS)
set(CMAKE_REQUIRED_FLAGS "-msse2")
check_cxx_source_runs("
#include <emmintrin.h>
int main()
{
__m128d a, b;
double vals[2] = {0};
a = _mm_loadu_pd(vals);
b = _mm_add_pd(a,a);
_mm_storeu_pd(vals,b);
return 0;
}"
HAS_SSE2_EXTENSIONS)
set(CMAKE_REQUIRED_FLAGS "-msse")
check_cxx_source_runs("
#include <xmmintrin.h>
int main()
{
__m128 a, b;
float vals[4] = {0};
a = _mm_loadu_ps(vals);
b = a;
b = _mm_add_ps(a,b);
_mm_storeu_ps(vals,b);
return 0;
}"
HAS_SSE_EXTENSIONS)
set(CMAKE_REQUIRED_FLAGS)
if(HAS_SSE3_EXTENSIONS AND (NOT ${_max_sse_level_desired} OR ${_max_sse_level_desired} MATCHES "3"))
set(SSE_FLAGS "-msse3 -mfpmath=sse")
message(STATUS "Found SSE3 extensions, using flags: ${SSE_FLAGS}")
elseif(HAS_SSE2_EXTENSIONS AND (NOT ${_max_sse_level_desired} OR ${_max_sse_level_desired} MATCHES "2"))
set(SSE_FLAGS "-msse2 -mfpmath=sse")
message(STATUS "Found SSE2 extensions, using flags: ${SSE_FLAGS}")
elseif(HAS_SSE_EXTENSIONS AND (NOT ${_max_sse_level_desired} OR ${_max_sse_level_desired} MATCHES "1"))
set(SSE_FLAGS "-msse -mfpmath=sse")
message(STATUS "Found SSE extensions, using flags: ${SSE_FLAGS}")
endif()
elseif(MSVC)
check_cxx_source_runs("
#include <emmintrin.h>
int main()
{
__m128d a, b;
double vals[2] = {0};
a = _mm_loadu_pd(vals);
b = _mm_add_pd(a,a);
_mm_storeu_pd(vals,b);
return 0;
}"
HAS_SSE2_EXTENSIONS)
if( HAS_SSE2_EXTENSIONS AND (NOT ${_max_sse_level_desired} OR ${_max_sse_level_desired} MATCHES "2"))
message(STATUS "Found SSE2 extensions")
set(SSE_FLAGS "/arch:SSE2 /fp:fast -D__SSE__ -D__SSE2__" )
endif()
endif()
endmacro(special_check_for_sse)
macro(special_add_compile_flags target)
set(args ${ARGN})
separate_arguments(args)
get_target_property(_flags ${target} COMPILE_FLAGS)
if(NOT _flags)
set(_flags ${ARGN})
else(NOT _flags)
separate_arguments(_flags)
list(APPEND _flags "${args}")
endif(NOT _flags)
_special_list_to_string(_flags_str "${_flags}")
set_target_properties(${target} PROPERTIES
COMPILE_FLAGS "${_flags_str}")
endmacro(special_add_compile_flags)
macro(special_add_link_flags target)
set(args ${ARGN})
separate_arguments(args)
get_target_property(_flags ${target} LINK_FLAGS)
if(NOT _flags)
set(_flags ${ARGN})
else(NOT _flags)
separate_arguments(_flags)
list(APPEND _flags "${args}")
endif(NOT _flags)
_special_list_to_string(_flags_str "${_flags}")
set_target_properties(${target} PROPERTIES
LINK_FLAGS "${_flags_str}")
endmacro(special_add_link_flags)
macro(_special_list_to_string _string _list)
set(${_string})
foreach(_item ${_list})
string(LENGTH "${${_string}}" _len)
if(${_len} GREATER 0)
set(${_string} "${${_string}} ${_item}")
else(${_len} GREATER 0)
set(${_string} "${_item}")
endif(${_len} GREATER 0)
endforeach(_item)
endmacro(_special_list_to_string)

View File

@ -17,12 +17,6 @@ IF(BUILD_MEGAGLEST_MAP_EDITOR)
IF(NOT WIN32)
# It was noticed that when using MinGW gcc it is essential that 'core' is mentioned before 'base'.
IF(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
SET(wxWidgets_CONFIG_OPTIONS --prefix=/usr/local)
MESSAGE(STATUS "Detected FreeBSD.....")
ENDIF()
FIND_PACKAGE(wxWidgets COMPONENTS core base gl REQUIRED)
# wxWidgets include (this will do all the magic to configure everything)

View File

@ -313,7 +313,7 @@ string Ip::getString() const{
// class Socket
// ===============================================
#if defined(__FreeBSD__) || defined(BSD) || defined(__APPLE__) || defined(__linux__)
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(BSD) || defined(__APPLE__) || defined(__linux__)
# define USE_GETIFADDRS 1
# include <ifaddrs.h>
#endif