blob: adf5453c878ee05c5ad525e5f2219b56d2b650fc [file] [log] [blame]
# Copyright 2016 The Fuchsia Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set(ANALYZER_PB_GO "${GO_PROTO_GEN_SRC_DIR}/analyzer/analyzer_service/analyzer.pb.go")
set_source_files_properties(${ANALYZER_PB_GO} PROPERTIES GENERATED TRUE)
# Generate the C++ bindings for the Shuffler gRPC service.
# Also compile the generated C++ files into a static library.
cobalt_make_protobuf_cpp_lib(shuffler_grpc_client
SHUFFLER_PROTO_HDRS
true
shuffler)
# Generate the Go bindings for all of the shuffler's protos and gRPC service.
set(use_grpc true)
cobalt_protobuf_generate_go(generate_shuffler_pb_go_files
SHUFFLER_PB_GO_FILES
use_grpc
shuffler config shuffler_db)
add_dependencies(generate_report_master_pb_go_files
generate_config_pb_go_files
generate_cobalt_pb_go_files)
# Generate the descriptor set to configure cloud endpoints for the Shuffler service.
cobalt_generate_protobuf_descriptors(generate_shuffler_descriptor
SHUFFLER_PROTO_DESCRIPTOR
shuffler)
# Build shuffler executables
set(SHUFFLER_BIN "${CMAKE_BINARY_DIR}/shuffler/shuffler")
set(DISPATCHER_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/dispatcher/dispatcher.go")
set(RECEIVER_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/receiver/receiver.go")
set(CRYPTO_UTIL_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/util/crypto_util.go")
set(ELLIPTIC_UTIL_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/util/elliptic_util.go")
set(ENCRYPTED_MESSAGE_UTIL_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/util/encrypted_message_util.go")
set(RAND_UTIL_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/util/rand_util.go")
set(CONFIG_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/shuffler_config/config_util.go")
set(STORE_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/storage/store.go")
set(MEM_STORE_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/storage/mem_store.go")
set(LEVELDB_STORE_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/storage/leveldb_store.go")
set(KEY_UTIL_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/storage/key_util.go")
set(STORE_ITER_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/storage/iter.go")
set(MEM_STORE_ITER_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/storage/mem_store_iter.go")
set(LEVELDB_STORE_ITER_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/storage/leveldb_store_iter.go")
add_custom_command(OUTPUT ${SHUFFLER_BIN}
# Compiles shuffler_main and all its dependencies
COMMAND ${GO_BIN} build -o ${SHUFFLER_BIN}
DEPENDS ${SHUFFLER_PB_GO_FILES}
DEPENDS ${ANALYZER_PB_GO}
DEPENDS ${CONFIG_SRC}
DEPENDS ${DISPATCHER_SRC}
DEPENDS ${RECEIVER_SRC}
DEPENDS ${CRYPTO_UTIL_SRC}
DEPENDS ${ELLIPTIC_UTIL_SRC}
DEPENDS ${ENCRYPTED_MESSAGE_UTIL_SRC}
DEPENDS ${RAND_UTIL_SRC}
DEPENDS ${STORE_SRC}
DEPENDS ${KEY_UTIL_SRC}
DEPENDS ${STORE_ITER_SRC}
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/shuffler_main.go
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src
)
# Build dispatcher unit tests
set(DISPATCHER_TEST_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/dispatcher/dispatcher_test.go")
set(DISPATCHER_TEST_BIN ${GO_TESTS}/dispatcher_test)
add_custom_command(OUTPUT ${DISPATCHER_TEST_BIN}
COMMAND ${GO_BIN} test -c -o ${DISPATCHER_TEST_BIN} ${DISPATCHER_TEST_SRC}
${DISPATCHER_SRC}
DEPENDS ${DISPATCHER_SRC} ${DISPATCHER_TEST_SRC}
DEPENDS ${SHUFFLER_PB_GO_FILES}
DEPENDS ${ANALYZER_PB_GO}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src
)
# Build receiver unit tests
set(RECEIVER_TEST_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/receiver/receiver_test.go")
set(RECEIVER_TEST_BIN ${GO_TESTS}/receiver_test)
add_custom_command(OUTPUT ${RECEIVER_TEST_BIN}
COMMAND ${GO_BIN} test -c -o ${RECEIVER_TEST_BIN} ${RECEIVER_TEST_SRC}
${RECEIVER_SRC}
DEPENDS ${RECEIVER_SRC} ${RECEIVER_TEST_SRC}
DEPENDS ${SHUFFLER_PB_GO_FILES}
DEPENDS ${ANALYZER_PB_GO}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src
)
# Build crypto util unit tests
set(CRYPTO_UTIL_TEST_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/util/crypto_util_test.go")
set(RAND_UTIL_TEST_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/util/rand_util_test.go")
set(UTIL_TEST_BIN ${GO_TESTS}/util_test)
add_custom_command(OUTPUT ${UTIL_TEST_BIN}
COMMAND ${GO_BIN} test -c -o ${UTIL_TEST_BIN} ${CRYPTO_UTIL_TEST_SRC} ${RAND_UTIL_TEST_SRC}
${CRYPTO_UTIL_SRC} ${ELLIPTIC_UTIL_SRC} ${RAND_UTIL_SRC}
DEPENDS ${CRYPTO_UTIL_SRC} ${CRYPTO_UTIL_TEST_SRC} ${ELLIPTIC_UTIL_SRC}
${RAND_UTIL_SRC} ${RAND_UTIL_TEST_SRC}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src
)
# Build encrypted message util unit tests
set(ENCRYPTED_MESSAGE_UTIL_TEST_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/util/encrypted_message_util_test.go")
set(ENCRYPTED_MESSAGE_UTIL_TEST_BIN ${GO_TESTS}/encrypted_message_util_test)
add_custom_command(OUTPUT ${ENCRYPTED_MESSAGE_UTIL_TEST_BIN}
COMMAND ${GO_BIN} test -c -o ${ENCRYPTED_MESSAGE_UTIL_TEST_BIN} ${ENCRYPTED_MESSAGE_UTIL_TEST_SRC}
${ENCRYPTED_MESSAGE_UTIL_SRC} ${CRYPTO_UTIL_SRC} ${ELLIPTIC_UTIL_SRC} ${RAND_UTIL_SRC}
DEPENDS ${ENCRYPTED_MESSAGE_UTIL_TEST_SRC} ${ENCRYPTED_MESSAGE_UTIL_SRC}
DEPENDS ${CRYPTO_UTIL_SRC} ${CRYPTO_UTIL_TEST_SRC} ${ELLIPTIC_UTIL_SRC}
${RAND_UTIL_SRC} ${RAND_UTIL_TEST_SRC}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src
)
# Build config unit tests
set(CONFIG_TEST_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/shuffler_config/config_util_test.go")
set(CONFIG_TEST_BIN ${GO_TESTS}/config_test)
add_custom_command(OUTPUT ${CONFIG_TEST_BIN}
COMMAND ${GO_BIN} test -c -o ${CONFIG_TEST_BIN} ${CONFIG_TEST_SRC} ${CONFIG_SRC}
DEPENDS ${CONFIG_SRC} ${CONFIG_TEST_SRC}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src
)
# Build storage unit tests
set(STORE_TEST_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/storage/store_test.go")
set(MEM_STORE_TEST_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/storage/mem_store_test.go")
set(LEVELDB_STORE_TEST_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/storage/leveldb_store_test.go")
set(TESTUTIL_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/storage/testutil.go")
set(KEY_UTIL_TEST_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/storage/key_util_test.go")
set(STORAGE_TEST_BIN ${GO_TESTS}/storage_test)
add_custom_command(OUTPUT ${STORAGE_TEST_BIN}
COMMAND ${GO_BIN} test -c -o ${STORAGE_TEST_BIN}
${STORE_TEST_SRC} ${MEM_STORE_TEST_SRC} ${LEVELDB_STORE_TEST_SRC}
${STORE_SRC} ${MEM_STORE_SRC} ${LEVELDB_STORE_SRC} ${TESTUTIL_SRC}
${KEY_UTIL_TEST_SRC} ${KEY_UTIL_SRC}
${STORE_ITER_SRC} ${MEM_STORE_ITER_SRC} ${LEVELDB_STORE_ITER_SRC}
DEPENDS ${STORE_SRC} ${STORE_TEST_SRC} ${TESTUTIL_SRC}
DEPENDS ${MEM_STORE_SRC} ${MEM_STORE_TEST_SRC}
DEPENDS ${LEVELDB_STORE_SRC} ${LEVELDB_STORE_TEST_SRC}
DEPENDS ${KEY_UTIL_SRC} ${KEY_UTIL_TEST_SRC}
DEPENDS ${STORE_ITER_SRC} ${MEM_STORE_ITER_SRC} ${LEVELDB_STORE_ITER_SRC}
DEPENDS ${SHUFFLER_PB_GO_FILES}
DEPENDS ${ANALYZER_PB_GO}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src
)
# Build shuffler target
add_custom_target(shuffler_all ALL
DEPENDS ${SHUFFLER_BIN}
${TEST_CLIENT_BIN}
${DISPATCHER_TEST_BIN}
${RECEIVER_TEST_BIN}
${UTIL_TEST_BIN}
${ENCRYPTED_MESSAGE_UTIL_TEST_BIN}
${CONFIG_TEST_BIN}
${STORAGE_TEST_BIN}
${SHUFFLER_PROTO_DESCRIPTOR}
)
# Generate protobuf files prior to compiling anything. This is needed for
# parallel builds to work. Almost everything depends on the cobalt package
# created by the shuffler_gen_pb target so do that first.
add_custom_target(shuffler_gen_pb
DEPENDS ${SHUFFLER_PB_GO_FILES}
${ANALYZER_PB_GO}
)
add_dependencies(shuffler_all shuffler_gen_pb)