cmake_minimum_required(VERSION 3.11)
project(constellation LANGUAGES C)
set(CLI_BUILD_TAGS "" CACHE STRING "Tags passed to go build of Constellation CLI.")
set(BAZEL "bazel" CACHE STRING "Path to bazel binary.")

enable_testing()

#
# disk-mapper
#
add_custom_target(disk-mapper ALL
  COMMAND ${BAZEL} build //disk-mapper/cmd:disk-mapper_linux_amd64
  COMMAND cp \$$\(${BAZEL} cquery --output=files //disk-mapper/cmd:disk-mapper_linux_amd64\) ${CMAKE_BINARY_DIR}/disk-mapper
  COMMAND chmod +w ${CMAKE_BINARY_DIR}/disk-mapper
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  BYPRODUCTS disk-mapper
)

#
# measurement-reader
#
add_custom_target(measurement-reader ALL
  COMMAND ${BAZEL} build //measurement-reader/cmd:measurement-reader_linux_amd64
  COMMAND cp \$$\(${BAZEL} cquery --output=files //measurement-reader/cmd:measurement-reader_linux_amd64\) ${CMAKE_BINARY_DIR}/measurement-reader
  COMMAND chmod +w ${CMAKE_BINARY_DIR}/measurement-reader
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  BYPRODUCTS measurement-reader
)

#
# bootstrapper
#
add_custom_target(bootstrapper ALL
  COMMAND ${BAZEL} build //bootstrapper/cmd/bootstrapper:bootstrapper_linux_amd64
  COMMAND cp \$$\(${BAZEL} cquery --output=files //bootstrapper/cmd/bootstrapper:bootstrapper_linux_amd64\) ${CMAKE_BINARY_DIR}/bootstrapper
  COMMAND chmod +w ${CMAKE_BINARY_DIR}/bootstrapper
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  BYPRODUCTS bootstrapper
)

#
# upgrade-agent
#
add_custom_target(upgrade-agent ALL
  COMMAND ${BAZEL} build //upgrade-agent/cmd:upgrade_agent_linux_amd64
  COMMAND cp \$$\(${BAZEL} cquery --output=files //upgrade-agent/cmd:upgrade_agent_linux_amd64\) ${CMAKE_BINARY_DIR}/upgrade-agent
  COMMAND chmod +w ${CMAKE_BINARY_DIR}/upgrade-agent
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  BYPRODUCTS upgrade-agent
)

#
# cli
#
add_custom_target(cli ALL
  COMMAND ${BAZEL} build --@io_bazel_rules_go//go/config:tags='${CLI_BUILD_TAGS}' //cli:cli_oss_host
  COMMAND cp \$$\(${BAZEL} cquery --@io_bazel_rules_go//go/config:tags='${CLI_BUILD_TAGS}' --output=files //cli:cli_oss_host\) ${CMAKE_BINARY_DIR}/constellation
  COMMAND chmod +w ${CMAKE_BINARY_DIR}/constellation
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  BYPRODUCTS constellation
)

#
# debugd
#
add_custom_target(debugd ALL
  COMMAND ${BAZEL} build //debugd/cmd/debugd:debugd_linux_amd64
  COMMAND cp \$$\(${BAZEL} cquery --output=files //debugd/cmd/debugd:debugd_linux_amd64\) ${CMAKE_BINARY_DIR}/debugd
  COMMAND chmod +w ${CMAKE_BINARY_DIR}/debugd
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  BYPRODUCTS debugd
)

#
# cdbg
#
add_custom_target(cdbg ALL
  COMMAND ${BAZEL} build //debugd/cmd/cdbg:cdbg_host
  COMMAND cp \$$\(${BAZEL} cquery --output=files //debugd/cmd/cdbg:cdbg_host\) ${CMAKE_BINARY_DIR}/cdbg
  COMMAND chmod +w ${CMAKE_BINARY_DIR}/cdbg
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  BYPRODUCTS cdbg
)

add_test(NAME unit COMMAND bash -c "go test -race -count=3 $(go list -f '{{.Dir}}/...' -m | xargs)" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
add_test(NAME integration-node-operator COMMAND make test WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/operators/constellation-node-operator)
add_test(NAME integration-csi COMMAND bash -c "go test -tags integration -c ./test/ && sudo ./test.test -test.v" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/csi)
add_test(NAME integration-dm COMMAND bash -c "go test -tags integration -c ./test/ && sudo ./test.test -test.v" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/disk-mapper/internal)
add_test(NAME integration-license COMMAND bash -c "go test -tags integration" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/internal/license)