Sets up a barebones meson.build that handles: 1. Exposing command for converting .c files to LLVM IR by looking at compile_commads.json;
2. Finding LLVM and verifying the LLVM version manually by running llvm-config, needed for dealing with multiple LLVM versions in a sane way; 3. Building of helper-to-tcg. A meson option is added to specify the path to llvm-config. Signed-off-by: Anton Johansson <a...@rev.ng> --- subprojects/helper-to-tcg/meson.build | 70 +++++++++++++++++++++ subprojects/helper-to-tcg/meson_options.txt | 2 + 2 files changed, 72 insertions(+) create mode 100644 subprojects/helper-to-tcg/meson.build create mode 100644 subprojects/helper-to-tcg/meson_options.txt diff --git a/subprojects/helper-to-tcg/meson.build b/subprojects/helper-to-tcg/meson.build new file mode 100644 index 0000000000..af593ccdfe --- /dev/null +++ b/subprojects/helper-to-tcg/meson.build @@ -0,0 +1,70 @@ +## +## Copyright(c) 2024 rev.ng Labs Srl. All Rights Reserved. +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, see <http://www.gnu.org/licenses/>. +## + +project('helper-to-tcg', ['cpp'], + meson_version: '>=0.63.0', + version: '0.7', + default_options: ['cpp_std=none', 'optimization=2']) + +python = import('python').find_installation() + +# Find LLVM using llvm-config manually. Needed as meson struggles when multiple +# versions of LLVM are installed on the same system (always returns the most +# recent). +llvm_config = get_option('llvm_config_path') +cpp_args = [run_command(llvm_config, '--cxxflags').stdout().strip().split()] +bindir = run_command(llvm_config, '--bindir').stdout().strip() +ldflags = run_command(llvm_config, '--ldflags').stdout().strip().split() +libs = run_command(llvm_config, '--libs').stdout().strip().split() +syslibs = run_command(llvm_config, '--system-libs').stdout().strip().split() +incdir = run_command(llvm_config, '--includedir').stdout().strip().split() +version = run_command(llvm_config, '--version').stdout().strip() +version_major = version.split('.')[0].to_int() + +# Check LLVM version manually +if version_major < 10 or version_major > 14 + error('LLVM version', version, 'not supported.') +endif + +sources = [ +] + +clang = bindir / 'clang' +llvm_link = bindir / 'llvm-link' + +get_llvm_ir_cmd = [python, meson.current_source_dir() / 'get-llvm-ir.py', + '--compile-commands', 'compile_commands.json', + '--clang', clang, + '--llvm-link', llvm_link] + +# NOTE: Add -Wno-template-id-cdtor for GCC versions >= 14. This warning is +# related to a change in the C++ standard in C++20, that also applies to C++14 +# for some reason. See defect report DR2237 and commit +# https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=4b38d56dbac6742b038551a36ec80200313123a1 +# (temporary) +compiler_info = meson.get_compiler('cpp') +compiler = compiler_info.get_id() +compiler_version = compiler_info.version().split('-').get(0) +compiler_version_major = compiler_version.split('.').get(0) +if compiler == 'gcc' and compiler_version_major.to_int() >= 14 + cpp_args += ['-Wno-template-id-cdtor', '-Wno-missing-template-keyword'] +endif + +pipeline = executable('helper-to-tcg', sources, + include_directories: ['passes', './', 'include'] + [incdir], + link_args: [ldflags] + [libs] + [syslibs], + cpp_args: cpp_args) diff --git a/subprojects/helper-to-tcg/meson_options.txt b/subprojects/helper-to-tcg/meson_options.txt new file mode 100644 index 0000000000..8a4b28a585 --- /dev/null +++ b/subprojects/helper-to-tcg/meson_options.txt @@ -0,0 +1,2 @@ +option('llvm_config_path', type : 'string', value : 'llvm-config', + description: 'override default llvm-config used for finding LLVM') -- 2.45.2