aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/actions/dataloader-build/action.yml32
-rw-r--r--.github/actions/dataloader-cache/action.yml22
-rw-r--r--.github/actions/mingw-cache/action.yml18
-rw-r--r--.github/workflows/builds.yml140
-rw-r--r--SConstruct4
-rw-r--r--deps/SCsub8
-rw-r--r--include/openvic-dataloader/csv/LineObject.hpp24
-rw-r--r--include/openvic-dataloader/detail/OptionalConstexpr.hpp9
-rw-r--r--include/openvic-dataloader/detail/VectorConstexpr.hpp9
-rw-r--r--src/openvic-dataloader/detail/BasicBufferHandler.hpp7
10 files changed, 254 insertions, 19 deletions
diff --git a/.github/actions/dataloader-build/action.yml b/.github/actions/dataloader-build/action.yml
new file mode 100644
index 0000000..36caebd
--- /dev/null
+++ b/.github/actions/dataloader-build/action.yml
@@ -0,0 +1,32 @@
+name: Build OpenVic-Dataloader
+description: Build OpenVic-Dataloader with provided options.
+inputs:
+ target:
+ description: Build target (editor, template_release, template_debug).
+ default: "template_release"
+ platform:
+ description: Target platform.
+ required: false
+ sconsflags:
+ default: ""
+ scons-cache:
+ description: The scons cache path.
+ default: "${{ github.workspace }}/.scons-cache/"
+ scons-cache-limit:
+ description: The scons cache size limit.
+ # actions/cache has 10 GiB limit, and GitHub runners have a 14 GiB disk.
+ # Limit to 7 GiB to avoid having the extracted cache fill the disk.
+ default: 7168
+runs:
+ using: "composite"
+ steps:
+ - name: Scons Build
+ shell: sh
+ env:
+ SCONSFLAGS: ${{ inputs.sconsflags }}
+ SCONS_CACHE: ${{ inputs.scons-cache }}
+ SCONS_CACHE_LIMIT: ${{ inputs.scons-cache-limit }}
+ run: |
+ echo "Building with flags:" platform=${{ inputs.platform }} target=${{ inputs.target }} ${{ env.SCONSFLAGS }}
+ scons platform=${{ inputs.platform }} target=${{ inputs.target }} ${{ env.SCONSFLAGS }}
+ ls -l bin/
diff --git a/.github/actions/dataloader-cache/action.yml b/.github/actions/dataloader-cache/action.yml
new file mode 100644
index 0000000..c913216
--- /dev/null
+++ b/.github/actions/dataloader-cache/action.yml
@@ -0,0 +1,22 @@
+name: Setup OpenVic-Dataloader Build Cache
+description: Setup OpenVic-Dataloader Build Cache
+inputs:
+ cache-name:
+ description: The cache base name (job name by default).
+ default: "${{github.job}}"
+ scons-cache:
+ description: The scons cache path.
+ default: "${{github.workspace}}/.scons-cache/"
+runs:
+ using: "composite"
+ steps:
+ # Upload cache on completion and check it out now
+ - name: Load .scons_cache directory
+ uses: actions/cache@v3
+ with:
+ path: ${{inputs.scons-cache}}
+ key: ${{inputs.cache-name}}-${{env.OVDL_BASE_BRANCH}}-${{github.ref}}-${{github.sha}}
+ restore-keys: |
+ ${{inputs.cache-name}}-${{env.OVDL_BASE_BRANCH}}-${{github.ref}}-${{github.sha}}
+ ${{inputs.cache-name}}-${{env.OVDL_BASE_BRANCH}}-${{github.ref}}
+ ${{inputs.cache-name}}-${{env.OVDL_BASE_BRANCH}}
diff --git a/.github/actions/mingw-cache/action.yml b/.github/actions/mingw-cache/action.yml
new file mode 100644
index 0000000..e92962d
--- /dev/null
+++ b/.github/actions/mingw-cache/action.yml
@@ -0,0 +1,18 @@
+name: Setup MinGW Cache
+description: Setup MinGW Cache
+inputs:
+ cache-key:
+ description: Name for MinGW cache key.
+ default: "mingw-cache"
+runs:
+ using: "composite"
+ steps:
+ # Upload cache on completion and check it out now
+ - name: Load MinGW Cache
+ id: cache-mingw
+ uses: actions/cache@v3
+ with:
+ path: C:\ProgramData\chocolatey\lib\mingw
+ key: ${{inputs.cache-key}}
+ - name: Setup MinGW for build
+ uses: egor-tensin/setup-mingw@v2 \ No newline at end of file
diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml
new file mode 100644
index 0000000..0e0bcfe
--- /dev/null
+++ b/.github/workflows/builds.yml
@@ -0,0 +1,140 @@
+name: Builds
+
+on: [push, pull_request]
+
+env:
+ OVDL_BASE_BRANCH: master
+
+concurrency:
+ group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-macos
+ cancel-in-progress: true
+
+jobs:
+ build:
+ runs-on: ${{matrix.os}}
+ name: ${{matrix.name}}
+ permissions: write-all
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - identifier: windows-debug
+ os: windows-latest
+ name: 🏁 Windows Debug
+ target: template_debug
+ platform: windows
+ arch: x86_64
+ - identifier: windows-release
+ os: windows-latest
+ name: 🏁 Windows Release
+ target: template_release
+ platform: windows
+ arch: x86_64
+ - identifier: macos-debug
+ os: macos-latest
+ name: 🍎 macOS (universal) Debug
+ target: template_debug
+ platform: macos
+ arch: universal
+ - identifier: macos-release
+ os: macos-latest
+ name: 🍎 macOS (universal) Release
+ target: template_release
+ platform: macos
+ arch: universal
+ - identifier: linux-debug
+ os: ubuntu-latest
+ name: 🐧 Linux Debug
+ runner: ubuntu-20.04
+ target: template_debug
+ platform: linux
+ arch: x86_64
+ - identifier: linux-release
+ os: ubuntu-latest
+ name: 🐧 Linux Release
+ runner: ubuntu-20.04
+ target: template_release
+ platform: linux
+ arch: x86_64
+
+ steps:
+ - name: Checkout project
+ uses: actions/checkout@v3.3.0
+ with:
+ submodules: recursive
+
+ - name: Setup OpenVic-Dataloader build cache
+ uses: ./.github/actions/dataloader-cache
+ with:
+ cache-name: ${{ matrix.identifier }}
+ continue-on-error: true
+
+ - name: Set up Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: "3.x"
+
+ - name: Set up SCons
+ shell: bash
+ run: |
+ python -c "import sys; print(sys.version)"
+ python -m pip install scons
+ scons --version
+
+ - name: Linux dependencies
+ if: ${{ matrix.platform == 'linux' }}
+ run: |
+ sudo apt-get update -qq
+ sudo apt-get install -qqq build-essential pkg-config
+ g++ --version
+ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 12
+ sudo update-alternatives --set g++ /usr/bin/g++-12
+ g++ --version
+
+ - name: Setup MinGW for Windows/MinGW build
+ if: ${{ matrix.platform == 'windows' }}
+ uses: ./.github/actions/mingw-cache
+
+ - name: Compile Dataloader
+ uses: ./.github/actions/dataloader-build
+ with:
+ platform: ${{ matrix.platform }}
+ target: ${{ matrix.target }}
+ sconsflags: arch=${{ matrix.arch }} build_ovdl_library=yes
+
+ - name: Delete compilation files
+ if: ${{ matrix.platform == 'windows' }}
+ run: |
+ Remove-Item bin/* -Include *.exp,*.pdb -Force
+
+ - name: Upload library artifact
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ github.event.repository.name }}-library
+ path: |
+ ${{ github.workspace }}/bin/libopenvic-dataloader.*
+
+ - name: Upload executable artifact
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ github.event.repository.name }}-executable
+ path: |
+ ${{ github.workspace }}/bin/openvic-dataloader.headless.*
+
+ - name: Archive Release
+ uses: thedoctor0/zip-release@0.7.1
+ with:
+ type: "zip"
+ filename: "../../../libopenvic-dataloader.${{ matrix.platform }}.${{ matrix.arch }}.zip"
+ directory: "${{ github.workspace }}/bin/"
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
+
+ - name: Create and upload asset
+ uses: ncipollo/release-action@v1
+ with:
+ allowUpdates: true
+ artifacts: "libopenvic-dataloader.${{ matrix.platform }}.${{ matrix.arch }}.zip"
+ omitNameDuringUpdate: true
+ omitBodyDuringUpdate: true
+ token: ${{ secrets.GITHUB_TOKEN }}
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
diff --git a/SConstruct b/SConstruct
index 6770de7..3128ebc 100644
--- a/SConstruct
+++ b/SConstruct
@@ -245,7 +245,7 @@ env["OBJSUFFIX"] = suffix + env["OBJSUFFIX"]
library_name = "libopenvic-dataloader{}{}".format(suffix, env["LIBSUFFIX"])
if env["build_ovdl_library"]:
- library = env.StaticLibrary(target=env.File(os.path.join(BINDIR, library_name)), source=sources)
+ library = env.StaticLibrary(target=os.path.join(BINDIR, library_name), source=sources)
Default(library)
env.Append(LIBPATH=[env.Dir(BINDIR)])
@@ -267,6 +267,8 @@ if env["build_ovdl_headless"]:
headless_env.headless_sources = GlobRecursive("*.cpp", headless_path)
if not env["build_ovdl_library"]:
headless_env.headless_sources += sources
+ else:
+ headless_env.headless_sources += env.lexy_sources
headless_program = headless_env.Program(
target=os.path.join(BINDIR, headless_name),
source=headless_env.headless_sources,
diff --git a/deps/SCsub b/deps/SCsub
index d58d83e..1afe1a6 100644
--- a/deps/SCsub
+++ b/deps/SCsub
@@ -32,13 +32,13 @@ def build_lexy(env):
library = lexy_env.StaticLibrary(target="lexy/src/" + library_name, source=sources)
Default(library)
- env.Append(CPPPATH=[env.Dir("lexy/include")])
+ env.Append(CPPPATH=[lexy_env.Dir("lexy/include")])
if env.get("is_msvc", False):
- env.Append(CXXFLAGS=["/external:I", env.Dir("lexy/include"), "/external:W0"])
+ env.Append(CXXFLAGS=["/external:I", lexy_env.Dir("lexy/include"), "/external:W0"])
else:
- env.Append(CXXFLAGS=["-isystem", env.Dir("lexy/include")])
+ env.Append(CXXFLAGS=["-isystem", lexy_env.Dir("lexy/include")])
env.Append(CXXFLAGS=[""])
- env.Append(LIBPATH=[env.Dir("lexy/src")])
+ env.Append(LIBPATH=[lexy_env.Dir("lexy/src")])
env.Append(LIBS=[library_name])
diff --git a/include/openvic-dataloader/csv/LineObject.hpp b/include/openvic-dataloader/csv/LineObject.hpp
index 0494ffb..8a9c2ec 100644
--- a/include/openvic-dataloader/csv/LineObject.hpp
+++ b/include/openvic-dataloader/csv/LineObject.hpp
@@ -10,6 +10,8 @@
#include <tuple>
#include <vector>
+#include <openvic-dataloader/detail/VectorConstexpr.hpp>
+
namespace ovdl::csv {
/// LineObject should be able to recognize the differences between:
/// Input -> Indexes == ""
@@ -30,20 +32,20 @@ namespace ovdl::csv {
using inner_value_type = std::string;
using container_type = std::vector<std::tuple<position_type, inner_value_type>>;
- constexpr LineObject() = default;
- constexpr LineObject(LineObject&) = default;
- constexpr LineObject(LineObject&&) = default;
- constexpr LineObject(const LineObject&) = default;
+ OVDL_VECTOR_CONSTEXPR LineObject() = default;
+ OVDL_VECTOR_CONSTEXPR LineObject(LineObject&) = default;
+ OVDL_VECTOR_CONSTEXPR LineObject(LineObject&&) = default;
+ OVDL_VECTOR_CONSTEXPR LineObject(const LineObject&) = default;
- constexpr LineObject& operator=(const LineObject& other) = default;
- constexpr LineObject& operator=(LineObject&& other) = default;
+ OVDL_VECTOR_CONSTEXPR LineObject& operator=(const LineObject& other) = default;
+ OVDL_VECTOR_CONSTEXPR LineObject& operator=(LineObject&& other) = default;
- constexpr ~LineObject() = default;
+ OVDL_VECTOR_CONSTEXPR ~LineObject() = default;
- constexpr LineObject(std::initializer_list<value_type> pos_and_val) : container_type(pos_and_val) {
+ OVDL_VECTOR_CONSTEXPR LineObject(std::initializer_list<value_type> pos_and_val) : container_type(pos_and_val) {
}
- constexpr LineObject(position_type prefix_end, std::initializer_list<value_type> pos_and_val, position_type suffix_end = 0)
+ OVDL_VECTOR_CONSTEXPR LineObject(position_type prefix_end, std::initializer_list<value_type> pos_and_val, position_type suffix_end = 0)
: container_type(pos_and_val),
_prefix_end(prefix_end),
_suffix_end(suffix_end) {
@@ -77,8 +79,8 @@ namespace ovdl::csv {
private:
// Should be position of first valid value on line
- position_type _prefix_end;
+ position_type _prefix_end = 0;
// Should be position after last value or position after last seperator
- position_type _suffix_end;
+ position_type _suffix_end = 0;
};
} \ No newline at end of file
diff --git a/include/openvic-dataloader/detail/OptionalConstexpr.hpp b/include/openvic-dataloader/detail/OptionalConstexpr.hpp
new file mode 100644
index 0000000..bcb12a7
--- /dev/null
+++ b/include/openvic-dataloader/detail/OptionalConstexpr.hpp
@@ -0,0 +1,9 @@
+#pragma once
+
+// THANK YOU APPLE FOR YOUR UTTER DISREGARD FOR C++20
+
+#if __cpp_lib_optional >= 202106L
+#define OVDL_OPTIONAL_CONSTEXPR constexpr
+#else
+#define OVDL_OPTIONAL_CONSTEXPR inline
+#endif \ No newline at end of file
diff --git a/include/openvic-dataloader/detail/VectorConstexpr.hpp b/include/openvic-dataloader/detail/VectorConstexpr.hpp
new file mode 100644
index 0000000..7e7fa34
--- /dev/null
+++ b/include/openvic-dataloader/detail/VectorConstexpr.hpp
@@ -0,0 +1,9 @@
+#pragma once
+
+// THANK YOU APPLE FOR YOUR UTTER DISREGARD FOR C++20
+
+#if __cpp_lib_constexpr_vector >= 201907L
+#define OVDL_VECTOR_CONSTEXPR constexpr
+#else
+#define OVDL_VECTOR_CONSTEXPR inline
+#endif \ No newline at end of file
diff --git a/src/openvic-dataloader/detail/BasicBufferHandler.hpp b/src/openvic-dataloader/detail/BasicBufferHandler.hpp
index ba2cef9..75ea8ee 100644
--- a/src/openvic-dataloader/detail/BasicBufferHandler.hpp
+++ b/src/openvic-dataloader/detail/BasicBufferHandler.hpp
@@ -3,6 +3,7 @@
#include <optional>
#include <openvic-dataloader/ParseError.hpp>
+#include <openvic-dataloader/detail/OptionalConstexpr.hpp>
#include <lexy/encoding.hpp>
#include <lexy/input/buffer.hpp>
@@ -14,16 +15,16 @@ namespace ovdl::detail {
template<typename Encoding = lexy::default_encoding, typename MemoryResource = void>
class BasicBufferHandler {
public:
- constexpr bool is_valid() const {
+ OVDL_OPTIONAL_CONSTEXPR bool is_valid() const {
return _buffer.size() != 0;
}
- constexpr std::optional<ovdl::ParseError> load_buffer_size(const char* data, std::size_t size) {
+ OVDL_OPTIONAL_CONSTEXPR std::optional<ovdl::ParseError> load_buffer_size(const char* data, std::size_t size) {
_buffer = lexy::buffer<Encoding, MemoryResource>(data, size);
return std::nullopt;
}
- constexpr std::optional<ovdl::ParseError> load_buffer(const char* start, const char* end) {
+ OVDL_OPTIONAL_CONSTEXPR std::optional<ovdl::ParseError> load_buffer(const char* start, const char* end) {
_buffer = lexy::buffer<Encoding, MemoryResource>(start, end);
return std::nullopt;
}