CMakeLists.txt 4.11 KB
Newer Older
1 2
# List all required files here (cmake best practice to NOT automate this step!)
add_library(pls STATIC
FritzFlorian committed
3
        include/pls/internal/base/spin_lock.h
4 5 6 7
        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/thread.h src/internal/base/thread.cpp
8
        include/pls/internal/base/thread_impl.h
9
        include/pls/internal/base/barrier.h src/internal/base/barrier.cpp
10 11
        include/pls/internal/base/system_details.h
        include/pls/internal/base/error_handling.h
12
        include/pls/internal/base/alignment.h src/internal/base/alignment.cpp
13

14 15 16
        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
17
        include/pls/internal/data_structures/delayed_initialization.h
18 19 20 21

        include/pls/internal/helpers/prohibit_new.h
        include/pls/internal/helpers/profiler.h
        include/pls/internal/helpers/mini_benchmark.h
FritzFlorian committed
22
        include/pls/internal/helpers/unique_id.h
23
        include/pls/internal/helpers/range.h
24
        include/pls/internal/helpers/seqence.h
25
        include/pls/internal/helpers/member_function.h
26

27
        include/pls/internal/scheduling/thread_state.h
28
        include/pls/internal/scheduling/scheduler.h src/internal/scheduling/scheduler.cpp
29
        include/pls/internal/scheduling/scheduler_impl.h
30 31
        include/pls/internal/scheduling/scheduler_memory.h
        include/pls/internal/scheduling/task_manager.h
32
        include/pls/internal/scheduling/task.h src/internal/scheduling/task.cpp
33 34 35 36
        include/pls/internal/data_structures/bounded_ws_deque.h
        include/pls/internal/data_structures/optional.h
        include/pls/internal/scheduling/thread_state_static.h
        src/internal/base/error_handling.cpp
37 38
        include/pls/internal/data_structures/bounded_trading_deque.h
        include/pls/internal/scheduling/external_trading_deque.h
39 40 41 42 43
        include/pls/internal/scheduling/traded_cas_field.h
        include/pls/internal/scheduling/task_manager_impl.h
        include/pls/internal/scheduling/static_scheduler_memory.h
        include/pls/internal/scheduling/heap_scheduler_memory.h
        src/internal/scheduling/task_manager.cpp)
44

45 46 47 48 49 50 51
# 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 ()

52 53 54
# Add everything in `./include` to be in the include path of this project
target_include_directories(pls
        PUBLIC
55 56
        $<INSTALL_INTERFACE:include>
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
57
        PRIVATE
58 59
        ${CMAKE_CURRENT_SOURCE_DIR}/src # TODO: Set this up when we require private headers
        )
60

61 62 63 64 65 66
# Enable warnings/tidy code checking from our compiler
target_compile_options(pls PRIVATE
        $<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>,$<CXX_COMPILER_ID:GNU>>:
        -Wall>
        $<$<CXX_COMPILER_ID:MSVC>:
        -W4>)
67

68
# Rules for installing the library on a system
69
# ...binaries
70
INSTALL(TARGETS pls
71
        EXPORT pls-targets
72 73
        LIBRARY DESTINATION lib/pls
        ARCHIVE DESTINATION lib/pls
74
        )
75
# ...all headers in `include`
76 77
INSTALL(
        DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/pls
78 79 80
        DESTINATION include
        FILES_MATCHING PATTERN "*.h*"
)
81 82 83 84 85 86 87 88 89 90 91
# ...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
)
92
# ...add a custom target that will only build the library when installing.
93 94 95 96 97
# This can allow us to speed up the installation on embedded devices.
ADD_CUSTOM_TARGET(install.pls
        ${CMAKE_COMMAND}
        -DBUILD_TYPE=${CMAKE_BUILD_TYPE}
        -P ${CMAKE_BINARY_DIR}/cmake_install.cmake)
98
ADD_DEPENDENCIES(install.pls context_switcher pls)