# Copyright (C) 2010 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 INCLUDE(CheckSymbolExists) INCLUDE(CheckCSourceRuns) SET(TARGET_OS_SOLARIS 1) # Enable 64 bit file offsets SET(_FILE_OFFSET_BITS 64) # Legacy option, without it my_pthread is having problems ADD_DEFINITIONS(-DHAVE_RWLOCK_T) # On Solaris, use of intrinsics will screw the lib search logic # Force using -lm, so rint etc are found. SET(LIBM m) # CMake defined -lthread as thread flag. This crashes in dlopen # when trying to load plugins workaround with -lpthread SET(CMAKE_THREADS_LIBS_INIT -lpthread CACHE INTERNAL "") # Solaris specific large page support CHECK_SYMBOL_EXISTS(MHA_MAPSIZE_VA sys/mman.h HAVE_DECL_MHA_MAPSIZE_VA) IF(HAVE_DECL_MHA_MAPSIZE_VA) SET(HAVE_SOLARIS_LARGE_PAGES 1) SET(HAVE_LARGE_PAGE_OPTION 1) ENDIF() # Solaris atomics CHECK_C_SOURCE_RUNS( " #include int main() { int foo = -10; int bar = 10; int64_t foo64 = -10; int64_t bar64 = 10; if (atomic_add_int_nv((uint_t *)&foo, bar) || foo) return -1; bar = atomic_swap_uint((uint_t *)&foo, (uint_t)bar); if (bar || foo != 10) return -1; bar = atomic_cas_uint((uint_t *)&bar, (uint_t)foo, 15); if (bar) return -1; if (atomic_add_64_nv((volatile uint64_t *)&foo64, bar64) || foo64) return -1; bar64 = atomic_swap_64((volatile uint64_t *)&foo64, (uint64_t)bar64); if (bar64 || foo64 != 10) return -1; bar64 = atomic_cas_64((volatile uint64_t *)&bar64, (uint_t)foo64, 15); if (bar64) return -1; atomic_or_64((volatile uint64_t *)&bar64, 0); return 0; } " HAVE_SOLARIS_ATOMIC)