# Copyright (c) 2022 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
#
# SPDX-License-Identifier: GPL-2.0-only

if(${ENABLE_EIGEN})
  set(eigen_sources
      model/nr-mimo-matrices-eigen.cc
  )
  set(eigen_tests
      test/nr-test-csi.cc
      test/nr-test-ri-pmi.cc
  )
else()
  message(
    WARNING "nr MIMO features require the eigen3 library, but it was not found"
  )
  set(eigen_sources
      model/nr-mimo-matrices-no-eigen.cc
  )
  set(eigen_tests)
endif()

set(opengym_sources)
set(opengym_headers)
set(opengym_tests)
set(opengym_libraries)
if(opengym
   IN_LIST
   contrib_libs_to_build
)
  set(opengym_sources
      model/nr-mac-scheduler-ai-ns3-gym-env.cc
      model/nr-mac-scheduler-ofdma-ai.cc
      model/nr-mac-scheduler-tdma-ai.cc
      model/nr-mac-scheduler-ue-info-ai.cc
  )
  set(opengym_headers
      model/nr-mac-scheduler-ai-ns3-gym-env.h
      model/nr-mac-scheduler-ofdma-ai.h
      model/nr-mac-scheduler-tdma-ai.h
      model/nr-mac-scheduler-ue-info-ai.h
  )
  set(opengym_tests
      test/nr-test-scheduler-ai.cc
  )
  set(opengym_libraries
      ${libopengym}
  )
endif()

