This commit is contained in:
Mars 2025-05-11 01:43:10 -04:00
parent fc69565f4d
commit 9aa2e44537
6 changed files with 397 additions and 62 deletions

View file

@ -4,8 +4,8 @@
project(
'draconis++',
'cpp',
version : '0.1.0',
default_options : [
version: '0.1.0',
default_options: [
'default_library=static',
'buildtype=debugoptimized',
'b_vscrt=mt',
@ -15,6 +15,11 @@ project(
],
)
add_project_arguments(
'-DDRACONISPLUSPLUS_VERSION="' + meson.project_version() + '"',
language: ['cpp', 'objcpp'],
)
cpp = meson.get_compiler('cpp')
host_system = host_machine.system()
@ -35,13 +40,13 @@ common_warning_flags = [
]
common_cpp_flags = {
'common' : [
'common': [
'-fno-strict-enums',
'-fvisibility=hidden',
'-fvisibility-inlines-hidden',
'-std=c++26',
],
'msvc' : [
'msvc': [
'-DNOMINMAX', '/MT',
'/Zc:__cplusplus',
'/Zc:preprocessor',
@ -49,20 +54,20 @@ common_cpp_flags = {
'/external:anglebrackets',
'/std:c++latest',
],
'unix_extra' : '-march=native',
'windows_extra' : '-DCURL_STATICLIB',
'unix_extra': '-march=native',
'windows_extra': '-DCURL_STATICLIB',
}
# Configure Objective-C++ for macOS
if host_system == 'darwin'
add_languages('objcpp', native : false)
add_languages('objcpp', native: false)
objcpp = meson.get_compiler('objcpp')
objcpp_flags = common_warning_flags + [
'-std=c++26',
'-fvisibility=hidden',
'-fvisibility-inlines-hidden',
]
add_project_arguments(objcpp.get_supported_arguments(objcpp_flags), language : 'objcpp')
add_project_arguments(objcpp.get_supported_arguments(objcpp_flags), language: 'objcpp')
endif
# Apply C++ compiler arguments
@ -80,13 +85,13 @@ else
endif
endif
add_project_arguments(common_cpp_args, language : 'cpp')
add_project_arguments(common_cpp_args, language: 'cpp')
# --------------------- #
# Include Directories #
# --------------------- #
project_internal_includes = include_directories('src')
project_public_includes = include_directories('include', is_system : true)
project_public_includes = include_directories('include', is_system: true)
# ------- #
# Files #
@ -94,22 +99,23 @@ project_public_includes = include_directories('include', is_system : true)
base_sources = files(
'src/Config/Config.cpp',
'src/Core/SystemData.cpp',
'src/Services/PackageCounting.cpp',
'src/Services/Weather/MetNoService.cpp',
'src/Services/Weather/OpenMeteoService.cpp',
'src/Services/Weather/OpenWeatherMapService.cpp',
'src/Services/PackageCounting.cpp',
'src/UI/UI.cpp',
'src/main.cpp',
)
platform_sources = {
'darwin' : ['src/OS/macOS.cpp', 'src/OS/macOS/bridge.mm'],
'dragonfly' : ['src/OS/bsd.cpp'],
'freebsd' : ['src/OS/bsd.cpp'],
'haiku' : ['src/OS/haiku.cpp'],
'linux' : ['src/OS/linux.cpp'],
'netbsd' : ['src/OS/bsd.cpp'],
'serenity' : ['src/OS/serenity.cpp'],
'windows' : ['src/OS/Windows.cpp'],
'darwin': ['src/OS/macOS.cpp', 'src/OS/macOS/bridge.mm'],
'dragonfly': ['src/OS/bsd.cpp'],
'freebsd': ['src/OS/bsd.cpp'],
'haiku': ['src/OS/haiku.cpp'],
'linux': ['src/OS/linux.cpp'],
'netbsd': ['src/OS/bsd.cpp'],
'serenity': ['src/OS/serenity.cpp'],
'windows': ['src/OS/Windows.cpp'],
}
sources = base_sources + files(platform_sources.get(host_system, []))
@ -118,9 +124,9 @@ sources = base_sources + files(platform_sources.get(host_system, []))
# Dependencies Config #
# --------------------- #
common_deps = [
dependency('libcurl', include_type : 'system', static : true),
dependency('tomlplusplus', include_type : 'system', static : true),
dependency('openssl', include_type : 'system', static : true, required : false),
dependency('libcurl', include_type: 'system', static: true),
dependency('tomlplusplus', include_type: 'system', static: true),
dependency('openssl', include_type: 'system', static: true, required: false),
]
# Platform-specific dependencies
@ -131,8 +137,8 @@ if host_system == 'darwin'
dependency('SQLiteCpp'),
dependency(
'appleframeworks',
modules : ['foundation', 'mediaplayer', 'systemconfiguration'],
static : true,
modules: ['foundation', 'mediaplayer', 'systemconfiguration'],
static: true,
),
dependency('iconv'),
]
@ -143,11 +149,11 @@ elif host_system == 'windows'
]
elif host_system != 'serenity' and host_system != 'haiku'
# Make dbus, x11, and wayland dependencies optional
dbus_dep = dependency('dbus-1', required : false)
xcb_dep = dependency('xcb', required : false)
xau_dep = dependency('xau', required : false)
xdmcp_dep = dependency('xdmcp', required : false)
wayland_dep = dependency('wayland-client', required : false)
dbus_dep = dependency('dbus-1', required: false)
xcb_dep = dependency('xcb', required: false)
xau_dep = dependency('xau', required: false)
xdmcp_dep = dependency('xdmcp', required: false)
wayland_dep = dependency('wayland-client', required: false)
platform_deps += [
dependency('SQLiteCpp'),
@ -156,15 +162,15 @@ elif host_system != 'serenity' and host_system != 'haiku'
if dbus_dep.found()
platform_deps += dbus_dep
add_project_arguments('-DHAVE_DBUS', language : 'cpp')
add_project_arguments('-DHAVE_DBUS', language: 'cpp')
endif
if xcb_dep.found() and xau_dep.found() and xdmcp_dep.found()
platform_deps += [xcb_dep, xau_dep, xdmcp_dep]
add_project_arguments('-DHAVE_XCB', language : 'cpp')
add_project_arguments('-DHAVE_XCB', language: 'cpp')
endif
if wayland_dep.found()
platform_deps += wayland_dep
add_project_arguments('-DHAVE_WAYLAND', language : 'cpp')
add_project_arguments('-DHAVE_WAYLAND', language: 'cpp')
endif
endif
@ -172,28 +178,28 @@ endif
ftxui_components = ['ftxui::screen', 'ftxui::dom', 'ftxui::component']
ftxui_dep = dependency(
'ftxui',
modules : ftxui_components,
include_type : 'system',
static : true,
required : false,
modules: ftxui_components,
include_type: 'system',
static: true,
required: false,
)
if not ftxui_dep.found()
ftxui_dep = declare_dependency(
dependencies : [
dependency('ftxui-dom', fallback : ['ftxui', 'dom_dep']),
dependency('ftxui-screen', fallback : ['ftxui', 'screen_dep']),
dependency('ftxui-component', fallback : ['ftxui', 'component_dep']),
dependencies: [
dependency('ftxui-dom', fallback: ['ftxui', 'dom_dep']),
dependency('ftxui-screen', fallback: ['ftxui', 'screen_dep']),
dependency('ftxui-component', fallback: ['ftxui', 'component_dep']),
],
)
endif
glaze_dep = dependency('glaze', include_type : 'system', required : false)
glaze_dep = dependency('glaze', include_type: 'system', required: false)
if not glaze_dep.found()
cmake = import('cmake')
glaze_proj = cmake.subproject('glaze')
glaze_dep = glaze_proj.dependency('glaze_glaze', include_type : 'system')
glaze_dep = glaze_proj.dependency('glaze_glaze', include_type: 'system')
endif
# Combine all dependencies
@ -219,9 +225,9 @@ endif
executable(
'draconis++',
sources,
include_directories : [project_internal_includes, project_public_includes],
objc_args : objc_args,
link_args : link_args,
dependencies : deps,
install : true,
include_directories: [project_internal_includes, project_public_includes],
objc_args: objc_args,
link_args: link_args,
dependencies: deps,
install: true,
)