diff --git a/.gitignore b/.gitignore index 8615135..f825506 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +subprojects/libostd *.o *.core *.so diff --git a/Makefile b/Makefile deleted file mode 100644 index 2f395c5..0000000 --- a/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -OSTD_PATH = ../libostd - -LIBCS_CXXFLAGS = \ - -std=c++1z -Wall -Wextra -Wshadow -Wold-style-cast -Iinclude -Isrc -g \ - -fvisibility=hidden -I$(OSTD_PATH) - -LIBCS_LDFLAGS = $(OSTD_PATH)/libostd.a - -LIBCS_OBJ = \ - src/cubescript.o \ - src/cs_gen.o \ - src/cs_vm.o \ - src/cs_val.o \ - src/cs_util.o \ - src/lib_str.o \ - src/lib_math.o \ - src/lib_list.o - -LIBCS_LIB = libcubescript.a - -.cc.o: - $(CXX) $(CXXFLAGS) $(LIBCS_CXXFLAGS) -c -o $@ $< - -all: library repl - -library: $(LIBCS_LIB) - -$(LIBCS_LIB): $(LIBCS_OBJ) - ar rcs $(LIBCS_LIB) $(LIBCS_OBJ) - -repl: $(LIBCS_LIB) tools/repl.cc tools/linenoise.cc tools/linenoise.hh - $(CXX) $(CXXFLAGS) $(LIBCS_CXXFLAGS) \ - -DCS_REPL_USE_LINENOISE tools/linenoise.cc tools/repl.cc \ - $(LDFLAGS) $(LIBCS_LDFLAGS) -o repl $(LIBCS_LIB) - -clean: - rm -f $(LIBCS_LIB) $(LIBCS_OBJ) repl - -src/cubescript.o: include/cubescript/cubescript.hh include/cubescript/cubescript_conf.hh src/cs_vm.hh -src/cs_gen.o: include/cubescript/cubescript.hh include/cubescript/cubescript_conf.hh src/cs_vm.hh src/cs_util.hh -src/cs_vm.o: include/cubescript/cubescript.hh include/cubescript/cubescript_conf.hh src/cs_vm.hh src/cs_util.hh -src/cs_val.o: include/cubescript/cubescript.hh include/cubescript/cubescript_conf.hh src/cs_vm.hh src/cs_util.hh -src/cs_util.o: include/cubescript/cubescript.hh include/cubescript/cubescript_conf.hh src/cs_util.hh -src/lib_str.o: include/cubescript/cubescript.hh include/cubescript/cubescript_conf.hh -src/lib_math.o: include/cubescript/cubescript.hh include/cubescript/cubescript_conf.hh -src/lib_list.o: include/cubescript/cubescript.hh include/cubescript/cubescript_conf.hh src/cs_util.hh diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..2121b26 --- /dev/null +++ b/meson.build @@ -0,0 +1,35 @@ +project('libcubescript', ['cpp'], + version: '0.1.0', + default_options: ['buildtype=plain', 'cpp_std=c++17'], + meson_version: '>=0.46' +) + +dir_prefix = get_option('prefix') +dir_include = join_paths(dir_prefix, get_option('includedir')) +dir_data = join_paths(dir_prefix, get_option('datadir')) +dir_lib = join_paths(dir_prefix, get_option('libdir')) + +dir_package_include = join_paths(dir_include, 'cubescript') + +libcubescript_includes = [include_directories('include')] + +tgt_compiler_id = meson.get_compiler('cpp').get_id() +if tgt_compiler_id == 'gcc' or tgt_compiler_id == 'clang' + extra_cxxflags = ['-Wextra', '-Wshadow', '-Wold-style-cast'] +else + extra_cxxflags = [] +endif + +subdir('src') +subdir('tools') + +pkg = import('pkgconfig') + +pkg.generate( + libraries: libcubescript_lib, + version: meson.project_version(), + name: 'libcubescript', + filebase: 'libcubescript', + url: 'https://git.octaforge.org/octaforge/libcubescript', + description: 'OctaForge C++ utility library' +) diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 0000000..69ba062 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,11 @@ +option('readline', + type: 'boolean', + value: false, + description: 'Use GNU readline for the REPL' +) + +option('linenoise', + type: 'boolean', + value: true, + description: 'Use linenoise for the REPL' +) diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 0000000..6e8637e --- /dev/null +++ b/src/meson.build @@ -0,0 +1,38 @@ +libcubescript_header_src = [ + '../include/cubescript/cubescript.hh', + '../include/cubescript/cubescript_conf.hh' +] + +libcubescript_src = [ + 'cs_gen.cc', + 'cs_util.cc', + 'cs_val.cc', + 'cs_vm.cc', + 'cubescript.cc', + 'lib_list.cc', + 'lib_math.cc', + 'lib_str.cc' +] + +libostd_dep = dependency('libostd', fallback: ['libostd', 'libostd_static']) + +libcubescript_lib = both_libraries('cubescript', + libcubescript_src, + dependencies: libostd_dep, + include_directories: libcubescript_includes + [include_directories('.')], + cpp_args: extra_cxxflags, + install: true, + version: meson.project_version() +) + +libcubescript = declare_dependency( + include_directories: libcubescript_includes, + link_with: libcubescript_lib.get_shared_lib() +) + +libcubescript_static = declare_dependency( + include_directories: libcubescript_includes, + link_with: libcubescript_lib.get_static_lib() +) + +install_headers(libcubescript_header_src, install_dir: dir_package_include) diff --git a/subprojects/libostd.wrap b/subprojects/libostd.wrap new file mode 100644 index 0000000..7e071b6 --- /dev/null +++ b/subprojects/libostd.wrap @@ -0,0 +1,4 @@ +[wrap-git] +directory = libostd +url = https://git.octaforge.org/OctaForge/libostd.git +revision = head diff --git a/tools/meson.build b/tools/meson.build new file mode 100644 index 0000000..f4bb041 --- /dev/null +++ b/tools/meson.build @@ -0,0 +1,22 @@ +repl_src = [ + 'repl.cc' +] + +repl_deps = [libostd_dep, libcubescript] +repl_flags = [] + +if get_option('readline') + repl_deps += [dependency('readline')] + repl_flags = ['-DCS_REPL_USE_READLINE'] +elif get_option('linenoise') + repl_src += ['linenoise.cc'] + repl_flags = ['-DCS_REPL_USE_LINENOISE'] +endif + +executable('cubescript', + repl_src, + dependencies: repl_deps, + include_directories: libcubescript_includes + [include_directories('.')], + cpp_args: extra_cxxflags + repl_flags, + install: true +)