build(root): added initial meson build system implimentation and mk script

we will use meson as the build system for this project. Added a rough outline of this which builds source, libraries, and links them to tests (along with the google test library for testing). meson will be setup and compiled with ./mk.
This commit is contained in:
2025-01-19 07:38:58 -05:00
parent b7b849da45
commit 7d6062b6c1
5 changed files with 63 additions and 0 deletions

9
meson.build Normal file
View File

@@ -0,0 +1,9 @@
project('4DSSE', 'cpp', version: '0.0.1a', default_options: ['cpp_std=c++23'])
# Add default visibility for all C++ targets
add_project_arguments('-fvisibility=default', language: 'cpp')
add_project_arguments('-Wl,-export_dynamic', language: 'cpp')
subdir('src')
subdir('tests')

9
mk Executable file
View File

@@ -0,0 +1,9 @@
#!/bin/bash
# if build directory is present, remove it
if [ -d "build" ]; then
rm -rf build
fi
meson setup build
meson compile -C build

18
src/meson.build Normal file
View File

@@ -0,0 +1,18 @@
# Define the library
dobj_sources = files(
'dobj/private/Metadata.cpp'
)
dobj_headers = files(
'dobj/public/Metadata.h'
)
# Define the libdobj library so it can be linked against by other parts of the build system
libdobj = library('dobj',
dobj_sources,
include_directories: include_directories('dobj/public'),
cpp_args: ['-fvisibility=default'],
install : true)
# Make headers accessible
install_headers(dobj_headers, subdir : '4DSSE/dobj')

22
tests/dobj/meson.build Normal file
View File

@@ -0,0 +1,22 @@
# Test files for dobj
test_sources = [
'MetadataTest.cpp'
]
foreach test_file : test_sources
exe_name = test_file.split('.')[0]
message('Building test: ' + exe_name)
# Create an executable target for each test
test_exe = executable(
exe_name,
test_file,
dependencies: gtest_dep,
include_directories: include_directories('../../src/dobj/public'),
link_with: libdobj, # Link the dobj library
install_rpath: '@loader_path/../../src' # Ensure runtime library path resolves correctly
)
# Add the executable as a test
test(exe_name, test_exe)
endforeach

5
tests/meson.build Normal file
View File

@@ -0,0 +1,5 @@
# Google Test dependency
gtest_dep = dependency('gtest', main: true, required : true)
# Subdirectory for dobj tests
subdir('dobj')