"Here is a collection of changes which should fix issues building the OSG with CMake 2.6.0 (along with some other changes) CMakeLists.txt: * Set CMP0003 to supress warning about linking against -lpthread (which is a non-absolute library location). (CMake 2.6.x fix) * Modified the WIN32_USE_MP and a couple of other Visual Studio specific flags to be in an IF(MSVC) block (minor tweak to reduce exposing this stuff on MinGW builds) * Includes my second set of glu tesselator autodetection changes that you seemed to want but haven't committed yet. src/OpenThreads/pthreads/CMakeLists.txt: * Eliminates warning when compiling on Linux about spaces in link line (CMake 2.6.x fix) CMakeModules/OsgMacroUtils.cmake: * Tweaks to make the macros behave properly under CMake 2.6.0 (doesn't change behavior under CMake 2.4.x) CMakeModules/Find3rdPartyDependencies.cmake: * Adds the NO_DEFAULT_PATH option to all of the search options so that things in C:\Program Files\OpenSceneGraph aren't accidently picked up during configure time and instead only things in the "3rdParty" folder are discovered. (general bugfix) " post 2: "Ok, hold the presses. I just discovered that for some odd reason the osgdb_* plugins under Linux aren't getting put under the osgPlugins-2.5.0 folder. Not exactly sure why this broke, the folder was there, just empty. I'll have to look into it this evening." post 3: "Fixed, was caused by the switch to CMAKE_LIBRARY_OUTPUT_DIRECTORY and some code in osgPlugins/CMakeLists.txt that effectively overrides LIBRARY_OUTPUT_PATH on non-MSVC compilers to dump the plugins in the plugins folder. I tweaked it to override CMAKE_LIBRARY_OUTPUT_DIRECTORY as well. Seems to work fine."
117 lines
3.6 KiB
CMake
117 lines
3.6 KiB
CMake
# This file should only be included when using Pthreads
|
|
|
|
INCLUDE (CheckFunctionExists)
|
|
INCLUDE (CheckLibraryExists)
|
|
INCLUDE (CheckSymbolExists)
|
|
INCLUDE (CheckCXXSourceCompiles)
|
|
|
|
SET(LIB_NAME OpenThreads)
|
|
SET(LIB_PUBLIC_HEADERS ${OpenThreads_PUBLIC_HEADERS})
|
|
|
|
ADD_LIBRARY(${LIB_NAME}
|
|
${OPENTHREADS_USER_DEFINED_DYNAMIC_OR_STATIC}
|
|
${LIB_PUBLIC_HEADERS}
|
|
PThread.c++
|
|
PThreadBarrier.c++
|
|
PThreadBarrierPrivateData.h
|
|
PThreadCondition.c++
|
|
PThreadConditionPrivateData.h
|
|
PThreadMutex.c++
|
|
PThreadMutexPrivateData.h
|
|
PThreadPrivateData.h
|
|
../common/Version.cpp
|
|
)
|
|
|
|
IF(OPENTHREADS_SONAMES)
|
|
SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES VERSION ${OPENTHREADS_VERSION} SOVERSION ${OPENTHREADS_SOVERSION})
|
|
ENDIF(OPENTHREADS_SONAMES)
|
|
|
|
SET(CMAKE_REQUIRED_LIBRARIES_SAFE "${CMAKE_REQUIRED_LIBRARIES}")
|
|
SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
|
|
|
CHECK_FUNCTION_EXISTS(pthread_yield HAVE_PTHREAD_YIELD)
|
|
IF(HAVE_PTHREAD_YIELD)
|
|
ADD_DEFINITIONS(-DHAVE_PTHREAD_YIELD)
|
|
ELSE(HAVE_PTHREAD_YIELD)
|
|
# sched_yield appears not in libc, pthreads or whatever on some systems
|
|
CHECK_FUNCTION_EXISTS(sched_yield HAVE_SCHED_YIELD)
|
|
IF(NOT HAVE_SCHED_YIELD)
|
|
CHECK_LIBRARY_EXISTS(rt sched_yield "" HAVE_SCHED_YIELD)
|
|
IF(HAVE_SCHED_YIELD)
|
|
SET(CMAKE_THREAD_LIBS_INIT "${CMAKE_THREAD_LIBS_INIT} -lrt")
|
|
ENDIF(HAVE_SCHED_YIELD)
|
|
ENDIF(NOT HAVE_SCHED_YIELD)
|
|
IF(HAVE_SCHED_YIELD)
|
|
ADD_DEFINITIONS(-DHAVE_SCHED_YIELD)
|
|
ENDIF(HAVE_SCHED_YIELD)
|
|
ENDIF(HAVE_PTHREAD_YIELD)
|
|
|
|
IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
|
# need to have that for pthread_setaffinity_np on linux
|
|
ADD_DEFINITIONS(-D_GNU_SOURCE)
|
|
SET(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_GNU_SOURCE")
|
|
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
|
|
|
CHECK_FUNCTION_EXISTS(pthread_setconcurrency HAVE_PTHREAD_SETCONCURRENCY)
|
|
IF(HAVE_PTHREAD_SETCONCURRENCY)
|
|
ADD_DEFINITIONS(-DHAVE_PTHREAD_SETCONCURRENCY)
|
|
ENDIF(HAVE_PTHREAD_SETCONCURRENCY)
|
|
|
|
CHECK_FUNCTION_EXISTS(pthread_getconcurrency HAVE_PTHREAD_GETCONCURRENCY)
|
|
IF(HAVE_PTHREAD_GETCONCURRENCY)
|
|
ADD_DEFINITIONS(-DHAVE_PTHREAD_GETCONCURRENCY)
|
|
ENDIF(HAVE_PTHREAD_GETCONCURRENCY)
|
|
|
|
CHECK_FUNCTION_EXISTS(pthread_setaffinity_np HAVE_PTHREAD_SETAFFINITY_NP)
|
|
IF(HAVE_PTHREAD_SETAFFINITY_NP)
|
|
ADD_DEFINITIONS(-DHAVE_PTHREAD_SETAFFINITY_NP)
|
|
ELSE(HAVE_PTHREAD_SETAFFINITY_NP)
|
|
CHECK_CXX_SOURCE_COMPILES("
|
|
#include <sched.h>
|
|
int main() {
|
|
cpu_set_t cpumask;
|
|
sched_setaffinity( 0, sizeof(cpumask), &cpumask );
|
|
return 0;
|
|
}" HAVE_THREE_PARAM_SCHED_SETAFFINITY)
|
|
IF(HAVE_THREE_PARAM_SCHED_SETAFFINITY)
|
|
ADD_DEFINITIONS(-DHAVE_THREE_PARAM_SCHED_SETAFFINITY)
|
|
ELSE(HAVE_THREE_PARAM_SCHED_SETAFFINITY)
|
|
CHECK_CXX_SOURCE_COMPILES("
|
|
#include <sched.h>
|
|
int main() {
|
|
cpu_set_t cpumask;
|
|
sched_setaffinity( 0, &cpumask );
|
|
return 0;
|
|
}" HAVE_TWO_PARAM_SCHED_SETAFFINITY)
|
|
IF(HAVE_TWO_PARAM_SCHED_SETAFFINITY)
|
|
ADD_DEFINITIONS(-DHAVE_TWO_PARAM_SCHED_SETAFFINITY)
|
|
ENDIF(HAVE_TWO_PARAM_SCHED_SETAFFINITY)
|
|
ENDIF(HAVE_THREE_PARAM_SCHED_SETAFFINITY)
|
|
ENDIF(HAVE_PTHREAD_SETAFFINITY_NP)
|
|
|
|
SET(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES_SAFE}")
|
|
|
|
TARGET_LINK_LIBRARIES(${LIB_NAME}
|
|
${CMAKE_THREAD_LIBS_INIT}
|
|
)
|
|
|
|
# Since we're building different platforms binaries in
|
|
# their respective directories, we need to set the
|
|
# link directory so it can find this location.
|
|
LINK_DIRECTORIES(
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
)
|
|
|
|
INSTALL(
|
|
TARGETS OpenThreads
|
|
ARCHIVE DESTINATION lib${LIB_POSTFIX}
|
|
LIBRARY DESTINATION lib${LIB_POSTFIX}
|
|
RUNTIME DESTINATION bin
|
|
)
|
|
INSTALL(
|
|
FILES ${OpenThreads_PUBLIC_HEADERS}
|
|
DESTINATION include/OpenThreads
|
|
)
|
|
|
|
#commented out# INCLUDE(ModuleInstall OPTIONAL)
|