blob: 43d4495c302f2ac326b0efe62bacc5ed1f53d97f [file] [log] [blame]
cpp_compiler = meson.get_compiler('cpp')
protobuf_deps = dependency('protobuf', required : false)
if not protobuf_deps.found()
protobuf_proj = subproject('protobuf')
protobuf_deps = declare_dependency(
dependencies : [
abseil_proj.get_variable('protobuf_dep'),
],
)
endif
gpr_deps = dependency('gpr', required: false)
if not gpr_deps.found()
gpr_deps = cpp_compiler.find_library('gpr')
endif
grpc_deps = dependency('grpc', required: false)
if not grpc_deps.found()
grpc_deps = cpp_compiler.find_library('grpc')
endif
grpcpp_deps = dependency('grpc++', required: false)
if not grpcpp_deps.found()
grpcpp_deps = cpp_compiler.find_library('grpc++')
endif
grpcpp_reflection = dependency('grpc++_reflection', required: false)
if not grpcpp_reflection.found()
grpcpp_reflection = cpp_compiler.find_library('grpc++_reflection', required: false)
if not grpcpp_reflection.found()
grpcpp_reflection = cpp_compiler.find_library('grpc++_reflection', dirs: '/usr/local/lib')
endif
endif
protoc = find_program('protoc')
grpc_cpp_plugin = find_program('grpc_cpp_plugin')
redfish_v1_protos = ['redfish_v1.proto']
authz_protos = ['oauth.proto', 'authorized_entity.proto']
all_protos = redfish_v1_protos + authz_protos
proto_gen = {}
proto_headers = {}
foreach proto : all_protos
tmp_target = custom_target(
proto,
output: ['@BASENAME@.pb.cc', '@BASENAME@.pb.h'],
input: [proto],
command : [
protoc,
'@INPUT@',
'--proto_path=@CURRENT_SOURCE_DIR@',
'--cpp_out=@OUTDIR@',
],
install : true,
install_dir : [false, get_option('includedir')],
)
proto_gen += {proto: tmp_target}
proto_headers += {proto: tmp_target[1]}
endforeach
redfish_v1_proto_gen = []
foreach proto : redfish_v1_protos
redfish_v1_proto_gen += proto_gen[proto]
endforeach
authz_proto_gen = []
foreach proto : authz_protos
authz_proto_gen += proto_gen[proto]
endforeach
grpc_redfish_gen = custom_target(
'grpc_redfish_grpc_pb_[ch]',
output: ['@BASENAME@.grpc.pb.cc', '@BASENAME@.grpc.pb.h'],
input: ['redfish_v1.proto'],
command : [
protoc,
'@INPUT@',
'--proto_path=@CURRENT_SOURCE_DIR@',
'--grpc_out=@OUTDIR@',
'--plugin=protoc-gen-grpc=' + grpc_cpp_plugin.full_path(),
],
install : true,
install_dir : [false, get_option('includedir')],
)
oauth_gen = custom_target(
'oauth_grpc_pb_[ch]',
output: ['@BASENAME@.grpc.pb.cc', '@BASENAME@.grpc.pb.h'],
input: ['oauth.proto'],
command : [
protoc,
'@INPUT@',
'--proto_path=@CURRENT_SOURCE_DIR@',
'--grpc_out=@OUTDIR@',
'--plugin=protoc-gen-grpc=' + grpc_cpp_plugin.full_path(),
],
install : true,
install_dir : [false, get_option('includedir')],
)
gmi_protos_dep = dependency('gmi_protos')
one_dep = dependency('one')
if cpp_compiler.has_header('nlohmann/json.hpp')
nlohmann_json = declare_dependency()
else
nlohmann_json_proj = subproject('nlohmann', required: true)
nlohmann_json = nlohmann_json_proj.get_variable('nlohmann_json_dep')
endif
libsystemd_pkg = dependency('libsystemd')
zatar_dep = dependency('zatar')
grpc_redfish_deps = [
abseil_deps,
gpr_deps,
grpc_deps,
grpcpp_deps,
protobuf_deps,
grpcpp_reflection,
gmi_protos_dep,
libsystemd_pkg,
nlohmann_json,
one_dep,
openssl,
zatar_dep,
]
grpc_redfish_include = include_directories('.')
grpc_redfish_lib = static_library(
'grpc_redfish',
'bmcweb_authorizer_singleton.cc',
'subscription_tracker.cc',
'config_generator.cc',
'config_parser.cc',
'json_utils.cc',
'oauth_utils.cc',
'redfish_authorizer.cc',
'redfish_privileges.cc',
'redfish_entity_trie.cc',
'redfish_entity_trie_node.cc',
'redfish_subtree_privileges_trie_node.cc',
'override.cc',
'subordinate_override.cc',
'resource_uri_override.cc',
'authorizer_enums.cc',
authz_proto_gen,
redfish_v1_proto_gen,
grpc_redfish_gen,
dependencies: grpc_redfish_deps,
include_directories: [grpc_redfish_include],
cpp_args: ['-Wno-error'],
)
grpc_redfish_dep = declare_dependency(
link_with: [grpc_redfish_lib],
include_directories: [grpc_redfish_include],
dependencies: grpc_redfish_deps,
)
bmcweb_dependencies += grpc_redfish_dep
executable(
'config_generator',
'config_generator_main.cc',
dependencies: [grpc_redfish_dep],
install: true,
)
executable(
'authz_server',
'authz_server_main.cc',
'authz_server.cc',
authz_proto_gen,
oauth_gen,
dependencies: [grpc_redfish_dep],
install: true,
)
systemd_dep = dependency('systemd')
systemd_system_unitdir = systemd_dep.get_variable(
pkgconfig: 'systemdsystemunitdir')
conf_data = configuration_data()
conf_data.set('extra_service_flags', get_option('extra-service-flags'))
configure_file(
input: 'authz_server.service.in',
output: 'authz_server.service',
configuration: conf_data,
install: true,
install_dir: systemd_system_unitdir,
)