[{"id":14283,"web_url":"https://patchwork.libcamera.org/comment/14283/","msgid":"<X9zZQle9czeTrqqn@wyvern>","date":"2020-12-18T16:30:58","subject":"Re: [libcamera-devel] [PATCH v5 08/23] meson: ipa,\n\tproxy: Generate headers and proxy with mojo","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Paul,\n\nThanks for your patch.\n\nOn 2020-12-05 19:30:51 +0900, Paul Elder wrote:\n> Run mojo from meson to generate the header, serializer, and proxy files\n> for every pipeline's mojom data definition file.\n> \n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\n> \n> ---\n> No change in v5\n> \n> Changes in v4:\n> - rename module_generated.h.tmpl to module_ipa_interface.h.tmpl\n> - rename module_serializer.h.tmpl to module_ipa_serializer.h.tmpl\n> - rename libcamera_generated headers to libcamera_generated_ipa_headers\n>   in meson\n> \n> Changes in v3:\n> - change parser path to our wrapper parser script, instead of running\n>   mojo's directly\n> \n> Changes in v2:\n> - clean up loops\n> - remove non-literal keys in maps\n> - move loading the mojom scripts to utils/\n> - declare the template files in meson\n> - add the generated headers into libcamera_generated_headers instead of\n>   libcamera_internal_headers\n> - add libcamera_generated_headers to libcamera_sources\n> ---\n>  include/libcamera/ipa/meson.build             | 78 +++++++++++++++++++\n>  src/libcamera/meson.build                     |  1 +\n>  src/libcamera/proxy/meson.build               | 18 +++++\n>  src/libcamera/proxy/worker/meson.build        | 19 ++++-\n>  .../libcamera_templates/meson.build           | 11 +++\n>  utils/ipc/generators/meson.build              |  3 +\n>  utils/ipc/meson.build                         | 13 ++++\n>  7 files changed, 141 insertions(+), 2 deletions(-)\n>  create mode 100644 utils/ipc/generators/libcamera_templates/meson.build\n>  create mode 100644 utils/ipc/generators/meson.build\n> \n> diff --git a/include/libcamera/ipa/meson.build b/include/libcamera/ipa/meson.build\n> index 508c6bd1..d7a2b6b2 100644\n> --- a/include/libcamera/ipa/meson.build\n> +++ b/include/libcamera/ipa/meson.build\n> @@ -8,3 +8,81 @@ libcamera_ipa_headers = files([\n>  \n>  install_headers(libcamera_ipa_headers,\n>                  subdir: join_paths(libcamera_include_dir, 'ipa'))\n> +\n> +#\n> +# Prepare IPA/IPC generation components\n> +#\n> +\n> +ipa_mojom_files = []\n> +\n> +ipa_mojoms = []\n> +\n> +#\n> +# Generate headers from templates.\n> +#\n> +\n> +libcamera_generated_ipa_headers = []\n> +\n> +foreach file : ipa_mojom_files\n> +    name = file.split('.')[0]\n> +\n> +    # {pipeline}.mojom-module\n> +    mojom = custom_target(file.split('.')[0] + '_mojom_module',\n> +                          input : file,\n> +                          output : file + '-module',\n> +                          command : [\n> +                              mojom_parser,\n> +                              '--output-root', meson.build_root(),\n> +                              '--input-root', meson.source_root(),\n> +                              '--mojoms', '@INPUT@'\n> +                          ])\n> +\n> +    # {pipeline}_generated.h\n> +    header = custom_target(name + '_ipa_interface_h',\n> +                           input : mojom,\n> +                           output : name + '_ipa_interface.h',\n> +                           depends : mojom_templates,\n> +                           command : [\n> +                               mojom_generator, 'generate',\n> +                               '-g', 'libcamera',\n> +                               '--bytecode_path', mojom_templates_dir,\n> +                               '--libcamera_generate_header',\n> +                               '--libcamera_output_path=@OUTPUT@',\n> +                               './' +'@INPUT@'\n> +                           ])\n> +\n> +    # {pipeline}_serializer.h\n> +    serializer = custom_target(name + '_ipa_serializer_h',\n> +                               input : mojom,\n> +                               output : name + '_ipa_serializer.h',\n> +                               depends : mojom_templates,\n> +                               command : [\n> +                                   mojom_generator, 'generate',\n> +                                   '-g', 'libcamera',\n> +                                   '--bytecode_path', mojom_templates_dir,\n> +                                   '--libcamera_generate_serializer',\n> +                                   '--libcamera_output_path=@OUTPUT@',\n> +                                   './' +'@INPUT@'\n> +                               ])\n> +\n> +    # ipa_proxy_{pipeline}.h\n> +    proxy_header = custom_target(name + '_proxy_h',\n> +                                 input : mojom,\n> +                                 output : 'ipa_proxy_' + name + '.h',\n> +                                 depends : mojom_templates,\n> +                                 command : [\n> +                                     mojom_generator, 'generate',\n> +                                     '-g', 'libcamera',\n> +                                     '--bytecode_path', mojom_templates_dir,\n> +                                     '--libcamera_generate_proxy_h',\n> +                                     '--libcamera_output_path=@OUTPUT@',\n> +                                     './' +'@INPUT@'\n> +                                 ])\n> +\n> +    ipa_mojoms += {\n> +        'name': name,\n> +        'mojom': mojom,\n> +    }\n> +\n> +    libcamera_generated_ipa_headers += [header, serializer, proxy_header]\n> +endforeach\n> diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\n> index cd3cf9e3..f7f3627c 100644\n> --- a/src/libcamera/meson.build\n> +++ b/src/libcamera/meson.build\n> @@ -59,6 +59,7 @@ libcamera_sources = files([\n>  ])\n>  \n>  libcamera_sources += libcamera_public_headers\n> +libcamera_sources += libcamera_generated_ipa_headers\n>  libcamera_sources += libcamera_tracepoint_header\n>  \n>  includes = [\n> diff --git a/src/libcamera/proxy/meson.build b/src/libcamera/proxy/meson.build\n> index bd804750..ac68ad08 100644\n> --- a/src/libcamera/proxy/meson.build\n> +++ b/src/libcamera/proxy/meson.build\n> @@ -4,3 +4,21 @@ libcamera_sources += files([\n>      'ipa_proxy_linux.cpp',\n>      'ipa_proxy_thread.cpp',\n>  ])\n> +\n> +# generate ipa_proxy_{pipeline}.cpp\n> +foreach mojom : ipa_mojoms\n> +    proxy = custom_target(mojom['name'] + '_proxy_cpp',\n> +                          input : mojom['mojom'],\n> +                          output : 'ipa_proxy_' + mojom['name'] + '.cpp',\n> +                          depends : [mojom_templates],\n> +                          command : [\n> +                              mojom_generator, 'generate',\n> +                              '-g', 'libcamera',\n> +                              '--bytecode_path', mojom_templates_dir,\n> +                              '--libcamera_generate_proxy_cpp',\n> +                              '--libcamera_output_path=@OUTPUT@',\n> +                              './' + '@INPUT@'\n> +                          ])\n> +\n> +    libcamera_sources += proxy\n> +endforeach\n> diff --git a/src/libcamera/proxy/worker/meson.build b/src/libcamera/proxy/worker/meson.build\n> index ac0310a7..8e0b978a 100644\n> --- a/src/libcamera/proxy/worker/meson.build\n> +++ b/src/libcamera/proxy/worker/meson.build\n> @@ -6,8 +6,23 @@ ipa_proxy_sources = [\n>  \n>  proxy_install_dir = join_paths(get_option('libexecdir'), 'libcamera')\n>  \n> -foreach t : ipa_proxy_sources\n> -    proxy = executable(t[0], t[1],\n> +# generate ipa_proxy_{pipeline}_worker.cpp\n> +foreach mojom : ipa_mojoms\n> +    worker = custom_target(mojom['name'] + '_proxy_worker',\n> +                           input : mojom['mojom'],\n> +                           output : 'ipa_proxy_' + mojom['name'] + '_worker.cpp',\n> +                           depends : [mojom_templates],\n> +                           command : [\n> +                               mojom_generator, 'generate',\n> +                               '-g', 'libcamera',\n> +                               '--bytecode_path', mojom_templates_dir,\n> +                               '--libcamera_generate_proxy_worker',\n> +                               '--libcamera_output_path=@OUTPUT@',\n> +                               './' + '@INPUT@'\n> +                           ])\n> +\n> +    proxy = executable('ipa_proxy_' + mojom['name'],\n> +                       [worker, libcamera_generated_ipa_headers],\n>                         install : true,\n>                         install_dir : proxy_install_dir,\n>                         dependencies : libcamera_dep)\n> diff --git a/utils/ipc/generators/libcamera_templates/meson.build b/utils/ipc/generators/libcamera_templates/meson.build\n> new file mode 100644\n> index 00000000..d7c9dea7\n> --- /dev/null\n> +++ b/utils/ipc/generators/libcamera_templates/meson.build\n> @@ -0,0 +1,11 @@\n> +# SPDX-License-Identifier: CC0-1.0\n> +\n> +mojom_template_files = files([\n> +    'module_ipa_interface.h.tmpl',\n> +    'module_ipa_proxy.cpp.tmpl',\n> +    'module_ipa_proxy.h.tmpl',\n> +    'module_ipa_proxy_worker.cpp.tmpl',\n> +    'module_ipa_serializer.h.tmpl',\n> +    'proxy_functions.tmpl',\n> +    'serializer.tmpl',\n> +])\n> diff --git a/utils/ipc/generators/meson.build b/utils/ipc/generators/meson.build\n> new file mode 100644\n> index 00000000..504f1a46\n> --- /dev/null\n> +++ b/utils/ipc/generators/meson.build\n> @@ -0,0 +1,3 @@\n> +# SPDX-License-Identifier: CC0-1.0\n> +\n> +subdir('libcamera_templates')\n> diff --git a/utils/ipc/meson.build b/utils/ipc/meson.build\n> index 59f097f0..4a41b9c1 100644\n> --- a/utils/ipc/meson.build\n> +++ b/utils/ipc/meson.build\n> @@ -1,3 +1,16 @@\n>  # SPDX-License-Identifier: CC0-1.0\n>  \n> +subdir('generators')\n> +\n>  py_modules += ['jinja2', 'ply']\n> +\n> +mojom_parser = find_program('./parser.py')\n> +\n> +mojom_generator = find_program('./generate.py')\n> +\n> +mojom_templates = custom_target('mojom_templates',\n> +                                input : mojom_template_files,\n> +                                output : 'libcamera_templates.zip',\n> +                                command : [mojom_generator, '-o', '@OUTDIR@', 'precompile'])\n> +\n> +mojom_templates_dir = meson.current_build_dir()\n> -- \n> 2.27.0\n> \n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 77A1BC0F1A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 18 Dec 2020 16:31:05 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DAF5B61597;\n\tFri, 18 Dec 2020 17:31:04 +0100 (CET)","from mail-lf1-x143.google.com (mail-lf1-x143.google.com\n\t[IPv6:2a00:1450:4864:20::143])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A8FB86052C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 18 Dec 2020 17:31:03 +0100 (CET)","by mail-lf1-x143.google.com with SMTP id o19so6962061lfo.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 18 Dec 2020 08:31:03 -0800 (PST)","from localhost ([185.224.57.161]) by smtp.gmail.com with ESMTPSA id\n\tm24sm1069933ljj.62.2020.12.18.08.31.01\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tFri, 18 Dec 2020 08:31:01 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=ragnatech-se.20150623.gappssmtp.com\n\theader.i=@ragnatech-se.20150623.gappssmtp.com\n\theader.b=\"KTdA1PQ3\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to;\n\tbh=B0eAKFEVj3lV0U140NQNWCJcAHxeZvvWGt4dywoEWAo=;\n\tb=KTdA1PQ3RLJ8M1q3W1kYD0OhqS+FrmMWbGYuKzmpz6U7Y20i2wA3nLYWNm+37OajnA\n\t3B1ESvpUxGQjfHNnmiQ3QyCwlYQnibwnfeUYCD6AQE9zbdX1bMLAI8zq+bRbSuG3Q7Fb\n\tULabdEPg4gvWeqU85wSb0MQ3hA9odbZQF3YvuZIp4DcML0UZwLUsCRwQaIabJdVUy/Ss\n\tBKu16tghg0YiXRUehoNX/9E9P4HOUzphWOiODZn+E0jU8z4Fzxbd+R1MXUMhmKLOsV4l\n\tkzt5lrMkAtODNYHYzW8bRxw0uk5FLH0JIMzCTRvLzKUu7qj9QppNoiE2DqW4pUyeEz0F\n\thuFQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to;\n\tbh=B0eAKFEVj3lV0U140NQNWCJcAHxeZvvWGt4dywoEWAo=;\n\tb=eUFs7uogfKh0A3UbDNKRbVWO5FQ5fsy/2261Bi0IIWSmEB9u+BtQkprkdExzDHen4Q\n\trwLZXu4eUnQrDZNTvIWVe0JW9a4EGRk4JkIvZQ54eUXcezUaMeLvIXQoH/vlk0TGaKH/\n\taySeA/v8Fcw8ns4+VNB1WozoHvGsJcnU+0CFWC7bWJKuRS2nIEFToHOgIUKOeqKQ6yOy\n\t4eiwDFaCcglXnchDbhQpT73lYq0AoZoxjxDomlA/Me9yhobOY6+7Hn/IAEN/FXfzN+4z\n\t0IlqJQrNI2WUmwmNo+E6MB/Jqi9VA4Vm84oVQeT10mOtg/wUgu6YlNLfece49qUg/gPT\n\tOwmw==","X-Gm-Message-State":"AOAM5308nNHU+XfXmWujZgi3nFlf9EerX9RI7BRsbuAUjwPtNK8in6q6\n\tkfuIL5v4DGct9YBsOFDUkFMpNk27xZIc7nLz","X-Google-Smtp-Source":"ABdhPJzoIeRSuXw8tVpLjaRQ+4MGD0TDL8ZqlzeHlwIWZVbRrijt4/OiDlbnGFtJpFOBpDpICqygbg==","X-Received":"by 2002:a2e:7a07:: with SMTP id v7mr2122157ljc.119.1608309062906;\n\tFri, 18 Dec 2020 08:31:02 -0800 (PST)","Date":"Fri, 18 Dec 2020 17:30:58 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Paul Elder <paul.elder@ideasonboard.com>","Message-ID":"<X9zZQle9czeTrqqn@wyvern>","References":"<20201205103106.242080-1-paul.elder@ideasonboard.com>\n\t<20201205103106.242080-9-paul.elder@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20201205103106.242080-9-paul.elder@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v5 08/23] meson: ipa,\n\tproxy: Generate headers and proxy with mojo","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]