1cmake_minimum_required (VERSION 3.1 FATAL_ERROR)
2set (BUILD_SHARED_LIBRARIES OFF)
3include (ExternalProject)
4set (CMAKE_CXX_STANDARD 20)
5set (CMAKE_CXX_STANDARD_REQUIRED ON)
6
7project (hsbp-manager CXX)
8
9set (
10    CMAKE_CXX_FLAGS
11    "${CMAKE_CXX_FLAGS} -lstdc++fs \
12    -Werror \
13    -Wall \
14    -Wextra \
15    -Wshadow \
16    -Wnon-virtual-dtor \
17    -Wold-style-cast \
18    -Wcast-align \
19    -Wunused \
20    -Woverloaded-virtual \
21    -Wpedantic \
22    -Wconversion \
23    -Wmisleading-indentation \
24    -Wduplicated-cond \
25    -Wduplicated-branches \
26    -Wlogical-op \
27    -Wnull-dereference \
28    -Wuseless-cast \
29    -Wdouble-promotion \
30    -Wformat=2 \
31    "
32)
33# Temporarily disable rtti
34# See https://github.com/chriskohlhoff/asio/issues/533
35#    -fno-rtti
36
37option (YOCTO "Enable Building in Yocto" OFF)
38
39if (NOT YOCTO)
40    externalproject_add (
41        Boost URL
42        https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/boost_1_76_0.tar.gz
43        URL_MD5 e425bf1f1d8c36a3cd464884e74f007a SOURCE_DIR
44        "${CMAKE_BINARY_DIR}/boost-src" BINARY_DIR
45        "${CMAKE_BINARY_DIR}/boost-build" CONFIGURE_COMMAND "" BUILD_COMMAND ""
46        INSTALL_COMMAND mkdir -p "${CMAKE_BINARY_DIR}/prefix/include/" && cp -R
47        ${CMAKE_BINARY_DIR}/boost-src/boost ${CMAKE_BINARY_DIR}/prefix/include
48    ) # requires apt install autoconf-archive and autoconf
49    externalproject_add (sdbusplus-project PREFIX
50                         ${CMAKE_BINARY_DIR}/sdbusplus-project GIT_REPOSITORY
51                         https://github.com/openbmc/sdbusplus.git GIT_TAG
52                         8a97100b806225df40c490eb748c9a4e1b3c11b3 SOURCE_DIR
53                         ${CMAKE_BINARY_DIR}/sdbusplus-src BINARY_DIR
54                         ${CMAKE_BINARY_DIR}/sdbusplus-build CONFIGURE_COMMAND
55                         "" BUILD_COMMAND cd ${CMAKE_BINARY_DIR}/sdbusplus-src
56                         && meson build -Ddefault_library=static && ninja -C
57                         build libsdbusplus.a INSTALL_COMMAND ""
58                         LOG_DOWNLOAD ON)
59
60    include_directories (SYSTEM ${CMAKE_BINARY_DIR}/sdbusplus-src)
61    link_directories (${CMAKE_BINARY_DIR}/sdbusplus-src/build)
62
63    include_directories (SYSTEM ${CMAKE_BINARY_DIR}/boost-src)
64    set (CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/boost-src ${CMAKE_PREFIX_PATH})
65endif ()
66
67add_definitions (-DBOOST_ERROR_CODE_HEADER_ONLY)
68add_definitions (-DBOOST_SYSTEM_NO_DEPRECATED)
69add_definitions (-DBOOST_ALL_NO_LIB)
70add_definitions (-DBOOST_NO_RTTI)
71add_definitions (-DBOOST_NO_TYPEID)
72add_definitions (-DBOOST_ASIO_DISABLE_THREADS)
73
74include_directories (${CMAKE_CURRENT_SOURCE_DIR}/include)
75
76add_executable (hsbp-manager src/hsbp_manager.cpp)
77
78target_link_libraries (hsbp-manager -lsystemd)
79target_link_libraries (hsbp-manager i2c)
80target_link_libraries (hsbp-manager ${Boost_LIBRARIES})
81target_link_libraries (hsbp-manager sdbusplus)
82target_link_libraries (hsbp-manager stdc++fs)
83target_link_libraries (hsbp-manager gpiodcxx)
84
85if (NOT YOCTO)
86    add_dependencies (hsbp-manager sdbusplus-project)
87endif ()
88
89
90find_package (PkgConfig REQUIRED)
91pkg_get_variable(SYSTEMD_SYSTEM_UNIT_DIR systemd systemdsystemunitdir)
92
93set (SERVICE_FILES ${PROJECT_SOURCE_DIR}/service_files/hsbp-manager.service)
94
95install (TARGETS hsbp-manager DESTINATION bin)
96install (FILES ${SERVICE_FILES} DESTINATION "${SYSTEMD_SYSTEM_UNIT_DIR}")
97