project(GLTB) cmake_minimum_required(VERSION 2.8) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") if(UNIX) find_package(ICU REQUIRED) include_directories(${ICU_INCLUDE_DIR}) endif() find_path(GLM_INCLUDE_DIR "glm/glm.hpp") if(GLM_INCLUDE_DIR STREQUAL "GLM_INCLUDE_DIR-NOTFOUND") message(STATUS "glm not found") set(USE_GLM 0) else() message(STATUS "glm include dir: ${GLM_INCLUDE_DIR}") set(USE_GLM 1) endif() if(CMAKE_COMPILER_IS_GNUCXX) set(GLTB_BUILD_32_BIT 0 CACHE BOOL "Build GLTB as 32 bit library") if(GLTB_BUILD_32_BIT) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") endif() # GCC < 4.7 need different command line arguments than later versions execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) if (GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7) message(STATUS "GCC Version >= 4.7") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -DLINUX") else() message(STATUS "GCC Version < 4.7") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -pthread -DLINUX") endif() if(USE_GLM EQUAL 1) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_GLM") endif() endif() if(MSVC) set(CMAKE_CXX_FLAGS "/MP /D \"_UNICODE\" /D \"UNICODE\" ${CMAKE_CXX_FLAGS}") if(USE_GLM EQUAL 1) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D\"USE_GLM\"") endif() endif() if(USE_GLM EQUAL 1) include_directories("${GLM_INCLUDE_DIR}" include) else() include_directories(include) endif() set(SRC_LIST src/colour.cpp src/commandline.cpp src/exception.cpp src/logging.cpp src/memmappedfile.cpp src/mutex.cpp src/parameterfile.cpp src/path.cpp src/processinfo.cpp src/referencedobject.cpp src/rng.cpp src/rwlock.cpp src/semaphore.cpp src/sharedlibrary.cpp src/stringconvert.cpp src/systeminfo.cpp src/thread.cpp src/timemeasurement.cpp src/timer.cpp src/workqueue.cpp) if(USE_GLM EQUAL 1) set(SRC_LIST ${SRC_LIST} src/colour.cpp) endif() if(WIN32) ## check if target is 64 bit and add atomicvc64.asm to sources if(CMAKE_CL_64) message(STATUS "configuring for MSVC on AMD64") add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/atomicvc64.obj COMMAND ml64 /Zd /Zi /c ${CMAKE_CURRENT_SOURCE_DIR}/src/atomicvc64.asm ${CMAKE_CURRENT_BINARY_DIR}/atomicvc64.obj ) set(SRC_LIST ${SRC_LIST} ${CMAKE_CURRENT_BINARY_DIR}/atomicvc64.obj) endif() endif() file(GLOB_RECURSE HEADER_LIST include/*.h) list(APPEND SRC_LIST ${HEADER_LIST}) add_library(gltb_base STATIC ${SRC_LIST}) # installation targets install(TARGETS gltb_base ARCHIVE DESTINATION lib) install(DIRECTORY include/ DESTINATION include) # test targets set(GLTB_BUILD_TESTS 0 CACHE BOOL "build GLTB tests") if(GLTB_BUILD_TESTS) message(STATUS "building GLTB tests") if(WIN32) set(TEST_LIBRARIES gltb_base DbgHelp.lib) else() set(TEST_LIBRARIES gltb_base ${ICU_LIBRARIES}) endif() add_executable(atomictest tests/atomic/atomictest.cpp) target_link_libraries(atomictest ${TEST_LIBRARIES}) add_executable(sphereintersection tests/intersection/sphereintersection.cpp) target_link_libraries(sphereintersection ${TEST_LIBRARIES}) add_executable(stresstest tests/refcounting/stresstest.cpp) target_link_libraries(stresstest ${TEST_LIBRARIES}) add_executable(timetest tests/timemeasurement/timetest.cpp) target_link_libraries(timetest ${TEST_LIBRARIES}) add_executable(workqueuetest tests/workqueue/workqueuetest.cpp) target_link_libraries(workqueuetest ${TEST_LIBRARIES}) endif()