set(source_files
    ${eigen_sources}
    helper/beamforming-helper-base.cc
    helper/cc-bwp-helper.cc
    helper/file-scenario-helper.cc
    helper/grid-scenario-helper.cc
    helper/hexagonal-grid-scenario-helper.cc
    helper/ideal-beamforming-helper.cc
    helper/node-distribution-scenario-interface.cc
    helper/nr-bearer-stats-calculator.cc
    helper/nr-bearer-stats-connector.cc
    helper/nr-bearer-stats-simple.cc
    helper/nr-channel-helper.cc
    helper/nr-epc-helper.cc
    helper/nr-helper.cc
    helper/nr-mac-rx-trace.cc
    helper/nr-mac-scheduling-stats.cc
    helper/nr-no-backhaul-epc-helper.cc
    helper/nr-phy-rx-trace.cc
    helper/nr-point-to-point-epc-helper-base.cc
    helper/nr-point-to-point-epc-helper.cc
    helper/nr-radio-environment-map-helper.cc
    helper/nr-spectrum-value-helper.cc
    helper/nr-stats-calculator.cc
    helper/realistic-beamforming-helper.cc
    helper/scenario-parameters.cc
    helper/three-gpp-ftp-m1-helper.cc
    model/bandwidth-part-gnb.cc
    model/bandwidth-part-ue.cc
    model/beam-id.cc
    model/beam-manager.cc
    model/beamforming-vector.cc
    model/bwp-manager-algorithm.cc
    model/bwp-manager-gnb.cc
    model/bwp-manager-ue.cc
    model/ideal-beamforming-algorithm.cc
    model/lena-error-model.cc
    model/nr-a2-a4-rsrq-handover-algorithm.cc
    model/nr-a3-rsrp-handover-algorithm.cc
    model/nr-amc.cc
    model/nr-anr.cc
    model/nr-asn1-header.cc
    model/nr-cb-two-port.cc
    model/nr-cb-type-one-sp.cc
    model/nr-cb-type-one.cc
    model/nr-ch-access-manager.cc
    model/nr-chunk-processor.cc
    model/nr-common.cc
    model/nr-component-carrier.cc
    model/nr-control-messages.cc
    model/nr-csi-rs-filter.cc
    model/nr-eesm-cc-t1.cc
    model/nr-eesm-cc-t2.cc
    model/nr-eesm-cc.cc
    model/nr-eesm-error-model.cc
    model/nr-eesm-ir-t1.cc
    model/nr-eesm-ir-t2.cc
    model/nr-eesm-ir.cc
    model/nr-eesm-t1.cc
    model/nr-eesm-t2.cc
    model/nr-epc-gnb-application.cc
    model/nr-epc-gtpc-header.cc
    model/nr-epc-gtpu-header.cc
    model/nr-epc-mme-application.cc
    model/nr-epc-pgw-application.cc
    model/nr-epc-sgw-application.cc
    model/nr-epc-tft-classifier.cc
    model/nr-epc-tft.cc
    model/nr-epc-ue-nas.cc
    model/nr-epc-x2-header.cc
    model/nr-epc-x2.cc
    model/nr-eps-bearer-tag.cc
    model/nr-eps-bearer.cc
    model/nr-error-model.cc
    model/nr-fh-control.cc
    model/nr-fh-phy-sap.cc
    model/nr-fh-sched-sap.cc
    model/nr-gnb-component-carrier-manager.cc
    model/nr-gnb-mac.cc
    model/nr-gnb-net-device.cc
    model/nr-gnb-phy.cc
    model/nr-gnb-rrc.cc
    model/nr-handover-algorithm.cc
    model/nr-harq-phy.cc
    model/nr-initial-association.cc
    model/nr-interference-base.cc
    model/nr-interference.cc
    model/nr-lte-amc.cc
    model/nr-lte-mi-error-model.cc
    model/nr-mac-harq-vector.cc
    model/nr-mac-header-fs-dl.cc
    model/nr-mac-header-fs-ul.cc
    model/nr-mac-header-fs.cc
    model/nr-mac-header-vs-dl.cc
    model/nr-mac-header-vs-ul.cc
    model/nr-mac-header-vs.cc
    model/nr-mac-scheduler-cqi-management.cc
    model/nr-mac-scheduler-harq-rr.cc
    model/nr-mac-scheduler-lc-alg.cc
    model/nr-mac-scheduler-lc-qos.cc
    model/nr-mac-scheduler-lc-rr.cc
    model/nr-mac-scheduler-lcg.cc
    model/nr-mac-scheduler-ns3.cc
    model/nr-mac-scheduler-ofdma-mr.cc
    model/nr-mac-scheduler-ofdma-pf.cc
    model/nr-mac-scheduler-ofdma-qos.cc
    model/nr-mac-scheduler-ofdma-rr.cc
    model/nr-mac-scheduler-ofdma-symbol-per-beam.cc
    model/nr-mac-scheduler-ofdma-random.cc
    model/nr-mac-scheduler-ofdma.cc
    model/nr-mac-scheduler-srs-default.cc
    model/nr-mac-scheduler-tdma-mr.cc
    model/nr-mac-scheduler-tdma-pf.cc
    model/nr-mac-scheduler-tdma-qos.cc
    model/nr-mac-scheduler-tdma-rr.cc
    model/nr-mac-scheduler-tdma-random.cc
    model/nr-mac-scheduler-tdma.cc
    model/nr-mac-scheduler-ue-info-pf.cc
    model/nr-mac-scheduler-ue-info-qos.cc
    model/nr-mac-scheduler-ue-info.cc
    model/nr-mac-scheduler.cc
    model/nr-mac-short-bsr-ce.cc
    model/nr-mimo-chunk-processor.cc
    model/nr-mimo-matrices.cc
    model/nr-mimo-signal.cc
    model/nr-net-device.cc
    model/nr-no-op-component-carrier-manager.cc
    model/nr-no-op-handover-algorithm.cc
    model/nr-pdcp-header.cc
    model/nr-pdcp-tag.cc
    model/nr-pdcp.cc
    model/nr-phy-mac-common.cc
    model/nr-phy-tag.cc
    model/nr-phy.cc
    model/nr-pm-search-fast.cc
    model/nr-pm-search-full.cc
    model/nr-pm-search-ideal.cc
    model/nr-pm-search-sasaoka.cc
    model/nr-pm-search.cc
    model/nr-radio-bearer-info.cc
    model/nr-radio-bearer-tag.cc
    model/nr-rlc-am-header.cc
    model/nr-rlc-am.cc
    model/nr-rlc-header.cc
    model/nr-rlc-sdu-status-tag.cc
    model/nr-rlc-sequence-number.cc
    model/nr-rlc-tag.cc
    model/nr-rlc-tm.cc
    model/nr-rlc-um.cc
    model/nr-rlc.cc
    model/nr-rrc-header.cc
    model/nr-rrc-protocol-ideal.cc
    model/nr-rrc-protocol-real.cc
    model/nr-simple-ue-component-carrier-manager.cc
    model/nr-spectrum-phy.cc
    model/nr-spectrum-signal-parameters.cc
    model/nr-ue-component-carrier-manager.cc
    model/nr-ue-mac.cc
    model/nr-ue-net-device.cc
    model/nr-ue-phy.cc
    model/nr-ue-power-control.cc
    model/nr-ue-rrc.cc
    model/nr-vendor-specific-parameters.cc
    model/realistic-beamforming-algorithm.cc
    model/realistic-bf-manager.cc
    model/resource-assignment-matrix.cc
    model/sfnsf.cc
    utils/channels/nyu/nyu-channel-condition-model.cc
    utils/channels/nyu/nyu-channel-model.cc
    utils/channels/nyu/nyu-propagation-loss-model.cc
    utils/channels/nyu/nyu-spectrum-propagation-loss-model.cc
    utils/distance-based-three-gpp-spectrum-propagation-loss-model.cc
    utils/fast-fading-constant-position-mobility-model.cc
    utils/parse-string-to-vector.cc
    utils/traffic-generators/helper/traffic-generator-helper.cc
    utils/traffic-generators/helper/xr-traffic-mixer-helper.cc
    utils/traffic-generators/model/traffic-generator-3gpp-audio-data.cc
    utils/traffic-generators/model/traffic-generator-3gpp-generic-video.cc
    utils/traffic-generators/model/traffic-generator-3gpp-pose-control.cc
    utils/traffic-generators/model/traffic-generator-ftp-single.cc
    utils/traffic-generators/model/traffic-generator-ngmn-ftp-multi.cc
    utils/traffic-generators/model/traffic-generator-ngmn-gaming.cc
    utils/traffic-generators/model/traffic-generator-ngmn-video.cc
    utils/traffic-generators/model/traffic-generator-ngmn-voip.cc
    utils/traffic-generators/model/traffic-generator.cc
    utils/wraparound-model/hexagonal-wraparound-model.cc
    utils/wraparound-three-gpp-spectrum-propagation-loss-model.cc
)

