diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/.gitignore | 1 | ||||
| -rw-r--r-- | lib/Djup.Native/.gitignore | 2 | ||||
| -rw-r--r-- | lib/Djup.Native/Djup.Native.csproj | 27 | ||||
| -rw-r--r-- | lib/Djup.Native/LibDjup.cs | 12 | ||||
| -rw-r--r-- | lib/Djup.Native/Program.cs | 2 | ||||
| -rwxr-xr-x | lib/build.sh | 52 | ||||
| -rw-r--r-- | lib/test.c | 9 | ||||
| -rw-r--r-- | lib/types.h | 4 |
8 files changed, 109 insertions, 0 deletions
diff --git a/lib/.gitignore b/lib/.gitignore new file mode 100644 index 0000000..567609b --- /dev/null +++ b/lib/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/lib/Djup.Native/.gitignore b/lib/Djup.Native/.gitignore new file mode 100644 index 0000000..c6e49ef --- /dev/null +++ b/lib/Djup.Native/.gitignore @@ -0,0 +1,2 @@ +obj/ +bin/ diff --git a/lib/Djup.Native/Djup.Native.csproj b/lib/Djup.Native/Djup.Native.csproj new file mode 100644 index 0000000..7184efb --- /dev/null +++ b/lib/Djup.Native/Djup.Native.csproj @@ -0,0 +1,27 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <TargetFramework>net8.0</TargetFramework> + <!--<OutputType>exe</OutputType>--> + <ImplicitUsings>enable</ImplicitUsings> + <Nullable>enable</Nullable> + <AllowUnsafeBlocks>true</AllowUnsafeBlocks> + </PropertyGroup> + <ItemGroup Condition=" '$(Configuration)'=='Release' "> + <None Include="$(MSBuildThisFileDirectory)../build/runtimes/linux-x64/native/libdjup.so"> + <TargetPath>runtimes/linux-x64/native/libdjup.so</TargetPath> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + <PackagePath>runtimes/linux-x64/native/</PackagePath> + <Pack>true</Pack> + </None> + </ItemGroup> + <ItemGroup Condition=" '$(Configuration)'=='Debug' "> + <Content Include="$(MSBuildThisFileDirectory)../build/**"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + </ItemGroup> + <!-- This fixes import errors (adding another library with native assets) --> + <!--<ItemGroup>--> + <!-- <PackageReference Include="SQLitePCLRaw.lib.e_sqlite3" Version="2.1.10" />--> + <!--</ItemGroup>--> +</Project> diff --git a/lib/Djup.Native/LibDjup.cs b/lib/Djup.Native/LibDjup.cs new file mode 100644 index 0000000..5e6db83 --- /dev/null +++ b/lib/Djup.Native/LibDjup.cs @@ -0,0 +1,12 @@ +using System.Runtime.InteropServices; + +namespace Djup.Native; + +public static partial class LibDjup +{ + const string LibraryName = "djup"; + const string Prefix = "dp_"; + + [LibraryImport(LibraryName, EntryPoint = Prefix + nameof(hello_world))] + public static partial void hello_world(); +} diff --git a/lib/Djup.Native/Program.cs b/lib/Djup.Native/Program.cs new file mode 100644 index 0000000..2667048 --- /dev/null +++ b/lib/Djup.Native/Program.cs @@ -0,0 +1,2 @@ +/*using Djup.Native;*/ +/*LibDjup.hello_world();*/ diff --git a/lib/build.sh b/lib/build.sh new file mode 100755 index 0000000..f506120 --- /dev/null +++ b/lib/build.sh @@ -0,0 +1,52 @@ +#!/bin/sh + +fail() { + echo "$0: $*" >&2 + exit 1 +} + +CC=cc +CFLAGS="-std=c99 -Wall -Wextra -Wpedantic -D_POSIX_C_SOURCE=200809L" +LDFLAGS="-fPIC" +SOURCES="test.c" +output="build" + +for arg ; do + case "$arg" in + --runtime=*) + runtime="${arg#*=}" + ;; + --output=*) + output="${arg#*=}" + ;; + *) + echo "usage" + ;; + esac +done + +if [ -z "$runtime" ]; then + echo "Guessing runtime ..." + + case "$(uname -s)" in + Linux) + case "$(uname -m)" in + x86_64) + runtime="linux-x64" + ;; + esac + ;; + esac +fi + +case "$runtime" in + linux-x64) + sofile="libdjup.so" + ;; + *) + fail "Unsupported runtime $runtime" +esac + +echo Building for runtime "$runtime ..." +mkdir -p "$output/runtimes/$runtime/native" && $CC $CFLAGS $SOURCES -shared $LDFLAGS -o "$output/runtimes/$runtime/native/$sofile" +echo Done diff --git a/lib/test.c b/lib/test.c new file mode 100644 index 0000000..78a0d02 --- /dev/null +++ b/lib/test.c @@ -0,0 +1,9 @@ +#include <stdio.h> + +#include "types.h" + +void +dp_hello_world() +{ + printf("Hello World\n"); +} diff --git a/lib/types.h b/lib/types.h new file mode 100644 index 0000000..afffd4f --- /dev/null +++ b/lib/types.h @@ -0,0 +1,4 @@ +typedef struct { + float x; + float y; +} vec2; |
