# List all required files here (cmake best practice to NOT automate this step!) add_library(pls STATIC include/pls/pls.h include/pls/internal/build_flavour.h include/pls/algorithms/loop_partition_strategy.h include/pls/algorithms/for_each.h include/pls/algorithms/for_each_impl.h include/pls/algorithms/invoke.h include/pls/algorithms/invoke_impl.h include/pls/algorithms/loop_partition_strategy.h include/pls/algorithms/reduce.h include/pls/algorithms/reduce_impl.h include/pls/internal/base/spin_lock.h include/pls/internal/base/tas_spin_lock.h src/internal/base/tas_spin_lock.cpp include/pls/internal/base/ttas_spin_lock.h src/internal/base/ttas_spin_lock.cpp include/pls/internal/base/swmr_spin_lock.h src/internal/base/swmr_spin_lock.cpp include/pls/internal/base/barrier.h src/internal/base/barrier.cpp include/pls/internal/base/system_details.h src/internal/base/system_details.cpp include/pls/internal/base/error_handling.h src/internal/base/error_handling.cpp include/pls/internal/base/alignment.h src/internal/base/alignment.cpp include/pls/internal/base/stack_allocator.h src/internal/base/stack_allocator.cpp include/pls/internal/base/futex_wrapper.h include/pls/internal/data_structures/aligned_stack.h src/internal/data_structures/aligned_stack.cpp include/pls/internal/data_structures/aligned_stack_impl.h include/pls/internal/data_structures/stamped_integer.h include/pls/internal/data_structures/delayed_initialization.h include/pls/internal/data_structures/bounded_trading_deque.h include/pls/internal/data_structures/bounded_ws_deque.h include/pls/internal/data_structures/optional.h include/pls/internal/helpers/prohibit_new.h include/pls/internal/helpers/easy_profiler.h include/pls/internal/helpers/unique_id.h include/pls/internal/helpers/range.h include/pls/internal/helpers/seqence.h include/pls/internal/helpers/member_function.h include/pls/internal/scheduling/scheduler.h include/pls/internal/scheduling/scheduler_impl.h src/internal/scheduling/scheduler.cpp include/pls/internal/scheduling/base_task.h src/internal/scheduling/base_task.cpp include/pls/internal/scheduling/thread_state.h src/internal/scheduling/thread_state.cpp include/pls/internal/scheduling/task_manager.h include/pls/internal/scheduling/lock_free/task.h include/pls/internal/scheduling/lock_free/task_manager.h src/internal/scheduling/lock_free/task_manager.cpp include/pls/internal/scheduling/lock_free/external_trading_deque.h src/internal/scheduling/lock_free/external_trading_deque.cpp include/pls/internal/scheduling/lock_free/traded_cas_field.h src/internal/scheduling/lock_free/task.cpp include/pls/internal/profiling/dag_node.h src/internal/profiling/dag_node.cpp include/pls/internal/profiling/profiler.h include/pls/internal/profiling/thread_stats.h src/internal/profiling/thread_stats.cpp src/internal/profiling/profiler.cpp) # Dependencies for pls target_link_libraries(pls Threads::Threads) target_link_libraries(pls context_switcher) if (EASY_PROFILER) target_link_libraries(pls easy_profiler) endif () # Generate defines needed if (EASY_PROFILER) set(PLS_EASY_PROFILER_ENABLED true) else () set(PLS_EASY_PROFILER_ENABLED false) endif () option(PLS_PROFILER "Enable the internal DAG profiler" OFF) if (PLS_PROFILER) set(PLS_PROFILING_ENABLED true) else () set(PLS_PROFILING_ENABLED false) endif () message("-- PLS Profiler: ${PLS_PROFILER}") option(SLEEP_WORKERS "Enable sleeping workers if queues are empty" OFF) if (SLEEP_WORKERS) set(PLS_SLEEP_WORKERS_ON_EMPTY true) else () set(PLS_SLEEP_WORKERS_ON_EMPTY false) endif () message("-- Sleep Workers: ${SLEEP_WORKERS}") configure_file(include/pls/internal/build_flavour.h.in include/pls/internal/build_flavour.h) # Add everything in `./include` to be in the include path of this project target_include_directories(pls PUBLIC $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ) target_include_directories(pls PUBLIC $ $ ) # Rules for installing the library on a system # ...binaries INSTALL(TARGETS pls EXPORT pls-targets LIBRARY DESTINATION lib/pls ARCHIVE DESTINATION lib/pls ) # ...all headers in `include` INSTALL( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/pls DESTINATION include FILES_MATCHING PATTERN "*.h*" ) INSTALL( DIRECTORY ${PROJECT_BINARY_DIR}/lib/pls/include/pls DESTINATION include FILES_MATCHING PATTERN "*.h*" ) # ...allow our project to be a cmake dependency install( EXPORT pls-targets FILE plsTargets.cmake NAMESPACE pls:: DESTINATION lib/pls ) INSTALl( FILES pls-config.cmake DESTINATION lib/pls )