Skip to content

Commit 1bed5b1

Browse files
authored
Add System.Runtime.Serialization (#2492)
***NO_CI***
1 parent cad52c0 commit 1bed5b1

21 files changed

+1579
-805
lines changed

CMake/Modules/FindNF_CoreCLR.cmake

+12-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ set(NF_CoreCLR_SRCS
135135

136136
# Core stubs
137137
RPC_stub.cpp
138-
BinaryFormatter_stub.cpp
139138

140139
# CLR stubs
141140
Debugger_stub.cpp
@@ -181,6 +180,18 @@ if(NF_FEATURE_SUPPORT_REFLECTION)
181180
list(APPEND NF_CoreCLR_SRCS corlib_native_System_Reflection_RuntimeMethodInfo.cpp)
182181
list(APPEND NF_CoreCLR_SRCS corlib_native_System_RuntimeType.cpp)
183182
list(APPEND NF_CoreCLR_SRCS corlib_native_System_Type.cpp)
183+
184+
# should we include binary serialization support?
185+
if(NF_FEATURE_BINARY_SERIALIZATION)
186+
list(APPEND NF_CoreCLR_SRCS BinaryFormatter.cpp)
187+
else()
188+
# binary serialization stubs because we're not supporting reflection
189+
list(APPEND NF_CoreCLR_SRCS BinaryFormatter_stub.cpp)
190+
endif()
191+
192+
else()
193+
# binary serialization stubs because we're not supporting reflection
194+
list(APPEND NF_CoreCLR_SRCS BinaryFormatter_stub.cpp)
184195
endif()
185196

186197
# include Collection support files depending on build option

CMake/Modules/FindNF_NativeAssemblies.cmake

+7
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ option(API_System.Device.I2s "option for System.Device.I2s AP
2727
option(API_System.Device.Pwm "option for System.Device.Pwm API")
2828
option(API_System.IO.Ports "option for System.IO.Ports API")
2929
option(API_System.Device.Spi "option for System.Device.Spi API")
30+
option(API_System.Runtime.Serialization "option for System.Runtime.Serialization API")
3031
option(API_Windows.Storage "option for Windows.Storage")
3132
option(API_nanoFramework.Graphics "option for nanoFramework.Graphics")
3233
option(API_nanoFramework.Device.Bluetooth "option for nanoFramework.Device.Bluetooth")
@@ -318,6 +319,12 @@ if(API_System.Device.Spi)
318319
PerformSettingsForApiEntry("System.Device.Spi")
319320
endif()
320321

322+
# System.Runtime.Serialization
323+
if(API_System.Runtime.Serialization)
324+
##### API name here (doted name)
325+
PerformSettingsForApiEntry("System.Runtime.Serialization")
326+
endif()
327+
321328
# System.Device.Wifi
322329
if(API_System.Device.Wifi)
323330
##### API name here (doted name)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#
2+
# Copyright (c) .NET Foundation and Contributors
3+
# See LICENSE file in the project root for full license information.
4+
#
5+
6+
# native code directory
7+
set(BASE_PATH_FOR_THIS_MODULE ${BASE_PATH_FOR_CLASS_LIBRARIES_MODULES}/System.Runtime.Serialization)
8+
9+
10+
# set include directories
11+
list(APPEND System.Runtime.Serialization_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/src/CLR/Core)
12+
list(APPEND System.Runtime.Serialization_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/src/CLR/Include)
13+
list(APPEND System.Runtime.Serialization_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/src/HAL/Include)
14+
list(APPEND System.Runtime.Serialization_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/src/PAL/Include)
15+
list(APPEND System.Runtime.Serialization_INCLUDE_DIRS ${BASE_PATH_FOR_THIS_MODULE})
16+
list(APPEND System.Runtime.Serialization_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/src/System.Runtime.Serialization)
17+
18+
# source files
19+
set(System.Runtime.Serialization_SRCS
20+
21+
nf_system_runtime_serialization.cpp
22+
23+
nf_system_runtime_serialization_System_Runtime_Serialization_Formatters_Binary_BinaryFormatter.cpp
24+
25+
)
26+
27+
foreach(SRC_FILE ${System.Runtime.Serialization_SRCS})
28+
29+
set(System.Runtime.Serialization_SRC_FILE SRC_FILE-NOTFOUND)
30+
31+
find_file(System.Runtime.Serialization_SRC_FILE ${SRC_FILE}
32+
PATHS
33+
${BASE_PATH_FOR_THIS_MODULE}
34+
${TARGET_BASE_LOCATION}
35+
${PROJECT_SOURCE_DIR}/src/System.Runtime.Serialization
36+
37+
CMAKE_FIND_ROOT_PATH_BOTH
38+
)
39+
40+
if (BUILD_VERBOSE)
41+
message("${SRC_FILE} >> ${System.Runtime.Serialization_SRC_FILE}")
42+
endif()
43+
44+
list(APPEND System.Runtime.Serialization_SOURCES ${System.Runtime.Serialization_SRC_FILE})
45+
46+
endforeach()
47+
48+
include(FindPackageHandleStandardArgs)
49+
50+
FIND_PACKAGE_HANDLE_STANDARD_ARGS(System.Runtime.Serialization DEFAULT_MSG System.Runtime.Serialization_INCLUDE_DIRS System.Runtime.Serialization_SOURCES)

CMakeLists.txt

+16-1
Original file line numberDiff line numberDiff line change
@@ -446,15 +446,30 @@ option(NF_NETWORKING_ENC28J60 "option to use ENC28J60 network driver")
446446
# handles inclusion of System.Reflection API
447447
#############################################
448448

449-
# set default option for SNTP to ON
449+
# set default option for Reflection API to ON
450450
option(NF_FEATURE_SUPPORT_REFLECTION "option to add support for System.Reflection API" ON)
451+
# set default option for Serialization API to ON
452+
option(NF_FEATURE_BINARY_SERIALIZATION "option to add support for binary serialization" ON)
451453

452454
if(NF_FEATURE_SUPPORT_REFLECTION)
453455
set(TARGET_NANOCLR_REFLECTION TRUE CACHE INTERNAL "enable support for System.Reflection API")
454456
message(STATUS "Support for System.Reflection API enabled")
457+
458+
if(NF_FEATURE_BINARY_SERIALIZATION)
459+
set(API_System.Runtime.Serialization TRUE CACHE INTERNAL "enable support for System.Runtime.Serialization API")
460+
message(STATUS "Support for binary serialization enabled")
461+
else()
462+
set(API_System.Runtime.Serialization FALSE CACHE INTERNAL "disable support for System.Runtime.Serialization API")
463+
message(STATUS "Support for binary serialization **IS NOT** enabled")
464+
endif()
465+
455466
else()
456467
set(TARGET_NANOCLR_REFLECTION FALSE CACHE INTERNAL "DISABLE support for System.Reflection API")
457468
message(STATUS "Support for System.Reflection API **IS NOT** enabled")
469+
470+
# disable binary serialization if Reflection is disabled
471+
set(API_System.Runtime.Serialization FALSE CACHE INTERNAL "disable support for System.Runtime.Serialization API")
472+
message(STATUS "Support for binary serialization **IS NOT** enabled")
458473
endif()
459474

460475
#################################################################

CMakeUserPresets.TEMPLATE.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,8 @@
9393
],
9494
"cacheVariables": {
9595
"TARGET_BOARD": "${presetName}",
96-
"NF_INTEROP_ASSEMBLIES": null
96+
"NF_INTEROP_ASSEMBLIES": null,
97+
"NF_FEATURE_BINARY_SERIALIZATION": "OFF"
9798
}
9899
},
99100
{

nf.props

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
<ItemDefinitionGroup>
1818
<ClCompile>
19-
<PreprocessorDefinitions>VIRTUAL_DEVICE;SUPPORT_ANY_BASE_CONVERSION;NANOCLR_REFLECTION=TRUE;NANOCLR_SYSTEM_COLLECTIONS=TRUE;</PreprocessorDefinitions>
19+
<PreprocessorDefinitions>VIRTUAL_DEVICE;NANOCLR_BINARY_SERIALIZATION;SUPPORT_ANY_BASE_CONVERSION;NANOCLR_REFLECTION=TRUE;NANOCLR_SYSTEM_COLLECTIONS=TRUE;</PreprocessorDefinitions>
2020
<LanguageStandard>stdcpp20</LanguageStandard>
2121
<LanguageStandard_C>stdc17</LanguageStandard_C>
2222
</ClCompile>

src/CLR/CorLib/corlib_native_System_WeakReference.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ HRESULT CLR_RT_HeapBlock_WeakReference::GetTarget(CLR_RT_HeapBlock &targetRefere
131131
CLR_RT_ProtectFromGC gcInput(input);
132132
CLR_RT_ProtectFromGC gcOutput(output);
133133

134-
if (FAILED(CLR_RT_BinaryFormatter::Deserialize(output, input, NULL, NULL, 0)))
134+
if (FAILED(CLR_RT_BinaryFormatter::Deserialize(output, input, NULL, 0)))
135135
{
136136
output.SetObjectReference(NULL);
137137
}

0 commit comments

Comments
 (0)