diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..18973e74 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,47 @@ +cmake_minimum_required(VERSION 3.13) +project(concurrentqueue VERSION 0.1 LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 11) +set(THREADS_PREFER_PTHREAD_FLAG ON) +find_package(Threads REQUIRED) + +enable_testing() + +add_library(concurrentqueue INTERFACE) + +# -Wall -pedantic-errors -Wpedantic -Wconversion -fno-elide-constructors +target_compile_options(concurrentqueue INTERFACE -Wall -pedantic-errors -Wpedantic -Wconversion -fno-elide-constructors) + +target_include_directories(concurrentqueue INTERFACE + $ + $ +) +target_link_libraries(concurrentqueue INTERFACE Threads::Threads rt) + +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + "${PROJECT_BINARY_DIR}/concurrentqueueConfigVersion.cmake" + VERSION 0.1 + COMPATIBILITY AnyNewerVersion +) +install(TARGETS concurrentqueue + EXPORT concurrentqueueTargets + LIBRARY DESTINATION lib COMPONENT Runtime + ARCHIVE DESTINATION lib COMPONENT Development + RUNTIME DESTINATION bin COMPONENT Runtime + PUBLIC_HEADER DESTINATION include COMPONENT Development + BUNDLE DESTINATION bin COMPONENT Runtime +) +include(CMakePackageConfigHelpers) +configure_package_config_file( + "${PROJECT_SOURCE_DIR}/cmake/concurrentqueueConfig.cmake.in" + "${PROJECT_BINARY_DIR}/concurrentqueueConfig.cmake" + INSTALL_DESTINATION lib/cmake/concurrentqueue +) +install(EXPORT concurrentqueueTargets DESTINATION lib/cmake/concurrentqueue) +install(FILES "${PROJECT_BINARY_DIR}/concurrentqueueConfigVersion.cmake" + "${PROJECT_BINARY_DIR}/concurrentqueueConfig.cmake" + DESTINATION lib/cmake/concurrentqueue) +install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/ DESTINATION include) + +add_subdirectory(tests) diff --git a/benchmarks/benchmarks.cpp b/benchmarks/benchmarks.cpp index 69c08a4a..ca3b820c 100644 --- a/benchmarks/benchmarks.cpp +++ b/benchmarks/benchmarks.cpp @@ -22,7 +22,7 @@ #include #include -#include "../blockingconcurrentqueue.h" +#include "concurrentqueue/blockingconcurrentqueue.h" #include "lockbasedqueue.h" #include "simplelockfree.h" #include "boostqueue.h" diff --git a/build/makefile b/build/makefile index 8805eecc..66584133 100644 --- a/build/makefile +++ b/build/makefile @@ -31,15 +31,15 @@ benchmarks: bin/benchmarks$(EXT) bin/unittests$(EXT): ../concurrentqueue.h ../blockingconcurrentqueue.h ../tests/unittests/unittests.cpp ../tests/unittests/mallocmacro.cpp ../tests/common/simplethread.h ../tests/common/simplethread.cpp ../tests/common/systemtime.h ../tests/common/systemtime.cpp ../tests/corealgos.h ../tests/unittests/minitest.h makefile test -d bin || mkdir bin - g++ -std=c++11 -Wall -pedantic-errors -Wpedantic -Wconversion $(OPTS) -fno-elide-constructors ../tests/common/simplethread.cpp ../tests/common/systemtime.cpp ../tests/unittests/unittests.cpp -o bin/unittests$(EXT) $(LD_OPTS) + g++ -std=c++11 -Wall -pedantic-errors -Wpedantic -Wconversion $(OPTS) -I../include -fno-elide-constructors ../tests/common/simplethread.cpp ../tests/common/systemtime.cpp ../tests/unittests/unittests.cpp -o bin/unittests$(EXT) $(LD_OPTS) bin/fuzztests$(EXT): ../concurrentqueue.h ../tests/fuzztests/fuzztests.cpp ../tests/common/simplethread.h ../tests/common/simplethread.cpp ../tests/common/systemtime.h ../tests/common/systemtime.cpp ../tests/corealgos.h makefile test -d bin || mkdir bin - g++ -std=c++11 -Wall -pedantic-errors -Wpedantic $(BENCH_OPTS) ../tests/common/simplethread.cpp ../tests/common/systemtime.cpp ../tests/fuzztests/fuzztests.cpp -o bin/fuzztests$(EXT) $(LD_OPTS) + g++ -std=c++11 -Wall -pedantic-errors -Wpedantic $(BENCH_OPTS) -I../include ../tests/common/simplethread.cpp ../tests/common/systemtime.cpp ../tests/fuzztests/fuzztests.cpp -o bin/fuzztests$(EXT) $(LD_OPTS) bin/benchmarks$(EXT): bin/libtbb.a ../concurrentqueue.h ../benchmarks/benchmarks.cpp ../benchmarks/cpuid.h ../benchmarks/cpuid.cpp ../benchmarks/lockbasedqueue.h ../benchmarks/simplelockfree.h ../tests/common/simplethread.h ../tests/common/simplethread.cpp ../tests/common/systemtime.h ../tests/common/systemtime.cpp makefile test -d bin || mkdir bin - g++ -std=c++11 -Wall -pedantic-errors -Wpedantic $(BENCH_OPTS) -I../benchmarks ../benchmarks/cpuid.cpp ../tests/common/simplethread.cpp ../tests/common/systemtime.cpp ../benchmarks/benchmarks.cpp -o bin/benchmarks$(EXT) -Lbin -ltbb $(LD_OPTS) + g++ -std=c++11 -Wall -pedantic-errors -Wpedantic $(BENCH_OPTS) -I../include -I../benchmarks ../benchmarks/cpuid.cpp ../tests/common/simplethread.cpp ../tests/common/systemtime.cpp ../benchmarks/benchmarks.cpp -o bin/benchmarks$(EXT) -Lbin -ltbb $(LD_OPTS) bin/libtbb.a: makefile test -d bin || mkdir bin diff --git a/cmake/concurrentqueueConfig.cmake.in b/cmake/concurrentqueueConfig.cmake.in new file mode 100644 index 00000000..84f271f5 --- /dev/null +++ b/cmake/concurrentqueueConfig.cmake.in @@ -0,0 +1,4 @@ +@PACKAGE_INIT@ + +include("${CMAKE_INSTALL_PREFIX}/lib/cmake/concurrentqueue/concurrentqueueTargets.cmake") +check_required_components("@PROJECT_NAME@") \ No newline at end of file diff --git a/blockingconcurrentqueue.h b/include/concurrentqueue/blockingconcurrentqueue.h similarity index 100% rename from blockingconcurrentqueue.h rename to include/concurrentqueue/blockingconcurrentqueue.h diff --git a/concurrentqueue.h b/include/concurrentqueue/concurrentqueue.h similarity index 100% rename from concurrentqueue.h rename to include/concurrentqueue/concurrentqueue.h diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 00000000..1983982d --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,39 @@ +set(UNITTESTS_SRC + unittests/unittests.cpp + unittests/mallocmacro.cpp + common/simplethread.cpp + common/systemtime.cpp +) +add_executable(unittests ${UNITTESTS_SRC}) +target_link_libraries(unittests PRIVATE concurrentqueue) +add_test(NAME unittests COMMAND unittests) + +set(FUZZTESTS_SRC + fuzztests/fuzztests.cpp + common/simplethread.cpp + common/systemtime.cpp +) +add_executable(fuzztests ${FUZZTESTS_SRC}) +target_link_libraries(fuzztests PRIVATE concurrentqueue) +add_test(NAME fuzztests COMMAND fuzztests) + +set(LIBTBB_SRC + ${concurrentqueue_SOURCE_DIR}/benchmarks/tbb/cache_aligned_allocator.cpp + ${concurrentqueue_SOURCE_DIR}/benchmarks/tbb/concurrent_queue.cpp + ${concurrentqueue_SOURCE_DIR}/benchmarks/tbb/dynamic_link.cpp + ${concurrentqueue_SOURCE_DIR}/benchmarks/tbb/tbb_misc.cpp +) +add_library(libtbb STATIC ${LIBTBB_SRC}) +target_include_directories(libtbb PUBLIC ${concurrentqueue_SOURCE_DIR}/benchmarks/) +set_property(TARGET libtbb PROPERTY POSITION_INDEPENDENT_CODE ON) + +set(BENCHMARKS_SRC + ${concurrentqueue_SOURCE_DIR}/benchmarks/benchmarks.cpp + ${concurrentqueue_SOURCE_DIR}/benchmarks/cpuid.cpp + common/simplethread.cpp + common/systemtime.cpp +) +add_executable(benchmarks ${BENCHMARKS_SRC}) +target_link_libraries(benchmarks PRIVATE concurrentqueue libtbb) +add_test(NAME benchmarks COMMAND benchmarks) + diff --git a/tests/fuzztests/fuzztests.cpp b/tests/fuzztests/fuzztests.cpp index 96ec3dd2..f3808d5a 100644 --- a/tests/fuzztests/fuzztests.cpp +++ b/tests/fuzztests/fuzztests.cpp @@ -29,7 +29,7 @@ #include #endif -#include "../../concurrentqueue.h" +#include "concurrentqueue/concurrentqueue.h" #include "../common/simplethread.h" #include "../common/systemtime.h" #include "../corealgos.h" diff --git a/tests/unittests/mallocmacro.cpp b/tests/unittests/mallocmacro.cpp index 350fae49..72fbc65a 100644 --- a/tests/unittests/mallocmacro.cpp +++ b/tests/unittests/mallocmacro.cpp @@ -1,4 +1,4 @@ #define malloc(x) malloc(x) #define free(x) free(x) -#include "../../blockingconcurrentqueue.h" +#include "concurrentqueue//blockingconcurrentqueue.h" diff --git a/tests/unittests/unittests.cpp b/tests/unittests/unittests.cpp index e3254b5e..393e6e1b 100644 --- a/tests/unittests/unittests.cpp +++ b/tests/unittests/unittests.cpp @@ -24,8 +24,8 @@ #include "minitest.h" #include "../common/simplethread.h" #include "../common/systemtime.h" -#include "../../concurrentqueue.h" -#include "../../blockingconcurrentqueue.h" +#include "concurrentqueue/concurrentqueue.h" +#include "concurrentqueue/blockingconcurrentqueue.h" namespace { struct tracking_allocator