# Copyright 2017 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

set_source_files_properties(${COBALT_PROTO_SRCS} PROPERTIES GENERATED TRUE)

add_library(datetime_util datetime_util.cc)
target_link_libraries(datetime_util)
add_cobalt_dependencies(datetime_util)

add_library(encrypted_message_util
            encrypted_message_util.cc
            ${COBALT_PROTO_SRCS})
target_link_libraries(encrypted_message_util
                      cobalt_crypto
                      status
                      tensorflow_statusor)
add_cobalt_dependencies(encrypted_message_util)

add_library(pem_util
            pem_util.cc)
target_link_libraries(pem_util
                      cobalt_crypto)
add_cobalt_dependencies(pem_util)

add_library(proto_util
            proto_util.cc)
target_link_libraries(proto_util
	    cobalt_crypto)
add_cobalt_dependencies(proto_util)

add_executable(util_tests
               datetime_util_test.cc
               encrypted_message_util_test.cc
               consistent_proto_store_test.cc)
target_link_libraries(util_tests
                      datetime_util
                      encrypted_message_util
                      posix_file_system
                      consistent_proto_store
                      consistent_proto_store_test_proto)
add_cobalt_test_dependencies(util_tests ${DIR_GTESTS})

add_subdirectory(clearcut)
add_subdirectory(crypto_util)
add_subdirectory(gcs)
add_subdirectory(lossmin)

add_library(status
            status.cc
            status_codes.h
            status.h)
add_cobalt_dependencies(status)

add_library(posix_file_system
            posix_file_system.h
            posix_file_system.cc)
target_link_libraries(posix_file_system
                      status
                      tensorflow_statusor)
add_cobalt_dependencies(posix_file_system)

cobalt_make_protobuf_cpp_lib(consistent_proto_store_test_proto
                             CONSISTENT_PROTO_STORE_PROTO_HDRS
                             false
                             consistent_proto_store_test)

add_library(consistent_proto_store
            consistent_proto_store.h
            consistent_proto_store.cc
            ${CONSISTENT_PROTO_STORE_PROTO_HDRS})
target_link_libraries(consistent_proto_store
                      status)
add_cobalt_dependencies(consistent_proto_store)
