set(CMAKE_C_COMPILER gcc)
set(CMAKE_CXX_COMPILER g++)

pkg_check_modules(UDEV REQUIRED libudev)
find_library(LIBUDEV_LIBRARY NAMES udev)

include_directories(
    ${CMAKE_CURRENT_SOURCE_DIR}/../control
    ${CMAKE_CURRENT_SOURCE_DIR}/../base
    ${CMAKE_CURRENT_SOURCE_DIR}/../utils)

set (SRC_Sources
    src/main.cpp
    src/processmanager.cpp
    src/cgroupmanager.cpp
    src/systemdunitmanager.cpp
    src/cpuraplenergymeter.cpp
    src/cgroupv2releasenotification.cpp
    src/psrstatemanagerinterface.cpp
    src/vrrstatemanagerinterface.cpp
    src/refreshratemanager.cpp
    src/inputeventlistener.cpp
)

set (SRC_Headers
    src/processmanager.h
    src/cgroupmanager.h
    src/systemdunitmanager.h
    src/cpuraplenergymeter.h
    src/cgroupv2releasenotification.h
    src/psrstatemanagerinterface.h
    src/vrrstatemanagerinterface.h
    src/refreshratemanager.h
    src/inputeventlistener.h
)

qt6_add_dbus_adaptor(SRC_Sources
    configs/com.kylin.ProcessManagerDaemon.xml
    src/processmanager.h
    ProcessManager
    processmanagerservice
    ProcessManagerService)

add_executable(
    kylin-process-manager-daemon
    ${BASE_FILE}
    ${SRC_Sources}
    ${SRC_Headers}
    src/resourcewatcher.cpp src/resourcewatcher.h
    src/resource.cpp src/resource.h
    src/pressurewatcher.cpp src/pressurewatcher.h
    src/memorywatcher.cpp src/memorywatcher.h
    src/systemresourcemanager.h src/systemresourcemanager.cpp
)

target_link_libraries(kylin-process-manager-daemon
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::DBus
    ${LIBPROC2_LIBRARIES}
    cgroup
    jsoncpp
    pthread
    ${LIBUDEV_LIBRARY}
)

install(TARGETS kylin-process-manager-daemon DESTINATION /usr/bin)
install(FILES configs/kylin-process-manager-thawer DESTINATION /usr/bin)
install(FILES configs/com.kylin.ProcessManagerDaemon.conf DESTINATION /usr/share/dbus-1/system.d)
install(FILES configs/com.kylin.ProcessManagerDaemon.service DESTINATION /usr/share/dbus-1/system-services)
install(FILES configs/kylin-process-manager-daemon.service DESTINATION /usr/lib/systemd/system)
#install(FILES configs/kylin-process-manager-thawer.service DESTINATION /usr/lib/systemd/system)

# install(FILES configs/kylin-process-manager-thawer.service 
#         DESTINATION /usr/lib/systemd/system/
#         COMPONENT services)

# install(CODE "
#         file(MAKE_DIRECTORY /lib/systemd/system/reboot.target.wants)" 
#         COMPONENT services)

# install(CODE "execute_process(COMMAND ln -sf /usr/lib/systemd/system/kylin-process-manager-thawer.service 
#         /usr/lib/systemd/system/reboot.target.wants/kylin-process-manager-thawer.service)" 
#         COMPONENT services)
        
# install(CODE "file(MAKE_DIRECTORY /usr/lib/systemd/system/poweroff.target.wants)" 
#         COMPONENT services)

# install(CODE "execute_process(COMMAND ln -sf /usr/lib/systemd/system/kylin-process-manager-thawer.service /lib/systemd/system/poweroff.target.wants/kylin-process-manager-thawer.service)"
#          COMPONENT services)

install(FILES configs/kylin-process-manager-cleaner DESTINATION /usr/bin)

set(C_SRC src/cpulimit_fork.c)
add_executable(cpulimit_fork ${C_SRC})

install(TARGETS cpulimit_fork DESTINATION /usr/bin)
