summaryrefslogtreecommitdiff
path: root/modules/thread
diff options
context:
space:
mode:
Diffstat (limited to 'modules/thread')
-rw-r--r--modules/thread/.nix/derivation.nix42
-rw-r--r--modules/thread/SConstruct82
-rw-r--r--modules/thread/c++/SConscript38
-rw-r--r--modules/thread/c++/remote.hpp140
-rw-r--r--modules/thread/examples/SConscript32
-rw-r--r--modules/thread/tests/SConscript31
6 files changed, 0 insertions, 365 deletions
diff --git a/modules/thread/.nix/derivation.nix b/modules/thread/.nix/derivation.nix
deleted file mode 100644
index 9175d6a..0000000
--- a/modules/thread/.nix/derivation.nix
+++ /dev/null
@@ -1,42 +0,0 @@
-{ lib
-, stdenv
-, scons
-, clang-tools
-, version
-, forstio
-, build_examples ? "false"
-}:
-
-stdenv.mkDerivation {
- pname = "forstio-thread";
- inherit version;
- src = ./..;
-
- enableParallelBuilding = true;
-
- nativeBuildInputs = [
- scons
- clang-tools
- ];
-
- buildInputs = [
- forstio.core
- forstio.async
- forstio.io
- forstio.codec
- forstio.io_codec
- ];
-
- outputs = [
- "out"
- "dev"
- ];
-
- buildPhase = ''
- scons build_examples=${build_examples}
- '';
-
- installPhase = ''
- scons prefix=$out build_examples=${build_examples} install
- '';
-}
diff --git a/modules/thread/SConstruct b/modules/thread/SConstruct
deleted file mode 100644
index fe16748..0000000
--- a/modules/thread/SConstruct
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/env python3
-
-import sys
-import os
-import os.path
-import glob
-import re
-
-
-if sys.version_info < (3,):
- def isbasestring(s):
- return isinstance(s,basestring)
-else:
- def isbasestring(s):
- return isinstance(s, (str,bytes))
-
-def add_kel_source_files(self, sources, filetype, lib_env=None, shared=False, target_post=""):
-
- if isbasestring(filetype):
- dir_path = self.Dir('.').abspath
- filetype = sorted(glob.glob(dir_path+"/"+filetype))
-
- for path in filetype:
- target_name = re.sub( r'(.*?)(\.cpp|\.c\+\+)', r'\1' + target_post, path )
- if shared:
- target_name+='.os'
- sources.append( self.SharedObject( target=target_name, source=path ) )
- else:
- target_name+='.o'
- sources.append( self.StaticObject( target=target_name, source=path ) )
- pass
-
-def isAbsolutePath(key, dirname, env):
- assert os.path.isabs(dirname), "%r must have absolute path syntax" % (key,)
-
-env_vars = Variables(
- args=ARGUMENTS
-)
-
-env_vars.Add(
- BoolVariable('build_examples',
- help='Build examples',
- default=False
- )
-);
-
-env_vars.Add('prefix',
- help='Installation target location of build results and headers',
- default='/usr/local/',
- validator=isAbsolutePath
-);
-
-env=Environment(ENV=os.environ, variables=env_vars, CPPPATH=[],
- CXX=['c++'],
- CPPDEFINES=['SAW_UNIX'],
- CXXFLAGS=['-std=c++20','-g','-Wall','-Wextra'],
- LIBS=[
- 'forstio-core',
- 'forstio-async',
- 'forstio-io',
- 'forstio-codec',
- 'pthread'
- ]
-);
-env.__class__.add_source_files = add_kel_source_files
-env.Tool('compilation_db');
-env.cdb = env.CompilationDatabase('compile_commands.json');
-
-env.objects = [];
-env.sources = [];
-env.headers = [];
-env.targets = [];
-
-Export('env')
-SConscript('c++/SConscript')
-SConscript('examples/SConscript')
-
-env.Alias('cdb', env.cdb);
-env.Alias('all', [env.targets]);
-env.Default('all');
-
-env.Alias('install', '$prefix')
diff --git a/modules/thread/c++/SConscript b/modules/thread/c++/SConscript
deleted file mode 100644
index 6194362..0000000
--- a/modules/thread/c++/SConscript
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/false
-
-import os
-import os.path
-import glob
-
-
-Import('env')
-
-dir_path = Dir('.').abspath
-
-# Environment for base library
-thread_env = env.Clone();
-
-thread_env.sources = sorted(glob.glob(dir_path + "/*.cpp"))
-thread_env.headers = sorted(glob.glob(dir_path + "/*.hpp"))
-
-env.sources += thread_env.sources;
-env.headers += thread_env.headers;
-
-## Shared lib
-objects_shared = []
-thread_env.add_source_files(objects_shared, thread_env.sources, shared=True);
-env.library_shared = thread_env.SharedLibrary('#build/forstio-thread', [objects_shared]);
-
-## Static lib
-objects_static = []
-thread_env.add_source_files(objects_static, thread_env.sources, shared=False);
-env.library_static = thread_env.StaticLibrary('#build/forstio-thread', [objects_static]);
-
-# Set Alias
-env.Alias('library_thread', [env.library_shared, env.library_static]);
-
-env.targets += ['library_thread'];
-
-# Install
-env.Install('$prefix/lib/', [env.library_shared, env.library_static]);
-env.Install('$prefix/include/forstio/thread/', [thread_env.headers]);
diff --git a/modules/thread/c++/remote.hpp b/modules/thread/c++/remote.hpp
deleted file mode 100644
index 39c64a6..0000000
--- a/modules/thread/c++/remote.hpp
+++ /dev/null
@@ -1,140 +0,0 @@
-#pragma once
-
-#include <thread>
-
-namespace saw {
-/**
- * ### Device ###
- * Device acts a launcher?
- *
- * Acts a logical device.
- * Though logical devices are not findable by an address as of now.
- *
- * Generally a device represents some info about the remote object?
- * But what exactly? Does it store capabilities?
- *
- * In that case I'd prefer it has compile time information about
- * those.
- *
- * ### RpcServer ###
- * Should always be created on the side which it is run on.
- * For SYCL it's kernel launches, so it's created on the local
- * thread.
- * For Threads it's supposed to be created on the remote thread.
- * How do I solve this cleanly?
- * Technically the server shouldn't know about the device.
- * It should register with an authority, so it gets requests
- * though.
- */
-namespace rmt {
-struct Thread {};
-}
-
-namespace impl {
-template<typename Iface, typename Encoding, typename Storage>
-class thread_rpc_communication_handler final {
-private:
- std::mutex mut_;
-
- using FunctionT = std::function<error_or<void>(rpc_server<Iface, Encoding, Storage, rmt::Thread>&)>;
- std::deque<FunctionT> dispatches_;
-
- // TODO Need a send + receive + erase request queue
- // std::deque<int>;
-public:
- thread_rpc_communication_handler() = default;
-
- template<string_literal Lit>
- error_or<void> call(id<Void> dat_id){
- std::lock_guard lock{mut_};
-
- dispatches_.emplace_back([dat_id](rpc_server<Iface, Encoding, Storage, rmt::Thread>& srv){
- srv.template call<Lit>(dat_id);
- });
- }
-
- error_or<void> run_next_dispatch(rpc_server<Iface, Encoding, Storage, rmt::Thread>& srv){
- std::lock_guard lock{mut_};
- if(dispatches_.empty()){
- return make_error<err::recoverable>("Dispatch Queue is empty");
- }
-
- ref<FunctionT> front{dispatches_.front()};
-
- front()();
- }
-};
-
-}
-
-template<Iface, Encoding, Storage>
-class rpc_server<Iface, Encoding, Storage, rmt::Thread> {
-private:
- our<impl::thread_rpc_communication_handler<Iface, Encoding, Storage>> comms_;
-public:
-};
-
-template<Iface, Encoding, Storage>
-class rpc_client<Iface, Encoding, Storage, rmt::Thread> {
-private:
- our<impl::thread_rpc_communication_handler<Iface, Encoding, Storage>> comms_;
-public:
- rpc_client(our<impl::thread_rpc_communication_handler<Iface, Encoding, Storage>> comms__):
- comms_{std::move(comms__)}
- {}
-};
-
-/**
- * A device representing a remote thread. Technically it's
- * a logical distinction and not a physical.
- */
-template<>
-class device<rmt::Thread> final {
-private:
- event_loop ev_loop_;
- bool keep_running_;
- std::function<void()> run_func_;
-
- // std::vector<std::function<error_or<void>()>> func_calls_;
-
- std::thread thread_;
-
- void run(){
- wait_scope wait{ev_loop_};
-
- while(keep_running_){
- run_func_();
- wait.wait(std::chrono::seconds{16u});
- }
-
- wait.poll();
- }
-public:
- template<typename Func>
- device(Func func):
- ev_loop_{},
- keep_running_{true},
- run_func_{std::move(func)}
- thread_{&device<rmt::Thread>::run, this},
- {}
-
- void stop(){
- keep_running_ = false;
- }
-};
-
-template<>
-class remote<rmt::Thread> final {
- private:
-public:
- remote() = default;
-
- conveyor<own<remote_address<rmt::Thread>>> resolve_address(){
- return heap<remote_address<rmt::Thread>>(*this);
- }
-
- device<rmt::Thread> connect_device(const remote_address<rmt::Thread>& ){
- return {};
- }
-};
-}
diff --git a/modules/thread/examples/SConscript b/modules/thread/examples/SConscript
deleted file mode 100644
index df8e0c6..0000000
--- a/modules/thread/examples/SConscript
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/false
-
-import os
-import os.path
-import glob
-
-
-Import('env')
-
-dir_path = Dir('.').abspath
-
-# Environment for base library
-examples_env = env.Clone();
-
-examples_env.sources = sorted(glob.glob(dir_path + "/*.cpp"))
-examples_env.headers = sorted(glob.glob(dir_path + "/*.hpp"))
-
-env.sources += examples_env.sources;
-env.headers += examples_env.headers;
-
-objects_static = []
-
-# Set Alias
-env.examples = [
-#, examples_env.echo_server
-];
-env.Alias('examples', env.examples);
-
-if env["build_examples"]:
- env.targets += ['examples'];
- env.Install('$prefix/bin/', env.examples);
-#endif
diff --git a/modules/thread/tests/SConscript b/modules/thread/tests/SConscript
deleted file mode 100644
index f8ffc92..0000000
--- a/modules/thread/tests/SConscript
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/false
-
-import os
-import os.path
-import glob
-
-
-Import('env')
-
-dir_path = Dir('.').abspath
-
-# Environment for base library
-test_cases_env = env.Clone();
-
-test_cases_env.Append(LIBS=['forstio-test']);
-
-test_cases_env.sources = sorted(glob.glob(dir_path + "/*.cpp"))
-test_cases_env.headers = sorted(glob.glob(dir_path + "/*.hpp"))
-
-env.sources += test_cases_env.sources;
-env.headers += test_cases_env.headers;
-
-objects_static = []
-test_cases_env.add_source_files(objects_static, test_cases_env.sources, shared=False);
-test_cases_env.program = test_cases_env.Program('#bin/tests', [objects_static, env.library_static]);
-
-# Set Alias
-env.Alias('test', test_cases_env.program);
-env.Alias('check', test_cases_env.program);
-
-env.targets += ['test','check'];