--- /dev/null
- set(CMAKE_CXX_FLAGS "-std=c++11 -Wno-write-strings ${CMAKE_CXX_FLAGS}")
+cmake_minimum_required(VERSION 2.8.11)
+
- set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
-
- if(DO_NOT_DELAY_TAG_CALC)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDO_NOT_DELAY_TAG_CALC")
- endif()
-
- if(K_WAY_HEAP)
- if(K_WAY_HEAP LESS 2)
- message(FATAL_ERROR "K_WAY_HEAP value should be at least 2")
- else()
- set(CMAKE_CXX_SIM_FLAGS "-DK_WAY_HEAP=${K_WAY_HEAP}")
++list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules")
+
- if (NOT(TARGET gtest AND TARGET gtest_main))
- find_package(gtest REQUIRED)
- include_directories(${GTEST_INCLUDE_DIRS})
++if (NOT(TARGET gtest AND TARGET gtest_main))
++ if(NOT(GTEST_FOUND))
++ find_package(GTest REQUIRED)
+ endif()
+endif()
+
- find_package(Boost REQUIRED)
- include_directories(${Boost_INCLUDE_DIRS})
-
++if (NOT(BOOST_FOUND))
++ find_package(Boost REQUIRED)
+endif()
+
- add_subdirectory(support)
++# add_subdirectory(support/src)
+add_subdirectory(src)
+add_subdirectory(sim)
+
+enable_testing()
+add_subdirectory(test)
++add_subdirectory(support/test)
++add_test(NAME dmclock-tests
++ COMMAND $<TARGET_FILE:dmclock-tests>)
++add_test(NAME dmclock-data-struct-tests
++ COMMAND $<TARGET_FILE:dmclock-data-struct-tests>)
--- /dev/null
--- /dev/null
++# - Find boost
++
++include(FindPackageHandleStandardArgs)
++
++find_path(Boost_INCLUDE_DIRS NAMES boost/variant.hpp
++ PATHS /usr/include /usr/local/include ${BOOST_DIR}/include)
++
++FIND_PACKAGE_HANDLE_STANDARD_ARGS(boost
++ REQUIRED_VARS Boost_INCLUDE_DIRS)
++
++if(boost_FOUND)
++ set(BOOST_FOUND 1)
++endif()
--- /dev/null
--- /dev/null
++# - Find gtest
++#
++# GTEST_INCLUDE_DIRS - where to find mcas/mcas.h, etc.
++# GTEST_LIBRARIES - List of libraries when using mcas.
++# GTEST_MAIN_LIBRARIES - List of main libraries when using mcas.
++# GTEST_FOUND - True if mcas found.
++#
++# GMOCK_INCLUDE_DIRS - where to find mcas/mcas.h, etc.
++# GMOCK_LIBRARIES - List of libraries when using mcas.
++# GMOCK_MAINLIBRARIES - List of main libraries when using mcas.
++# GMOCK_FOUND - True if mcas found.
++
++
++include(FindPackageHandleStandardArgs)
++
++## GTEST
++
++find_path(GTEST_INCLUDE_DIRS NAMES gtest/gtest.h
++ PATHS /usr/include /usr/local/include)
++
++find_library(GTEST_LIBRARIES gtest
++ PATHS /usr/local/lib /usr/lib64)
++
++find_library(GTEST_MAIN_LIBRARIES gtest_main
++ PATHS /usr/local/lib /usr/lib64)
++
++FIND_PACKAGE_HANDLE_STANDARD_ARGS(gtest
++ REQUIRED_VARS GTEST_LIBRARIES GTEST_MAIN_LIBRARIES GTEST_INCLUDE_DIRS)
++
++if(gtest_FOUND)
++ set(GTEST_FOUND 1)
++endif()
++
++## GMOCK
++
++find_path(GMOCK_INCLUDE_DIRS NAMES gmock/gmock.h
++ PATHS /usr/include /usr/local/include)
++
++find_library(GMOCK_LIBRARIES gmock
++ PATHS /usr/local/lib /usr/lib64)
++
++find_library(GMOCK_MAIN_LIBRARIES gmock_main
++ PATHS /usr/local/lib /usr/lib64)
++
++FIND_PACKAGE_HANDLE_STANDARD_ARGS(gmock
++ REQUIRED_VARS GMOCK_LIBRARIES GMOCK_MAIN_LIBRARIES GMOCK_INCLUDE_DIRS)
++
++if(gmock_FOUND)
++ set(GMOCK_FOUND 1)
++endif()
--- /dev/null
++if(K_WAY_HEAP)
++ if(K_WAY_HEAP LESS 2)
++ message(FATAL_ERROR "K_WAY_HEAP value should be at least 2")
++ else()
++ set(CMAKE_CXX_SIM_FLAGS "-DK_WAY_HEAP=${K_WAY_HEAP}")
++ endif()
++endif()
++
+add_subdirectory(src)
--- /dev/null
- include_directories(${BOOST_INCLUDE_DIR})
++include_directories(${GTEST_INCLUDE_DIRS})
++include_directories(${Boost_INCLUDE_DIRS})
+include_directories(../support/src)
- set(local_flags "-Wall -pthread")
+
++set(local_flags "-std=c++11 -Wno-write-strings -Wall -pthread")
++
++if(DO_NOT_DELAY_TAG_CALC)
++ set(local_flags "${local_flags} -DDO_NOT_DELAY_TAG_CALC")
++endif()
+
+set(dmc_srcs dmclock_util.cc ../support/src/run_every.cc)
+
+set_source_files_properties(${dmc_srcs}
+ PROPERTIES
+ COMPILE_FLAGS "${local_flags}"
+ )
+
+if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
+ set(warnings_off " -Wno-unused-variable -Wno-unused-function")
+elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+ set(warnings_off " -Wno-unused-but-set-variable -Wno-unused-function")
+endif()
+
+add_library(dmclock STATIC ${dmc_srcs})
--- /dev/null
-
- add_test(NAME dmclock-data-struct-tests
- COMMAND $<TARGET_FILE:dmclock-data-struct-tests>)
+include_directories(../src)
+
+set(local_flags "-Wall -pthread")
+
+# dmclock does not use intrusive heap (but it does use indirect
+# intrusive heap), so we won't use this code
+if(false)
+ set(srcs
+ test_intrusive_heap.cc)
+ add_executable(test_intru_heap test_intrusive_heap.cc)
+ set_source_files_properties(${srcs}
+ PROPERTIES
+ COMPILE_FLAGS "${local_flags}")
+endif(false)
+
+set(test_srcs test_indirect_intrusive_heap.cc)
+
+set_source_files_properties(${test_srcs}
+ PROPERTIES
+ COMPILE_FLAGS "${local_flags}"
+ )
+
+add_executable(dmclock-data-struct-tests ${test_srcs})
+
+target_link_libraries(dmclock-data-struct-tests
+ LINK_PRIVATE gtest gtest_main pthread)
--- /dev/null
- include_directories(${BOOST_INCLUDE_DIR})
+include_directories(../src)
+include_directories(../support/src)
+include_directories(../sim/src)
- LINK_PRIVATE $<TARGET_FILE:dmclock> pthread ${GTEST_LIBRARY} ${GTEST_MAIN_LIBRARY})
+
+set(support_srcs ../sim/src/test_dmclock.cc)
+set(test_srcs
+ test_test_client.cc
+ test_dmclock_server.cc
+ test_dmclock_client.cc
+ )
+
+set_source_files_properties(${core_srcs} ${test_srcs}
+ PROPERTIES
+ COMPILE_FLAGS "${local_flags}"
+ )
+
+add_executable(dmclock-tests ${test_srcs} ${support_srcs})
+
+if (TARGET gtest AND TARGET gtest_main)
+ add_dependencies(dmclock-tests gtest gtest_main)
+ target_link_libraries(dmclock-tests
+ LINK_PRIVATE $<TARGET_FILE:dmclock>
+ pthread
+ $<TARGET_FILE:gtest>
+ $<TARGET_FILE:gtest_main>)
+else()
+ target_link_libraries(dmclock-tests
-
- add_test(NAME dmclock-tests
- COMMAND $<TARGET_FILE:dmclock-tests>)
++ LINK_PRIVATE $<TARGET_FILE:dmclock> pthread ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES})
+endif()
+
+add_dependencies(dmclock-tests dmclock)