initial change to grpc
[apps/homescreen.git] / homescreen / meson.build
1 cpp = meson.get_compiler('cpp')
2 qt5_dep = dependency('qt5', modules: ['Qml', 'Quick', 'Gui', 'Core'])
3 grpcpp_reflection_dep = cpp.find_library('grpc++_reflection')
4 protoc = find_program('protoc')
5 grpc_cpp = find_program('grpc_cpp_plugin')
6
7 dep_wayland_client = dependency('wayland-client', version: '>= 1.20.0')
8 dep_qtappfw = [
9     dependency('qtappfw-weather'),
10     dependency('qtappfw-network'),
11     dependency('qtappfw-bt'),
12     dependency('qtappfw-vehicle-signals'),
13     dependency('qtappfw-applauncher')
14 ]
15
16 protoc_gen = generator(protoc, \
17                        output : ['@BASENAME@.pb.cc', '@BASENAME@.pb.h'],
18                        arguments : ['--proto_path=@CURRENT_SOURCE_DIR@/src',
19                          '--cpp_out=@BUILD_DIR@',
20                          '@INPUT@'])
21
22 generated_protoc_sources = protoc_gen.process('src/agl_shell.proto')
23
24 grpc_gen = generator(protoc, \
25                      output : ['@BASENAME@.grpc.pb.cc', '@BASENAME@.grpc.pb.h'],
26                      arguments : ['--proto_path=@CURRENT_SOURCE_DIR@/src',
27                        '--grpc_out=@BUILD_DIR@',
28                        '--plugin=protoc-gen-grpc=' + grpc_cpp.path(),
29                        '@INPUT@'])
30 generated_grpc_sources = grpc_gen.process('src/agl_shell.proto')
31
32 grpc_deps = [
33     dependency('protobuf'),
34     dependency('grpc'),
35     dependency('grpc++'),
36     grpcpp_reflection_dep,
37 ]
38
39 qt_defines = []
40 qpa_header_path = join_paths(qt5_dep.version(), 'QtGui')
41 qpa_header = join_paths(qpa_header_path, 'qpa/qplatformnativeinterface.h')
42 # we pass this QT_QPA_HEADER straight in the code as there's no easy
43 # way to pass the correct header
44 if cpp.has_header(qpa_header, dependencies : qt5_dep)
45   qt_defines += [ '-DQT_QPA_HEADER=<@0@>'.format(qpa_header) ]
46   message('Found QtGui QPA header in ' + qpa_header_path)
47 endif
48
49 dep_scanner = dependency('wayland-scanner')
50 prog_scanner = find_program(dep_scanner.get_pkgconfig_variable('wayland_scanner'))
51 agl_compositor_dep = dependency('agl-compositor-0.0.20-protocols')
52 dir_agl_compositor_base = agl_compositor_dep.get_pkgconfig_variable('pkgdatadir')
53
54 homescreen_dep = [
55     qt5_dep,
56     grpc_deps,
57     dep_wayland_client,
58     dep_qtappfw,
59 ]
60
61 homescreen_resources = [
62   'qml/images/MediaPlayer/mediaplayer.qrc',
63   'qml/images/MediaMusic/mediamusic.qrc',
64   'qml/images/Weather/weather.qrc',
65   'qml/images/Shortcut/shortcut.qrc',
66   'qml/images/Status/status.qrc',
67   'qml/images/images.qrc',
68   'qml/qml.qrc'
69 ]
70
71 resource_files = qt5.compile_resources(sources: homescreen_resources)
72
73 protocols = [
74         [ 'agl-shell', 'agl-compositor' ],
75 ]
76
77 foreach proto: protocols
78         proto_name = proto[0]
79         if proto[1] == 'agl-compositor'
80                 base_file = proto_name
81                 xml_path = join_paths(dir_agl_compositor_base, '@0@.xml'.format(base_file))
82         endif
83
84         foreach output_type: [ 'client-header', 'server-header', 'private-code' ]
85                 if output_type == 'client-header'
86                         output_file = '@0@-client-protocol.h'.format(base_file)
87                 elif output_type == 'server-header'
88                         output_file = '@0@-server-protocol.h'.format(base_file)
89                 else
90                         output_file = '@0@-protocol.c'.format(base_file)
91                         if dep_scanner.version().version_compare('< 1.14.91')
92                                 output_type = 'code'
93                         endif
94                 endif
95
96                 var_name = output_file.underscorify()
97                 target = custom_target(
98                         '@0@ @1@'.format(base_file, output_type),
99                         command: [ prog_scanner, output_type, '@INPUT@', '@OUTPUT@' ],
100                         input: xml_path,
101                         output: output_file,
102                 )
103                 message('protocol name is ' + var_name)
104                 set_variable(var_name, target)
105         endforeach
106 endforeach
107
108 homescreen_src_headers = [
109   'src/applicationlauncher.h',
110   'src/mastervolume.h',
111   'src/statusbarmodel.h',
112   'src/statusbarserver.h',
113   'src/homescreenhandler.h',
114   'src/AglShellManager.h',
115   'src/Worker.h',
116   'src/shell.h'
117 ]
118
119 moc_files = qt5.compile_moc(headers: homescreen_src_headers,
120                             dependencies: qt5_dep)
121
122 homescreen_src = [
123   'src/shell.cpp',
124   'src/AglShellManager.cpp',
125   'src/statusbarserver.cpp',
126   'src/statusbarmodel.cpp',
127   'src/applicationlauncher.cpp',
128   'src/mastervolume.cpp',
129   'src/homescreenhandler.cpp',
130   'src/main.cpp',
131   generated_protoc_sources,
132   generated_grpc_sources,
133   agl_shell_client_protocol_h,
134   agl_shell_protocol_c
135 ]
136
137 executable('homescreen', homescreen_src, resource_files, moc_files,
138             cpp_args: qt_defines,
139             dependencies : homescreen_dep,
140             install: true)