Files
zinnia/meson.build
T
2026-07-20 01:53:04 +02:00

120 lines
2.6 KiB
Meson

project(
'zinnia',
license: 'MIT',
version: '0.1.0',
meson_version: '>=1.3.0',
default_options: [
'c_std=gnu23',
'werror=true',
'warning_level=2',
'strip=true',
],
)
if get_option('headers_only')
install_subdir('include/uapi', install_dir: get_option('includedir'))
pkg = import('pkgconfig')
pkg.generate(name: 'zinnia', description: 'Zinnia user API')
subdir_done()
endif
add_languages('c', native: false)
# Check if we're using a sane compiler.
c_compiler = meson.get_compiler('c')
# Check for LP64
assert(c_compiler.sizeof('short') == 2)
assert(c_compiler.sizeof('int') == 4)
assert(c_compiler.sizeof('long') == 8)
assert(c_compiler.sizeof('long long') == 8)
# We require a compiler that supports the GNU C dialect.
assert(c_compiler.has_define('__GNUC__'))
add_project_arguments(
'-Wno-unused',
'-Wno-unused-parameter',
'-fno-stack-protector',
'-ffunction-sections',
'-fdata-sections',
language: 'c',
)
add_project_link_arguments(
'-znoexecstack',
'-Wl,--gc-sections',
'-Wl,--build-id=none',
language: 'c',
)
if target_machine.cpu_family() == 'x86_64'
add_project_arguments('-masm=intel', language: 'c')
endif
common_includes = include_directories('include')
cfg = configuration_data()
cfg.set_quoted('ZINNIA_VERSION', meson.project_version())
cfg.set_quoted('ZINNIA_ARCH', target_machine.cpu_family())
cfg.set_quoted('ZINNIA_COMPILER_ID', c_compiler.get_id() + ' ' + c_compiler.version())
cfg.set_quoted('ZINNIA_LINKER_ID', c_compiler.get_linker_id())
kernel_c_args = [
'-ffreestanding',
'-nostdinc', # We provide our own headers.
'-fno-stack-protector',
'-fno-omit-frame-pointer',
'-fno-pie',
]
kernel_lds = meson.current_source_dir() / 'boot' / 'kernel.ld'
kernel_link_args = [
'-ffreestanding',
'-nostdlib',
'-static',
'-T' + kernel_lds,
]
kernel_includes = [
include_directories(
'arch' / target_machine.cpu_family() / 'include',
),
]
kernel_sources = []
configure_file(configuration: cfg, output: 'config.h')
# Goes first so we can add arch-specific flags to drivers.
subdir('arch' / target_machine.cpu_family())
subdir('device')
subdir('fs')
subdir('boot')
subdir('mem')
subdir('core')
subdir('syscalls')
subdir('lib')
executable(
'zinnia',
include_directories: [
common_includes,
kernel_includes,
uacpi_includes,
],
c_args: kernel_c_args,
link_args: kernel_link_args,
link_depends: kernel_lds,
sources: [
kernel_sources,
uacpi_sources,
],
install: true,
install_dir: '/boot',
)