Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add SDL3 bindings for C headers with support for all platforms #1

Merged
merged 37 commits into from
Apr 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
7012887
Add global/base files
Susko3 Apr 3, 2024
1512bef
Initial SDL3-CS binding project with ClangSharp
Susko3 Apr 5, 2024
72353a8
Undefine _WIN32 to generate only platform-agnostic APIs
Susko3 Apr 5, 2024
efc9422
Fix errors in `SDL_pixels.g.cs` by specifying enum types
Susko3 Apr 5, 2024
4fbe435
Fix errors in `SDL_stdinc.g.cs` with define magic
Susko3 Apr 5, 2024
0fc701a
Add simple check for generated functions
Susko3 Apr 5, 2024
2ccdcb0
Add platform specific generation for `SDL_main.h` and `SDL_system.h`
Susko3 Apr 5, 2024
cef2e24
Fix duplicate `XEvent` struct definitions
Susko3 Apr 5, 2024
ba56109
Fix missing <endian.h> when cross-compiling on windows
Susko3 Apr 5, 2024
52d13f2
Add custom definition for win32 MSG struct
Susko3 Apr 5, 2024
4ed850c
Exclude `SDL_main()` from DllImport as it isn't exported by SDL3.dll
Susko3 Apr 5, 2024
a2178e0
Add recommended remapping for `SDL_hidapi.h`
Susko3 Apr 6, 2024
13b34fe
Remap `wchar_t *` to `IntPtr`
Susko3 Apr 6, 2024
53f98fe
Map C `char` to C# `byte` instead of `sbyte`
Susko3 Apr 6, 2024
dfe2b5b
Remap C `void *` to C# `IntPtr`
Susko3 Apr 6, 2024
75a9cde
Don't log potential typedef remappings
Susko3 Apr 6, 2024
a25b4be
Add [UnsupportedOSPlatform("windows")] to `SDL_CreateThread()` functions
Susko3 Apr 6, 2024
dfe0d25
Add `[Flags]` attribute to mask/flags enums
Susko3 Apr 6, 2024
409ecf7
Add C# enum "typedefs" for C typedefs
Susko3 Apr 6, 2024
9e44316
Fix invalid `int` -> `SDL_bool` conversion by manually changing SDL h…
Susko3 Apr 6, 2024
caa4820
Manually define broken constants
Susko3 Apr 6, 2024
37da786
Define `SDL_FUNCTION_POINTER_IS_VOID_POINTER`
Susko3 Apr 6, 2024
5747f16
Manually implement endianness-specific audio formats
Susko3 Apr 6, 2024
b97a553
Remap `SDL_KeyCode` enum to `SDL_Keycode` typedef
Susko3 Apr 6, 2024
4b1a1e2
Move `SDL_Keycode` typdef to global python script to avoid duplicate …
Susko3 Apr 6, 2024
42b1966
Manually implement macro functions
Susko3 Apr 6, 2024
702dc06
Add `void *` overload for `SDL_free()`
Susko3 Apr 6, 2024
711e004
Add `PtrToStringUTF8()` for `byte *`
Susko3 Apr 6, 2024
9a5d2e4
Add C# type-friendly properties/getters to some structs
Susko3 Apr 6, 2024
75db9b1
Add memory safe IDisposable overloads to array-returning functions
Susko3 Apr 6, 2024
c5e3181
Add source generator for `ReadOnlySpan<byte>` overloads of C `const c…
Susko3 Apr 6, 2024
91cef07
Add friendly `string?` overloads to C `(const) char *` functions
Susko3 Apr 6, 2024
e85349e
Change SDL sources to use more proper types
Susko3 Apr 6, 2024
bb9834d
Add sample/tests project
Susko3 Apr 6, 2024
3edde48
Add [MustDisposeResource] annoations to array helpers
Susko3 Apr 6, 2024
8003b85
Add DotSettings
smoogipoo Apr 7, 2024
913afa5
Refactorings + auto styling
smoogipoo Apr 7, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .config/dotnet-tools.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"version": 1,
"isRoot": true,
"tools": {
"clangsharppinvokegenerator": {
"version": "17.0.1",
"commands": [
"ClangSharpPInvokeGenerator"
]
}
}
}
140 changes: 140 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
# EditorConfig is awesome: http://editorconfig.org
root = true

[*.{csproj,props,targets}]
charset = utf-8-bom
end_of_line = crlf
insert_final_newline = true
indent_style = space
indent_size = 2
trim_trailing_whitespace = true

[*g.cs]
generated_code = true

[*.cs]
end_of_line = crlf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true

#license header
file_header_template = Copyright (c) ppy Pty Ltd <[email protected]>. Licensed under the MIT Licence.\nSee the LICENCE file in the repository root for full licence text.

#Roslyn naming styles
# Disabled as we're mimicking SDL naming

#Roslyn formating options

#Formatting - indentation options
csharp_indent_case_contents = true
csharp_indent_case_contents_when_block = false
csharp_indent_labels = one_less_than_current
csharp_indent_switch_labels = true

#Formatting - new line options
csharp_new_line_before_catch = true
csharp_new_line_before_else = true
csharp_new_line_before_finally = true
csharp_new_line_before_open_brace = all
#csharp_new_line_before_members_in_anonymous_types = true
#csharp_new_line_before_members_in_object_initializers = true # Currently no effect in VS/dotnet format (16.4), and makes Rider confusing
csharp_new_line_between_query_expression_clauses = true

#Formatting - organize using options
dotnet_sort_system_directives_first = true

#Formatting - spacing options
csharp_space_after_cast = false
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_parameter_list_parentheses = false

#Formatting - wrapping options
csharp_preserve_single_line_blocks = true
csharp_preserve_single_line_statements = true

#Roslyn language styles

#Style - this. qualification
dotnet_style_qualification_for_field = false:warning
dotnet_style_qualification_for_property = false:warning
dotnet_style_qualification_for_method = false:warning
dotnet_style_qualification_for_event = false:warning

#Style - type names
dotnet_style_predefined_type_for_locals_parameters_members = true:none
dotnet_style_predefined_type_for_member_access = true:none
csharp_style_var_when_type_is_apparent = true:none
csharp_style_var_for_built_in_types = false:warning
csharp_style_var_elsewhere = true:silent

#Style - modifiers
dotnet_style_require_accessibility_modifiers = for_non_interface_members:warning
csharp_preferred_modifier_order = public,private,protected,internal,new,abstract,virtual,sealed,override,static,readonly,extern,unsafe,volatile,async:warning

#Style - parentheses
# Skipped because roslyn cannot separate +-*/ with << >>

#Style - expression bodies
csharp_style_expression_bodied_accessors = true:warning
csharp_style_expression_bodied_constructors = false:none
csharp_style_expression_bodied_indexers = true:warning
csharp_style_expression_bodied_methods = false:silent
csharp_style_expression_bodied_operators = true:warning
csharp_style_expression_bodied_properties = true:warning
csharp_style_expression_bodied_local_functions = true:silent

#Style - expression preferences
dotnet_style_object_initializer = true:warning
dotnet_style_collection_initializer = true:warning
dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning
dotnet_style_prefer_auto_properties = true:warning
dotnet_style_prefer_conditional_expression_over_assignment = true:silent
dotnet_style_prefer_conditional_expression_over_return = true:silent
dotnet_style_prefer_compound_assignment = true:warning

#Style - null/type checks
dotnet_style_coalesce_expression = true:warning
dotnet_style_null_propagation = true:warning
csharp_style_pattern_matching_over_is_with_cast_check = true:warning
csharp_style_pattern_matching_over_as_with_null_check = true:warning
csharp_style_throw_expression = true:silent
csharp_style_conditional_delegate_call = true:warning

#Style - unused
dotnet_style_readonly_field = true:silent
dotnet_code_quality_unused_parameters = non_public:silent
csharp_style_unused_value_expression_statement_preference = discard_variable:silent
csharp_style_unused_value_assignment_preference = discard_variable:warning

#Style - variable declaration
csharp_style_inlined_variable_declaration = true:warning
csharp_style_deconstructed_variable_declaration = true:warning

#Style - other C# 7.x features
dotnet_style_prefer_inferred_tuple_names = true:warning
csharp_prefer_simple_default_expression = true:warning
csharp_style_pattern_local_over_anonymous_function = true:warning
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:silent

#Style - C# 8 features
csharp_prefer_static_local_function = true:warning
csharp_prefer_simple_using_statement = true:silent
csharp_style_prefer_index_operator = true:warning
csharp_style_prefer_range_operator = true:warning
csharp_style_prefer_switch_expression = false:none

csharp_style_namespace_declarations = block_scoped:warning

[*.{yaml,yml}]
insert_final_newline = true
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
25 changes: 25 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Autodetect text files and ensure that we normalise their
# line endings to lf internally. When checked out they may
# use different line endings.
* text=auto

# Check out with crlf (Windows) line endings
*.sln text eol=crlf
*.csproj text eol=crlf
*.cs text diff=csharp eol=crlf
*.resx text eol=crlf
*.vsixmanifest text eol=crlf
packages.config text eol=crlf
App.config text eol=crlf
*.bat text eol=crlf
*.cmd text eol=crlf
*.snippet text eol=crlf
*.manifest text eol=crlf
*.licenseheader text eol=crlf

# Check out with lf (UNIX) line endings
*.sh text eol=lf
.gitignore text eol=lf
.gitattributes text eol=lf
*.md text eol=lf
.travis.yml text eol=lf
Loading