diff --git a/mk/cmake/Modules/SpecialMacros.cmake b/mk/cmake/Modules/SpecialMacros.cmake new file mode 100644 index 000000000..988306611 --- /dev/null +++ b/mk/cmake/Modules/SpecialMacros.cmake @@ -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 + + 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 + + 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 + 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 + + 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) + diff --git a/source/glest_map_editor/CMakeLists.txt b/source/glest_map_editor/CMakeLists.txt index 0acfa0fa3..dbaf54381 100644 --- a/source/glest_map_editor/CMakeLists.txt +++ b/source/glest_map_editor/CMakeLists.txt @@ -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) diff --git a/source/shared_lib/sources/platform/posix/socket.cpp b/source/shared_lib/sources/platform/posix/socket.cpp index 64c64998a..56db13170 100644 --- a/source/shared_lib/sources/platform/posix/socket.cpp +++ b/source/shared_lib/sources/platform/posix/socket.cpp @@ -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 #endif