blob: d21548910722298015463bcfb5e7054b8f39ae31 [file] [log] [blame]
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
find_package(Threads REQUIRED)
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
include_directories(include)
# Check for some version pthread_setaffinity_np() we can use to affinitize
# threads.
include(CheckCXXSourceCompiles)
CHECK_CXX_SOURCE_COMPILES("
#ifndef _GNU_SOURCE
#define _GNU_SOURCE 1
#endif
#include <pthread.h>
#include <sched.h>
int main() {
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
if (pthread_setaffinity_np(pthread_self(), sizeof(cpuset), &cpuset) != 0) {
return 1;
}
return 0;
}
" TMB_AFFINITY_LINUX)
if (NOT TMB_AFFINITY_LINUX)
CHECK_CXX_SOURCE_COMPILES("
#ifndef _BSD_SOURCE
#define _BSD_SOURCE 1
#endif
#include <pthread.h>
#include <pthread_np.h>
#include <sched.h>
int main() {
cpuset_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
if (pthread_setaffinity_np(pthread_self(), sizeof(cpuset), &cpuset) != 0) {
return 1;
}
return 0;
}
" TMB_AFFINITY_FREEBSD)
endif()
if (NOT (TMB_AFFINITY_LINUX OR TMB_AFFINITY_FREEBSD))
CHECK_CXX_SOURCE_COMPILES("
#ifndef _BSD_SOURCE
#define _BSD_SOURCE 1
#endif
#include <pthread.h>
#include <sched.h>
int main() {
cpuset_t *cset = cpuset_create();
if (cpuset_set(0, cset) != 0) {
return 1;
}
if (pthread_setaffinity_np(pthread_self(), cpuset_size(cset), cset) != 0) {
return 1;
}
cpuset_destroy(cset);
return 0;
}
" TMB_AFFINITY_NETBSD)
endif()
if (NOT (TMB_AFFINITY_LINUX OR TMB_AFFINITY_FREEBSD OR TMB_AFFINITY_NETBSD))
message(WARNING
"Could not find a usable version of pthread_setaffinity_np(). "
"Thread-pinning for benchmarks will not be available.")
endif()
if (TMB_AFFINITY_LINUX)
set_property(
DIRECTORY
APPEND PROPERTY COMPILE_DEFINITIONS TMB_AFFINITY_LINUX)
elseif (TMB_AFFINITY_FREEBSD)
set_property(
DIRECTORY
APPEND PROPERTY COMPILE_DEFINITIONS TMB_AFFINITY_FREEBSD)
elseif (TMB_AFFINITY_NETBSD)
set_property(
DIRECTORY
APPEND PROPERTY COMPILE_DEFINITIONS TMB_AFFINITY_NETBSD)
endif()
add_library(tmbbench src/affinity.cc
src/bus_setup.cc
src/receiver_thread.cc
src/sender_thread.cc
src/thread.cc)
target_link_libraries(tmbbench
gflags_nothreads-static
tmb
${CMAKE_THREAD_LIBS_INIT})
add_executable(oneway_throughput src/oneway_throughput.cc)
target_link_libraries(oneway_throughput
gflags_nothreads-static
tmb
tmbbench
${LIBS})
add_executable(oneway_throughput_numa src/oneway_throughput_numa.cc)
target_link_libraries(oneway_throughput_numa
gflags_nothreads-static
tmb
tmbbench
${LIBS})
add_executable(oneway_throughput_distributed
src/oneway_throughput_distributed.cc)
target_link_libraries(oneway_throughput_distributed
gflags_nothreads-static
tmb
tmbbench
${LIBS})
add_executable(oneway_throughput_distributed_coordinator
src/oneway_throughput_distributed_coordinator.cc)
target_link_libraries(oneway_throughput_distributed_coordinator
gflags_nothreads-static
tmb
tmbbench
${LIBS})
add_executable(reset_bus src/reset_bus.cc)
target_link_libraries(reset_bus
gflags_nothreads-static
tmb
tmbbench)