Skip to content
Snippets Groups Projects
meson.build 2.38 KiB
Newer Older
Clemens Paumgarten's avatar
Clemens Paumgarten committed
project('mcc', 'c',
    default_options: [ 'buildtype=release',
                       'c_std=c11',
                       'cpp_std=c++14',
                       'warning_level=3' ],
    meson_version: '>=0.44.0'
)

# ------------------------------------------------------------------ Generators

flex = find_program('flex')
lgen = generator(flex,
                 output: ['@BASENAME@.c', '@BASENAME@.h'],
                 arguments: [ '--outfile=@OUTPUT0@',
                              '--header-file=@OUTPUT1@',
                              '@INPUT@' ])

bison = find_program('bison')
pgen = generator(bison,
                 output: ['@BASENAME@.tab.c', '@BASENAME@.tab.h'],
                 arguments: [ '-Wall',
                              '--output=@OUTPUT0@',
                              '--defines=@OUTPUT1@',
                              '@INPUT@' ])


# --------------------------------------------------------------------- Library

mcc_inc = include_directories('include')

mcc_src = [
            'src/utils/dynamic_array.c',
            'src/utils/printer.c',
            'src/utils/mcc_scope.c',
            'src/ast.c',
            'src/ast_print.c',
            'src/ast_visit.c',
            'src/parser.c',
            'src/symbol_table.c',
            'src/symbol_table_validate.c',
            'src/symbol_table_parse.c',
            'src/symbol_table_semantic_error.c',
            'src/symbol_table_print.c',
            lgen.process('src/scanner.l'),
            pgen.process('src/parser.y') ]

mcc_lib = library('mcc', mcc_src,
                  c_args: '-D_POSIX_C_SOURCE=200809L',
                  include_directories: [mcc_inc, include_directories('src')])

# ---------------------------------------------------------------- Applications

mcc_apps = [ 'mcc', 'mc_ast_to_dot', 'mc_symbol_table', 'mc_type_check_trace' ]
Clemens Paumgarten's avatar
Clemens Paumgarten committed

foreach app : mcc_apps
    executable(app, 'app/' + app + '.c',
               include_directories: mcc_inc,
               link_with: mcc_lib)
endforeach

# ----------------------------------------------------------------------- Tests

mcc_tests = [ 'parser_test', 'symbol_table_test' ]

cutest_inc = include_directories('vendor/cutest')

foreach test : mcc_tests
    t = executable(test, 'test/unit/' + test + '.c', 'vendor/cutest/CuTest.c',
                   include_directories: [mcc_inc, cutest_inc],
                   link_with: mcc_lib)
    test(test, t)
endforeach