set(header_files
    helper/beamforming-helper-base.h
    helper/cc-bwp-helper.h
    helper/file-scenario-helper.h
    helper/grid-scenario-helper.h
    helper/hexagonal-grid-scenario-helper.h
    helper/ideal-beamforming-helper.h
    helper/node-distribution-scenario-interface.h
    helper/nr-bearer-stats-calculator.h
    helper/nr-bearer-stats-connector.h
    helper/nr-bearer-stats-simple.h
    helper/nr-channel-helper.h
    helper/nr-epc-helper.h
    helper/nr-helper.h
    helper/nr-mac-rx-trace.h
    helper/nr-mac-scheduling-stats.h
    helper/nr-no-backhaul-epc-helper.h
    helper/nr-phy-rx-trace.h
    helper/nr-point-to-point-epc-helper-base.h
    helper/nr-point-to-point-epc-helper.h
    helper/nr-radio-environment-map-helper.h
    helper/nr-spectrum-value-helper.h
    helper/nr-stats-calculator.h
    helper/realistic-beamforming-helper.h
    helper/scenario-parameters.h
    helper/three-gpp-ftp-m1-helper.h
    model/bandwidth-part-gnb.h
    model/bandwidth-part-ue.h
    model/beam-id.h
    model/beam-manager.h
    model/beamforming-vector.h
    model/bwp-manager-algorithm.h
    model/bwp-manager-gnb.h
    model/bwp-manager-ue.h
    model/ideal-beamforming-algorithm.h
    model/lena-error-model.h
    model/nr-a2-a4-rsrq-handover-algorithm.h
    model/nr-a3-rsrp-handover-algorithm.h
    model/nr-amc.h
    model/nr-anr-sap.h
    model/nr-anr.h
    model/nr-as-sap.h
    model/nr-asn1-header.h
    model/nr-cb-two-port.h
    model/nr-cb-type-one-sp.h
    model/nr-cb-type-one.h
    model/nr-ccm-mac-sap.h
    model/nr-ccm-rrc-sap.h
    model/nr-ch-access-manager.h
    model/nr-chunk-processor.h
    model/nr-common.h
    model/nr-component-carrier.h
    model/nr-control-messages.h
    model/nr-csi-rs-filter.h
    model/nr-eesm-cc-t1.h
    model/nr-eesm-cc-t2.h
    model/nr-eesm-cc.h
    model/nr-eesm-error-model.h
    model/nr-eesm-ir-t1.h
    model/nr-eesm-ir-t2.h
    model/nr-eesm-ir.h
    model/nr-eesm-t1.h
    model/nr-eesm-t2.h
    model/nr-epc-gnb-application.h
    model/nr-epc-gnb-s1-sap.h
    model/nr-epc-gtpc-header.h
    model/nr-epc-gtpu-header.h
    model/nr-epc-mme-application.h
    model/nr-epc-pgw-application.h
    model/nr-epc-s11-sap.h
    model/nr-epc-s1ap-sap.h
    model/nr-epc-sgw-application.h
    model/nr-epc-tft-classifier.h
    model/nr-epc-tft.h
    model/nr-epc-ue-nas.h
    model/nr-epc-x2-header.h
    model/nr-epc-x2-sap.h
    model/nr-epc-x2.h
    model/nr-eps-bearer-tag.h
    model/nr-eps-bearer.h
    model/nr-error-model.h
    model/nr-fh-control.h
    model/nr-fh-phy-sap.h
    model/nr-fh-sched-sap.h
    model/nr-gnb-cmac-sap.h
    model/nr-gnb-component-carrier-manager.h
    model/nr-gnb-cphy-sap.h
    model/nr-gnb-mac.h
    model/nr-gnb-net-device.h
    model/nr-gnb-phy.h
    model/nr-gnb-rrc.h
    model/nr-handover-algorithm.h
    model/nr-handover-management-sap.h
    model/nr-harq-phy.h
    model/nr-initial-association.h
    model/nr-interference-base.h
    model/nr-interference.h
    model/nr-lte-amc.h
    model/nr-lte-mi-error-model.h
    model/nr-mac-csched-sap.h
    model/nr-mac-harq-process.h
    model/nr-mac-harq-vector.h
    model/nr-mac-header-fs-dl.h
    model/nr-mac-header-fs-ul.h
    model/nr-mac-header-fs.h
    model/nr-mac-header-vs-dl.h
    model/nr-mac-header-vs-ul.h
    model/nr-mac-header-vs.h
    model/nr-mac-pdu-info.h
    model/nr-mac-sap.h
    model/nr-mac-sched-sap.h
    model/nr-mac-scheduler-cqi-management.h
    model/nr-mac-scheduler-harq-rr.h
    model/nr-mac-scheduler-lc-alg.h
    model/nr-mac-scheduler-lc-qos.h
    model/nr-mac-scheduler-lc-rr.h
    model/nr-mac-scheduler-lcg.h
    model/nr-mac-scheduler-ns3.h
    model/nr-mac-scheduler-ofdma-mr.h
    model/nr-mac-scheduler-ofdma-pf.h
    model/nr-mac-scheduler-ofdma-qos.h
    model/nr-mac-scheduler-ofdma-rr.h
    model/nr-mac-scheduler-ofdma-symbol-per-beam.h
    model/nr-mac-scheduler-ofdma-random.h
    model/nr-mac-scheduler-ofdma.h
    model/nr-mac-scheduler-srs-default.h
    model/nr-mac-scheduler-srs.h
    model/nr-mac-scheduler-tdma-mr.h
    model/nr-mac-scheduler-tdma-pf.h
    model/nr-mac-scheduler-tdma-qos.h
    model/nr-mac-scheduler-tdma-rr.h
    model/nr-mac-scheduler-tdma-random.h
    model/nr-mac-scheduler-tdma.h
    model/nr-mac-scheduler-ue-info-mr.h
    model/nr-mac-scheduler-ue-info-pf.h
    model/nr-mac-scheduler-ue-info-qos.h
    model/nr-mac-scheduler-ue-info-rr.h
    model/nr-mac-scheduler-ue-info.h
    model/nr-mac-scheduler.h
    model/nr-mac-short-bsr-ce.h
    model/nr-mimo-chunk-processor.h
    model/nr-mimo-matrices.h
    model/nr-mimo-signal.h
    model/nr-net-device.h
    model/nr-no-op-component-carrier-manager.h
    model/nr-no-op-handover-algorithm.h
    model/nr-pdcp-header.h
    model/nr-pdcp-sap.h
    model/nr-pdcp-tag.h
    model/nr-pdcp.h
    model/nr-phy-mac-common.h
    model/nr-phy-sap.h
    model/nr-phy-tag.h
    model/nr-phy.h
    model/nr-pm-search-fast.h
    model/nr-pm-search-full.h
    model/nr-pm-search-ideal.h
    model/nr-pm-search-sasaoka.h
    model/nr-pm-search.h
    model/nr-radio-bearer-info.h
    model/nr-radio-bearer-tag.h
    model/nr-rlc-am-header.h
    model/nr-rlc-am.h
    model/nr-rlc-header.h
    model/nr-rlc-sap.h
    model/nr-rlc-sdu-status-tag.h
    model/nr-rlc-sequence-number.h
    model/nr-rlc-tag.h
    model/nr-rlc-tm.h
    model/nr-rlc-um.h
    model/nr-rlc.h
    model/nr-rrc-header.h
    model/nr-rrc-protocol-ideal.h
    model/nr-rrc-protocol-real.h
    model/nr-rrc-sap.h
    model/nr-simple-ue-component-carrier-manager.h
    model/nr-spectrum-phy.h
    model/nr-spectrum-signal-parameters.h
    model/nr-ue-ccm-rrc-sap.h
    model/nr-ue-cmac-sap.h
    model/nr-ue-component-carrier-manager.h
    model/nr-ue-cphy-sap.h
    model/nr-ue-mac.h
    model/nr-ue-net-device.h
    model/nr-ue-phy.h
    model/nr-ue-power-control.h
    model/nr-ue-rrc.h
    model/nr-vendor-specific-parameters.h
    model/realistic-beamforming-algorithm.h
    model/realistic-bf-manager.h
    model/resource-assignment-matrix.h
    model/sfnsf.h
    utils/channels/nyu/nyu-channel-condition-model.h
    utils/channels/nyu/nyu-channel-model.h
    utils/channels/nyu/nyu-propagation-loss-model.h
    utils/channels/nyu/nyu-spectrum-propagation-loss-model.h
    utils/distance-based-three-gpp-spectrum-propagation-loss-model.h
    utils/fast-fading-constant-position-mobility-model.h
    utils/nr-json.hpp
    utils/parse-string-to-vector.h
    utils/traffic-generators/helper/traffic-generator-helper.h
    utils/traffic-generators/helper/xr-traffic-mixer-helper.h
    utils/traffic-generators/model/traffic-generator-3gpp-audio-data.h
    utils/traffic-generators/model/traffic-generator-3gpp-generic-video.h
    utils/traffic-generators/model/traffic-generator-3gpp-pose-control.h
    utils/traffic-generators/model/traffic-generator-ftp-single.h
    utils/traffic-generators/model/traffic-generator-ngmn-ftp-multi.h
    utils/traffic-generators/model/traffic-generator-ngmn-gaming.h
    utils/traffic-generators/model/traffic-generator-ngmn-video.h
    utils/traffic-generators/model/traffic-generator-ngmn-voip.h
    utils/traffic-generators/model/traffic-generator.h
    utils/wraparound-model/hexagonal-wraparound-model.h
    utils/wraparound-three-gpp-spectrum-propagation-loss-model.h
)

