From 793e6528d5072af6d11a1eed225f76f8b3c0fe58 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Wed, 3 Dec 2025 08:21:40 -0500 Subject: [PATCH] build(wasm): libconstants can now compile to wasm and run as a wasm module --- cross/macos_arm64.ini | 19 +++++++++++++++++++ cross/wasm.ini | 19 +++++++++++++++++++ examples/meson.build | 1 + examples/simple.cpp | 13 +++++++++++++ meson.build | 11 +++++++++-- meson_options.txt | 4 +++- src/constants/lib/const.cpp | 3 +-- 7 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 cross/macos_arm64.ini create mode 100644 cross/wasm.ini create mode 100644 examples/meson.build create mode 100644 examples/simple.cpp diff --git a/cross/macos_arm64.ini b/cross/macos_arm64.ini new file mode 100644 index 0000000..74dd72a --- /dev/null +++ b/cross/macos_arm64.ini @@ -0,0 +1,19 @@ +[binaries] +c = 'arm64-apple-darwin25-clang' +cpp = 'arm64-apple-darwin25-clang++' +ar = 'arm64-apple-darwin25-ar' +strip = 'arm64-apple-darwin25-strip' +pkg-config = 'pkg-config' +ranlib = '/usr/bin/true' + +[host_machine] +system = 'darwin' +cpu_family = 'aarch64' +cpu = 'arm64' +endian = 'little' + +[built-in options] +c_args = ['-mmacosx-version-min=15.0'] +cpp_args = ['-mmacos-version-min=15.0'] +c_link_args = ['-mmacosx-version-min=15.0'] +cpp_link_args = ['-mmacos-version-min=15.0'] diff --git a/cross/wasm.ini b/cross/wasm.ini new file mode 100644 index 0000000..4d82a17 --- /dev/null +++ b/cross/wasm.ini @@ -0,0 +1,19 @@ +[binaries] +cpp = 'em++' +ar = 'emar' +strip = 'emstrip' + +exec_wrapper = 'node' + +[built-in options] +cpp_args = ['-Dpkg_config=false', '-Dbuild_tests=false', '-Dbuild_examples=true', '-fwasm-exceptions', '-s', 'MEMORY64=1'] +cpp_link_args = ['-s', 'WASM=1', '-s', 'ALLOW_MEMORY_GROWTH=1', '-s', 'MEMORY64=1', '-fwasm-exceptions'] + +[host_machine] +system = 'emscripten' +cpu_family = 'wasm64' +cpu = 'wasm64' +endian = 'little' + +[properties] +cmake_toolchain_file = '/home/tboudreaux/Programming/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake' diff --git a/examples/meson.build b/examples/meson.build new file mode 100644 index 0000000..f61515f --- /dev/null +++ b/examples/meson.build @@ -0,0 +1 @@ +executable('simple_constant_usage', 'simple.cpp', dependencies: [const_dep]) diff --git a/examples/simple.cpp b/examples/simple.cpp new file mode 100644 index 0000000..82d5563 --- /dev/null +++ b/examples/simple.cpp @@ -0,0 +1,13 @@ +#include "fourdst/constants/const.h" +#include + +int main() { + fourdst::constant::Constants& C = fourdst::constant::Constants::getInstance(); + + std::cout << "Speed of light is " << C.get("c") << std::endl; + std::cout << "All avalible constants are: "; + + for (const auto& key : C.keys()) { + std::cout << "\t " << key << ": " << C[key]; + } +} diff --git a/meson.build b/meson.build index 351469d..7a22223 100644 --- a/meson.build +++ b/meson.build @@ -28,9 +28,16 @@ cpp = meson.get_compiler('cpp') subdir('assets/static') subdir('src') -subdir('tests') -if get_option('pkg-config') +if get_option('build_tests') + subdir('tests') +endif + +if get_option('build_examples') + subdir('examples') +endif + +if get_option('pkg_config') message('Generating pkg-config file for libconstants...') pkg = import('pkgconfig') pkg.generate( diff --git a/meson_options.txt b/meson_options.txt index f1da5ba..e098c75 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1 +1,3 @@ -option('pkg-config', type: 'boolean', value: true, description: 'generate pkg-config file for libconstants (fourdst_constants.pc)') +option('pkg_config', type: 'boolean', value: true, description: 'generate pkg-config file for libconstants (fourdst_constants.pc)') +option('build_tests', type: 'boolean', value: true, description: 'control if tests are built or not') +option('build_examples', type: 'boolean', value: true, description: 'control if examples is built or not') diff --git a/src/constants/lib/const.cpp b/src/constants/lib/const.cpp index 885d2f5..32cf47f 100644 --- a/src/constants/lib/const.cpp +++ b/src/constants/lib/const.cpp @@ -20,11 +20,10 @@ // *********************************************************************** */ #include #include -#include #include -#include #include #include +#include #include "fourdst/constants/const.h"