diff options
-rw-r--r-- | .clant.json | 9 | ||||
-rw-r--r-- | .gitignore | 10 | ||||
-rw-r--r-- | .gitlab-ci.yml | 114 | ||||
-rw-r--r-- | .gitmodules | 51 | ||||
-rw-r--r-- | .includes.imp | 7 | ||||
m--------- | ingen | 0 | ||||
m--------- | jalv | 0 | ||||
m--------- | libs/ganv | 0 | ||||
m--------- | libs/lv2kit | 0 | ||||
m--------- | libs/raul | 0 | ||||
m--------- | machina | 0 | ||||
-rw-r--r-- | meson.build | 103 | ||||
-rw-r--r-- | meson_options.txt | 38 | ||||
m--------- | patchage | 0 | ||||
m--------- | plugins/blop.lv2 | 0 | ||||
m--------- | plugins/fomp.lv2 | 0 | ||||
m--------- | plugins/mda.lv2 | 0 | ||||
m--------- | subprojects/blop.lv2 | 0 | ||||
m--------- | subprojects/fomp.lv2 | 0 | ||||
m--------- | subprojects/ganv | 0 | ||||
m--------- | subprojects/ingen | 0 | ||||
m--------- | subprojects/jalv | 0 | ||||
m--------- | subprojects/lv2kit | 0 | ||||
m--------- | subprojects/machina | 0 | ||||
m--------- | subprojects/mda.lv2 | 0 | ||||
m--------- | subprojects/patchage | 0 | ||||
m--------- | subprojects/raul | 0 | ||||
-rwxr-xr-x | waf | 16 | ||||
m--------- | waflib | 0 | ||||
-rw-r--r-- | wscript | 72 |
30 files changed, 302 insertions, 118 deletions
diff --git a/.clant.json b/.clant.json new file mode 100644 index 0000000..1b7924e --- /dev/null +++ b/.clant.json @@ -0,0 +1,9 @@ +{ + "version": "1.0.0", + "mapping_files": [ + ".includes.imp", + "boost-1.64-all-private.imp", + "boost-1.64-all.imp", + "qt5_11.imp" + ] +} @@ -1,3 +1,7 @@ -build/** -.waf-* -.lock-waf* +# Copyright 2020-2023 David Robillard <d@drobilla.net> +# SPDX-License-Identifier: 0BSD OR ISC + +build/ +subprojects/packagecache/ +subprojects/sphinxygen-1.0.4/ +subprojects/sphinxygen.wrap diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..c618786 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,114 @@ +# Copyright 2019-2022 David Robillard <d@drobilla.net> +# SPDX-License-Identifier: 0BSD OR ISC + +stages: + - build + +variables: + GIT_SUBMODULE_STRATEGY: recursive + +default: + stage: build + image: lv2plugin/debian-x64 + script: + - meson setup build -Dwerror=true + - ninja -C build test + +dev: + stage: build + image: lv2plugin/debian-x64-big + script: + - meson setup build --wrap-mode=forcefallback -Dbuildtype=debug -Ddocs=disabled -Dwarning_level=3 -Dwerror=true + - ninja -C build test + - meson configure -Dbuildtype=release -Db_coverage=false build + - ninja -C build test + +static: + stage: build + image: lv2plugin/debian-x64-big + script: + - meson setup build --wrap-mode=forcefallback -Ddefault_library=static -Ddocs=disabled -Dwarning_level=3 -Dwerror=true + - ninja -C build test + +sanitize: + stage: build + image: lv2plugin/debian-x64-clang + script: + - meson setup build --wrap-mode=forcefallback -Db_lundef=false -Dbuildtype=plain -Ddocs=disabled -Dwarning_level=3 -Dwerror=true + - ninja -C build test + variables: + CC: "clang" + CXX: "clang++" + CFLAGS: "-fno-sanitize-recover=all -fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability" + CXXFLAGS: "-fno-sanitize-recover=all -fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability" + LDFLAGS: "-fno-sanitize-recover=all -fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability" + +# Linux distributions + +fedora: + stage: build + image: lv2plugin/fedora-dev + script: + - meson setup build --wrap-mode=forcefallback -Dbuildtype=plain -Dwarning_level=3 -Dwerror=true + - ninja -C build test + variables: + CFLAGS: -O2 -D_FORTIFY_SOURCE=2 + CXXFLAGS: -O2 -D_FORTIFY_SOURCE=2 + +# Linux Platforms + +arm32: + stage: build + image: lv2plugin/debian-arm32 + script: + - meson setup build --wrap-mode=forcefallback --cross-file=/usr/share/meson/cross/arm-linux-gnueabihf.ini -Dbuildtype=debug -Ddocs=disabled -Dwarning_level=3 -Dwerror=true + - ninja -C build test + - meson configure -Dbuildtype=release build + - ninja -C build test + +arm64: + stage: build + image: lv2plugin/debian-arm64 + script: + - meson setup build --wrap-mode=forcefallback --cross-file=/usr/share/meson/cross/aarch64-linux-gnu.ini -Dbuildtype=debug -Ddocs=disabled -Dwarning_level=3 -Dwerror=true + - ninja -C build test + - meson configure -Dbuildtype=release build + - ninja -C build test + +x32: + stage: build + image: lv2plugin/debian-x32 + script: + - meson setup build --cross-file=/usr/share/meson/cross/i686-linux-gnu.ini -Dbuildtype=debug -Dwarning_level=3 -Dwerror=true -Ddocs=disabled + - ninja -C build test + - meson configure -Dbuildtype=release build + - ninja -C build test + +# Non-Linux/Docker rows (not hosted) + +freebsd: + stage: build + tags: [freebsd,meson] + script: + - meson setup build --wrap-mode=forcefallback -Dbuildtype=debug -Dwarning_level=everything -Dwerror=true -Ddocs=disabled + - ninja -C build test + - meson configure -Dbuildtype=release build + - ninja -C build test + +mac: + stage: build + tags: [macos] + script: + - meson setup build --wrap-mode=forcefallback -Dbuildtype=debug -Ddocs=disabled -Dwarning_level=everything -Dwerror=true + - ninja -C build test + - meson configure -Dbuildtype=release build + - ninja -C build test + +win: + stage: build + tags: [windows,meson] + script: + - meson setup build --wrap-mode=forcefallback -Dbuildtype=debug -Ddocs=disabled -Dwarning_level=everything -Dwerror=true + - ninja -C build test + - meson configure -Dbuildtype=release build + - ninja -C build test diff --git a/.gitmodules b/.gitmodules index 0c93aef..502a6fe 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,33 +1,30 @@ [submodule "libs/lv2kit"] - path = libs/lv2kit - url = ../../lv2/lv2kit -[submodule "waflib"] - path = waflib - url = ../autowaf.git -[submodule "libs/raul"] - path = libs/raul - url = ../raul + path = subprojects/lv2kit + url = ../../lv2/lv2kit.git +[submodule "raul"] + path = subprojects/raul + url = ../raul.git [submodule "jalv"] - path = jalv - url = ../jalv + path = subprojects/jalv + url = ../jalv.git [submodule "ingen"] - path = ingen - url = ../ingen + path = subprojects/ingen + url = ../ingen.git [submodule "patchage"] - path = patchage - url = ../patchage -[submodule "libs/ganv"] - path = libs/ganv - url = ../ganv -[submodule "plugins/mda.lv2"] - path = plugins/mda.lv2 - url = ../mda.lv2.git + path = subprojects/patchage + url = ../patchage.git +[submodule "ganv"] + path = subprojects/ganv + url = ../ganv.git +[submodule "mda.lv2"] + path = subprojects/mda.lv2 + url = ../mda-lv2.git [submodule "machina"] - path = machina + path = subprojects/machina url = ../machina.git -[submodule "plugins/fomp.lv2"] - path = plugins/fomp.lv2 - url = ../fomp.lv2.git -[submodule "plugins/blop.lv2"] - path = plugins/blop.lv2 - url = ../blop.lv2.git +[submodule "fomp.lv2"] + path = subprojects/fomp.lv2 + url = ../fomp.git +[submodule "blop.lv2"] + path = subprojects/blop.lv2 + url = ../blop-lv2.git diff --git a/.includes.imp b/.includes.imp new file mode 100644 index 0000000..f3ea4eb --- /dev/null +++ b/.includes.imp @@ -0,0 +1,7 @@ +[ + { "ref": "subprojects/ingen/.includes.imp" }, + { "ref": "subprojects/lv2kit/.includes.imp" }, + { "ref": "subprojects/lv2kit/subprojects/sord/.includes.imp" }, + { "ref": "subprojects/patchage/.includes.imp" }, + { "ref": "subprojects/raul/.includes.imp" } +] diff --git a/ingen b/ingen deleted file mode 160000 -Subproject 5e3d6fd5cf29ce89741fdd5c61dfa62877d276d diff --git a/jalv b/jalv deleted file mode 160000 -Subproject 1e0aa339bb8ae9bf25b464dc1de8e31edefb53f diff --git a/libs/ganv b/libs/ganv deleted file mode 160000 -Subproject 43185835f4a0bf319105b79bae7beac71b1b146 diff --git a/libs/lv2kit b/libs/lv2kit deleted file mode 160000 -Subproject e0336d5bfef7000e51191fab1c369cb333848df diff --git a/libs/raul b/libs/raul deleted file mode 160000 -Subproject 496e70e420811c7d744a8bcc44a2ac1b51b676b diff --git a/machina b/machina deleted file mode 160000 -Subproject 1e15c09a3dce4eb02af040657dd719a32436393 diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..f41e14d --- /dev/null +++ b/meson.build @@ -0,0 +1,103 @@ +project( + 'drobillad', + ['c', 'cpp'], + default_options: [ + 'b_ndebug=if-release', + 'buildtype=release', + 'c_std=c99', + 'cpp_std=c++17', + ], + license: 'GPLv3+', + meson_version: '>= 0.56.0', + version: '0.0.0', +) + +####################### +# Compilers and Flags # +####################### + +# Required tools +pkg = import('pkgconfig') +cc = meson.get_compiler('c') +cpp = meson.get_compiler('cpp') + +########################## +# LV2 Path Configuration # +########################## + +lv2dir = get_option('lv2dir') +if lv2dir == '' + prefix = get_option('prefix') + if target_machine.system() == 'darwin' and prefix == '/' + lv2dir = '/Library/Audio/Plug-Ins/LV2' + elif target_machine.system() == 'haiku' and prefix == '/' + lv2dir = '/boot/common/add-ons/lv2' + elif target_machine.system() == 'windows' and prefix == 'C:/' + lv2dir = 'C:/Program Files/Common/LV2' + else + lv2dir = prefix / get_option('libdir') / 'lv2' + endif +endif + +############### +# Subprojects # +############### + +lv2kit = subproject('lv2kit', required: get_option('lv2kit')) + +lilv_dep = lv2kit.get_variable('lilv_dep') +lv2_dep = lv2kit.get_variable('lv2_dep') +serd_dep = lv2kit.get_variable('serd_dep') +sord_dep = lv2kit.get_variable('sord_dep') +sratom_dep = lv2kit.get_variable('sratom_dep') +suil_dep = lv2kit.get_variable('suil_dep') + +lv2dir = lv2_dep.get_variable( + default_value: lv2dir, + internal: 'lv2dir', + pkgconfig: 'lv2dir', + pkgconfig_define: ['prefix', '/prefix'], +) + +# LV2 plugins + +blop_lv2 = subproject('blop.lv2', required: get_option('plugins')) + +fomp_lv2 = subproject( + 'fomp.lv2', + default_options: ['cpp_std=c++17'], + required: get_option('plugins'), +) + +mda_lv2 = subproject( + 'mda.lv2', + default_options: ['cpp_std=c++17'], + required: get_option('plugins'), +) + +# Libraries + +ganv = subproject( + 'ganv', + default_options: ['cpp_std=c++17'], + required: get_option('ganv'), +) + +raul = subproject('raul', required: get_option('raul')) + +# Applications + +ingen = subproject( + 'ingen', + default_options: ['cpp_std=c++17'], + required: get_option('ingen'), +) + +jalv = subproject( + 'jalv', + default_options: ['cpp_std=c++17'], + required: get_option('jalv'), +) + +# machina = subproject('machina', required: get_option('machina'))) +patchage = subproject('patchage', required: get_option('patchage')) diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 0000000..a5c3a32 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,38 @@ +# Copyright 2021-2022 David Robillard <d@drobilla.net> +# SPDX-License-Identifier: 0BSD OR ISC + +option('checks', type: 'feature', value: 'enabled', yield: true, + description: 'Check for platform-specific features') + +option('docs', type: 'feature', value: 'auto', + description: 'Build documentation') + +option('ganv', type: 'feature', value: 'auto', + description: 'Build ganv') + +option('ingen', type: 'feature', value: 'auto', + description: 'Build ingen') + +option('jalv', type: 'feature', value: 'auto', + description: 'Build jalv') + +option('lint', type: 'boolean', value: false, yield: true, + description: 'Run code quality checks') + +option('lv2dir', type: 'string', value: '', yield: true, + description: 'LV2 bundle installation directory') + +option('lv2kit', type: 'feature', value: 'auto', + description: 'Build lv2kit') + +option('patchage', type: 'feature', value: 'auto', + description: 'Build patchage') + +option('plugins', type: 'feature', value: 'auto', + description: 'Build LV2 plugins') + +option('raul', type: 'feature', value: 'auto', + description: 'Build raul') + +option('tests', type: 'feature', value: 'auto', yield: true, + description: 'Build tests') diff --git a/patchage b/patchage deleted file mode 160000 -Subproject 458b92a89e8014fec4c70b0f982651e1c74ed79 diff --git a/plugins/blop.lv2 b/plugins/blop.lv2 deleted file mode 160000 -Subproject 648fea7b36ae78d5465215d6cc9ff0bccc3a775 diff --git a/plugins/fomp.lv2 b/plugins/fomp.lv2 deleted file mode 160000 -Subproject 961bb1cf0c7972aa648d0e45b7cb6f762f1410f diff --git a/plugins/mda.lv2 b/plugins/mda.lv2 deleted file mode 160000 -Subproject 9fdec8c3307c79dddc4d2f8d2951f408e88dd60 diff --git a/subprojects/blop.lv2 b/subprojects/blop.lv2 new file mode 160000 +Subproject cbc3fed6d2ae7c08d700c4b1e3c5792332af3c3 diff --git a/subprojects/fomp.lv2 b/subprojects/fomp.lv2 new file mode 160000 +Subproject cb3a25e18866f211b9d7cac3a64eea936859beb diff --git a/subprojects/ganv b/subprojects/ganv new file mode 160000 +Subproject 485393a6c1a9169f6a2f4a3b8d3f4146f1dbcca diff --git a/subprojects/ingen b/subprojects/ingen new file mode 160000 +Subproject 77539f23febc306f3ae444df899ee4fa59b5aa1 diff --git a/subprojects/jalv b/subprojects/jalv new file mode 160000 +Subproject 5aea04570496e4eb583f82c1cfdfa2b67fa72e1 diff --git a/subprojects/lv2kit b/subprojects/lv2kit new file mode 160000 +Subproject d519170a808d8430c21751728b0972d02e6942b diff --git a/subprojects/machina b/subprojects/machina new file mode 160000 +Subproject 2c1c56b8ab43c3081949c07103f10a8a7947608 diff --git a/subprojects/mda.lv2 b/subprojects/mda.lv2 new file mode 160000 +Subproject 5101d1a9979c8a773a68827621957e039e94fbc diff --git a/subprojects/patchage b/subprojects/patchage new file mode 160000 +Subproject c94e92befcc94fca6d0639c2fd562762d152d46 diff --git a/subprojects/raul b/subprojects/raul new file mode 160000 +Subproject 4f070bf3abbbb500c19c4397571d5049b8e008e @@ -1,16 +0,0 @@ -#!/usr/bin/env python - -# Minimal waf script for projects that include waflib directly - -from waflib import Context, Scripting - -import inspect -import os - -def main(): - script_path = os.path.abspath(inspect.getfile(inspect.getmodule(main))) - project_path = os.path.dirname(script_path) - Scripting.waf_entry_point(os.getcwd(), Context.WAFVERSION, project_path) - -if __name__ == '__main__': - main() diff --git a/waflib b/waflib deleted file mode 160000 -Subproject 116a28fa5f92e58a46dc878751019ba74a61e54 diff --git a/wscript b/wscript deleted file mode 100644 index fcab4bf..0000000 --- a/wscript +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python - -import os - -from waflib import Logs -from waflib.extras import autowaf - -# Mandatory waf variables -APPNAME = 'drobillad' # Package name for waf dist -VERSION = '0.0.0' # Package version for waf dist -top = '.' # Source directory -out = 'build' # Build directory - -line_just = 45 -libs = ['libs/lv2kit', 'libs/raul', 'libs/ganv'] -apps = ['jalv', 'patchage', 'ingen']#, 'machina'] -plugins = ['plugins/blop.lv2', 'plugins/fomp.lv2', 'plugins/mda.lv2'] -projects = libs + apps + plugins - - -def options(opt): - opt.load('compiler_c') - opt.load('compiler_cxx') - opt.load('lv2') - run_opts = opt.add_option_group('Run options') - run_opts.add_option('--cmd', type='string', dest='cmd', - help='command to run from build directory') - for p in projects: - opt.recurse(p) - - -def configure(conf): - conf.load('compiler_c', cache=True) - conf.load('compiler_cxx', cache=True) - conf.load('lv2', cache=True) - conf.load('autowaf', cache=True) - - conf.env.DROBILLAD_BUILD = [] - for p in projects: - try: - name = os.path.basename(p) - Logs.pprint('BOLD', '') - conf.recurse(p) - autowaf.set_local_lib(conf, name, name != 'lv2') - conf.env.DROBILLAD_BUILD += [p] - except Exception as e: - Logs.warn('Configuration failed, not building %s (%s)' % (p, e)) - - autowaf.g_is_child = False - - Logs.info('') - autowaf.display_summary(conf) - Logs.info('\nBuilding: %s\n' % ' '.join(conf.env.DROBILLAD_BUILD)) - - not_building = [] - for i in projects: - if i not in conf.env.DROBILLAD_BUILD: - not_building += [i] - - if not_building != []: - Logs.warn('Not building:\n\t%s\n' % '\n\t'.join(not_building)) - - -def build(bld): - for i in bld.env.DROBILLAD_BUILD: - bld.add_group() - bld.recurse(i) - - -def test(ctx): - for i in ctx.env.DROBILLAD_BUILD: - ctx.recurse(i, mandatory=False) |