set(test_sources
    ${eigen_tests}
    ${opengym_tests}
    test/nr-antenna-3gpp-model-conf.cc
    test/nr-cc-bwp-configuration.cc
    test/nr-channel-setup-test.cc
    test/nr-epc-test-gtpu.cc
    test/nr-epc-test-s1u-downlink.cc
    test/nr-epc-test-s1u-uplink.cc
    test/nr-ideal-beamforming-test.cc
    test/nr-lte-pattern-generation.cc
    test/nr-mac-short-bsr-ce-test.cc
    test/nr-multipanel-test.cc
    test/nr-phy-patterns.cc
    test/nr-power-allocation.cc
    test/nr-realistic-beamforming-test.cc
    test/nr-simple-helper.cc
    test/nr-simple-net-device.cc
    test/nr-simple-spectrum-phy.cc
    test/nr-spectrum-phy-test.cc
    test/nr-system-test-configurations.cc
    test/nr-system-test-schedulers-ofdma-mr.cc
    test/nr-system-test-schedulers-ofdma-pf.cc
    test/nr-system-test-schedulers-ofdma-rr.cc
    test/nr-system-test-schedulers-tdma-mr.cc
    test/nr-system-test-schedulers-tdma-pf.cc
    test/nr-system-test-schedulers-tdma-rr.cc
    test/nr-system-test-schedulers-random.cc
    test/nr-test-asn1-encoding.cc
    test/nr-test-deactivate-bearer.cc
    test/nr-test-entities.cc
    test/nr-test-epc-e2e-data.cc
    test/nr-test-epc-tft-classifier.cc
    test/nr-test-fdm-of-numerologies.cc
    test/nr-test-harq.cc
    test/nr-test-ipv6-routing.cc
    test/nr-test-l2sm-eesm.cc
    test/nr-test-notching.cc
    test/nr-test-numerology-delay.cc
    test/nr-test-resource-assignment-matrix.cc
    test/nr-test-rlc-am-e2e.cc
    test/nr-test-rlc-am-transmitter.cc
    test/nr-test-rlc-header.cc
    test/nr-test-rlc-um-e2e.cc
    test/nr-test-rlc-um-transmitter.cc
    test/nr-test-rrc.cc
    test/nr-test-sched-harq.cc
    test/nr-test-sched-symbols-per-beam.cc
    test/nr-test-sched-temporal-fairness.cc
    test/nr-test-sched.cc
    test/nr-test-sfnsf.cc
    test/nr-test-subband.cc
    test/nr-test-timings.cc
    test/nr-uplink-power-control-test.cc
    test/nr-system-scheduler-test-qos.cc
    test/system-scheduler-test.cc
    test/ul-scheduling-test.cc
    utils/traffic-generators/test/traffic-generator-test.cc
    utils/wraparound-model/wraparound-model-test.cc
    # cmake-format: off
    # todo:
    # test/nr-test-x2-handover.cc               \
    # test/nr-test-x2-handover-measures.cc       \
    # test/nr-test-ue-measurements.cc             \ <= works but needs to be updated to reflect NR measurements
    # test/nr-test-cell-selection.cc               \
    # test/nr-test-radio-link-failure.cc            \
    # test/nr-test-lte-handover-delay.cc             | requires handover
    # test/nr-test-lte-handover-failure.cc          /
    # test/nr-test-lte-handover-target.cc          /
    # test/nr-test-primary-cell-change.cc         /
    # test/nr-test-secondary-cell-handover.cc    /
    # test/nr-test-secondary-cell-selection.cc  /
    #
    # test/nr-test-carrier-aggregation.cc
    # test/nr-test-cqi-generation.cc
    # cmake-format: on
)

check_deps(
  hosvd_deps
  PYTHON_PACKAGES
  pyttb # Requires patches to compute HOSVD for a complex tensor. Use
  # pip install git+https://gitlab.com/cttc-lena/pyttb
  pybind11
)
if(NOT
   ("${hosvd_deps}"
    STREQUAL
    "")
   OR WIN32
)
  message(
    STATUS
      "Search-free PMI selection requires pyttb and pybind11, and only works on Unix"
  )
else()
  set(PYBIND11_FINDPYTHON
      ON
  )
  disable_cmake_warnings()
  find_package(
    pybind11
    REQUIRED
  )
  enable_cmake_warnings()
  link_libraries(
    pybind11::headers
    pybind11::embed
    ${CMAKE_DL_LIBS}
  )
  list(
    APPEND
    source_files
    model/nr-pm-search-maleki.cc
  )
  list(
    APPEND
    header_files
    model/nr-pm-search-maleki.h
  )
  add_compile_definitions(PMI_MALEKI=1)
endif()

build_lib(
  LIBNAME nr
  SOURCE_FILES ${source_files}
  HEADER_FILES ${header_files}
  LIBRARIES_TO_LINK
    ${libinternet-apps}
    ${libflow-monitor}
    ${libspectrum}
    ${libbuildings}
    ${libvirtual-net-device}
    ${libpoint-to-point}
    ${libapplications}
    ${libcsma}
    ${libconfig-store}
    ${opengym_libraries}
  TEST_SOURCES ${test_sources}
)

# Get path src/nr or contrib/nr
string(
  REPLACE "${PROJECT_SOURCE_DIR}/"
          ""
          FOLDER
          "${CMAKE_CURRENT_SOURCE_DIR}"
)
build_exec(
  EXECNAME nr-print-introspected-doxygen
  SOURCE_FILES ./utils/print-introspected-doxygen.cc
  LIBRARIES_TO_LINK ${libnr}
  EXECUTABLE_DIRECTORY_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${FOLDER}
)
