netmf / llilum Goto Github PK
View Code? Open in Web Editor NEWDevelopment Platform for MSIL and UWP apps targeting Micro Controllers. Part of the .NET Micro Framework family.
License: Other
Development Platform for MSIL and UWP apps targeting Micro Controllers. Part of the .NET Micro Framework family.
License: Other
This issue is the placeholder for any discussion related to thread scheduling and management. Please provide your ideas, or any requirement you may have.
How about supporting JS (TypeScript) assemblies AOT compilation for LLILUM devices?
This work item is the placeholder for any discussion related to adopting an active object model for I/O.
It should be done during processor initialization
Have been trying to buid this project for couple days, but still can't get it works, always showing errors like:
can't open the file: "llvm/Support/Datatypes.h": No such file or directory
.....
can't open the file: "llvm/Config/llvm-config.h": No such file or directory
.....
Have no idea where i can get those header files, i install the LLVM 3.7.0 binary on my windows 10 already. Please help, thank you!!!
LLVM.NET latest commit is one year old, while LLVMSharp is alive and kicking (and developed by Mukul Sabharwal, currently employed in Microsoft).
Found while enabling redundant null dead-stripping. In GpioController.cs in the following code, provider can never be null:
IGpioPinProvider provider = new DefaultPinProvider(pinNumber);
if(provider == null)
{
pin.Dispose();
pin = null;
status = GpioOpenStatus.PinUnavailable;
return false;
}
We need to try/catch the creation of DefaultPinProvider and/or change the way we create the provider.
Most of the _XXx types in LLVMIR2 are just a set of methods wrapping an Llvm.NET class. These can be converted to extension methods that operate on the underlying Llvm.NET class instead of requiring the overhead of multiple layers of wrappers. What few properties they maintain can be stored using the Extensible property mechanism in Llvm.NET
Do you plan to enable public wiki editing?
There are a few things on the setup page that should be corrected and/or updated (minor fix for llilum-pr repository name, the GCC_BIN variable should be most likely set in the second cmd shell, Zelig.sln was renamed to LLILUM.sln; and there is startVS.cmd, LLVMIR is not under code transformations but CodeGenerator etc.)
e.g.: when doing "b main" the breakpoint is set a few instructions after the function actual start address
This work item has a dependency on the portability layer feature
In order to build LLVM cygwin (if installed) directory should be renamed (e.g. to "_cygwin64"), or CMake configuring phase won't work with many "file missing" errors.
I'm a software guy who's been getting into hardware more and more. Professionally I now code in netmf targeting custom STM32F4 boards building scientific instruments for plant research.
At home I've been playing with this Transcend Flashair SD card. It's basically an ARMv5 compatible microcontroller with wifi and storage running Linux. It's basically like a tiny web server. The default distro supports Python, etc.
Has anyone considered running llilum on these Flashair cards? Is it possible? The hacker community has already been using uboot to load custom firmware.
I just started playing a little with SDK generation and build+deploy+debug cycle.
Despite halting debugger actually breaks GDB, it seems that breakpoints are ignored (for example in Main()) and sources shown while halted aren't correct (I usually "find" myself inside Dictionary class sources 😄 !).
How could I be sure debug symbols are correctly loaded?
Additionally, is variables watching available? It seems that GDB always raises a "-var not available" error message.
Thanks!
It is almost impossible to keep track of the changes and current state of the project when there is a single commit of thousands of changed files scattered all over the whole code base touching different and unrelated areas. Even if your current workflow is to publish once in a few months, please do keep separate commits, at least on feature or logical group level. Thank you in advance.
Deployment and debugging through VS2015 with GDB
Find out a better implementation of for the [BottomOfCallStack] attribute. It seems to corrupt the registers for class member functions (such as Entrypoint() in ThreadImpl.cs). This primarily seems to affect debug builds.
The current implementation just appends the GCC "naked" attribute. We could potentially do moe optimizations by resetting the current stack pointer to the top of the stack when entering these methods.
ArmProcessorEmulation project build fails due to missing referenced assemblies:
They are supposed to be in ..\..\External\Binaries\JTAG\Debug
.
Besides all native types, we will need to support callbacks and most likely Strings
Have been trying to port llilum onto the STM32F7 disco board, finally got it working (mostly by basing it off the K64F code/build). Found one definite issue, the Set_8_BytesAlignment in ProcessorARMv7M just does a set on the CCR register, the M7 has a few new bits now for instruction and data cache, which if disabled cause bad things to occur it seems. Doing a read modify write seems to work ok.
Also if you want to build the mbed for this board I found that the mbed build scripts claim the STM32F7 disco board does not have GCC_ARM toolchain support, it appears that just a configuration file has not been updated, if you edit the py file to add GCC_ARM toolchain you can build the mbed binaries fine.
One other thing I had to do, which I'm not sure about why is that the SetPriority's of the 4 fault handlers in Peripherals had to be commented otherwise it'd hardfault, still looking into that.
in "llilum/VisualStudio/LlilumProjectType/LlilumApplication/LlilumApplication.ProjectTemplate/LlilumNative/Native.vcxproj"
tag ClInclude Include="helpers.h" meets twice. On llilum project creation causes an error.
use DIV_0_TRP and UNALIGN_TRP in CCR register of control block to route such exceptions to managed app
I have tried to build SDK with CreateSDKDrop.bat, but I got the following error :
E:\src\llilum\Zelig\Zelig\Test\mbed\SimpleSDK\Native\Native.vcxproj(26,5): error MSB4019: The imported project "E:\src\llilum\Zelig\Zelig\Test\mbed\SimpleSDK\Native\Platforms\Llilum_LPC1768.props" was not found. Confirm that the path inthe declaration is correct, and that the file exists on disk.
I have also noticed lot of errors when building Zeil image with FrontEnd project - Phase: DetectNonImplementedInternalCalls:
129,724 [ 0,891]: Phase: DetectNonImplementedInternalCalls
ERROR: missing implementation for uint Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CUSTOM_STUB_DebuggerConnected()
ERROR: missing implementation for uint Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CUSTOM_STUB_SCB__get_HFSR()
ERROR: missing implementation for uint Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CUSTOM_STUB_SCB__get_CFSR()
ERROR: missing implementation for uint Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CUSTOM_STUB_SCB__get_BFAR()
ERROR: missing implementation for uint Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CMSIS_STUB_SCB__get_CONTROL()
ERROR: missing implementation for uint Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CMSIS_STUB_SCB__get_IPSR()
ERROR: missing implementation for uint Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CMSIS_STUB_SCB__get_PSP()
ERROR: missing implementation for void Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CMSIS_STUB_SCB__set_PSP(uint)
ERROR: missing implementation for uint Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CMSIS_STUB_SCB__get_PRIMASK()
ERROR: missing implementation for uint Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CMSIS_STUB_SCB__get_BASEPRI()
ERROR: missing implementation for void Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CMSIS_STUB_SCB__set_BASEPRI(uint)
ERROR: missing implementation for void Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CUSTOM_STUB_SCB_set_CCR(uint)
ERROR: missing implementation for void Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CUSTOM_STUB_SCB_SHCRS_EnableSystemHandler(uint)
ERROR: missing implementation for void Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CUSTOM_STUB_SCB_ICSR_RaiseSystemException(uint)
ERROR: missing implementation for void Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CUSTOM_STUB_RaiseSupervisorCallForLongJump()
ERROR: missing implementation for void Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CUSTOM_STUB_RaiseSupervisorCallForStartThreads()
ERROR: missing implementation for void Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CUSTOM_STUB_RaiseSupervisorCallForRetireThread()
ERROR: missing implementation for void Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CUSTOM_STUB_SetExcReturn(uint)
ERROR: missing implementation for void Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CUSTOM_STUB_SCB_SCR_SetSystemControlRegister(uint)
ERROR: missing implementation for void Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::CMSIS_STUB_POWER_WaitForEvent()
ERROR: missing implementation for void Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::Breakpoint(uint)
ERROR: missing implementation for void Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M::Nop()
ERROR: missing implementation for uint Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M_VFP::CUSTOM_STUB_SCB__get_FPCCR()
ERROR: missing implementation for void Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M_VFP::CUSTOM_STUB_SCB__set_FPCCR(uint)
ERROR: missing implementation for uint Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.ProcessorARMv7M_VFP::CUSTOM_STUB_GetFPContextFlag()
ERROR: missing implementation for void Microsoft.Zelig.Support.mbed.Utilities::Breakpoint(uint)
ERROR: missing implementation for void Microsoft.Zelig.Support.mbed.Utilities::DebugLog0(char*,uint)
ERROR: missing implementation for void Microsoft.Zelig.Support.mbed.Utilities::DebugLog1(char*,uint,int)
ERROR: missing implementation for byte* Microsoft.Zelig.Support.mbed.Memory::malloc(uint)
ERROR: missing implementation for byte* Microsoft.Zelig.Support.mbed.Memory::free(byte*)
ERROR: missing implementation for uint Microsoft.Zelig.Support.mbed.UsTicker::us_ticker_read()
ERROR: missing implementation for void Microsoft.CortexM3OnMBED.Drivers.SystemTimer::tmp_sys_timer_init()
ERROR: missing implementation for void Microsoft.CortexM3OnMBED.Drivers.SystemTimer::tmp_timer_event_alloc(Microsoft.CortexM3OnMBED.Drivers.SystemTimer.TimerEve
ntImpl**)
ERROR: missing implementation for void Microsoft.CortexM3OnMBED.Drivers.SystemTimer::tmp_sys_timer_insert_event(Microsoft.CortexM3OnMBED.Drivers.SystemTimer.Tim
erEventImpl*,uint)
ERROR: missing implementation for void Microsoft.CortexM3OnMBED.Drivers.SystemTimer::tmp_sys_timer_remove_event(Microsoft.CortexM3OnMBED.Drivers.SystemTimer.Tim
erEventImpl*)
ERROR: missing implementation for uint Microsoft.CortexM3OnMBED.Drivers.SystemTimer::tmp_sys_timer_read()
ERROR: missing implementation for void Microsoft.CortexM3OnMBED.HardwareModel.GpioPinMbed::tmp_gpio_write(Microsoft.CortexM3OnMBED.HardwareModel.GPIOimpl*,int)
ERROR: missing implementation for int Microsoft.CortexM3OnMBED.HardwareModel.GpioPinMbed::tmp_gpio_alloc(Microsoft.CortexM3OnMBED.HardwareModel.GPIOimpl**)
ERROR: missing implementation for int Microsoft.CortexM3OnMBED.HardwareModel.GpioPinMbed::tmp_gpio_init(Microsoft.CortexM3OnMBED.HardwareModel.GPIOimpl*,int)
ERROR: missing implementation for int Microsoft.CortexM3OnMBED.HardwareModel.GpioPinMbed::tmp_gpio_free(Microsoft.CortexM3OnMBED.HardwareModel.GPIOimpl*)
ERROR: missing implementation for void Microsoft.CortexM3OnMBED.HardwareModel.GpioPinMbed::tmp_gpio_mode(Microsoft.CortexM3OnMBED.HardwareModel.GPIOimpl*,Micros
oft.CortexM3OnMBED.HardwareModel.PinMode)
ERROR: missing implementation for void Microsoft.CortexM3OnMBED.HardwareModel.GpioPinMbed::tmp_gpio_dir(Microsoft.CortexM3OnMBED.HardwareModel.GPIOimpl*,Microso
ft.CortexM3OnMBED.HardwareModel.PinDirection)
ERROR: missing implementation for void Microsoft.CortexM3OnMBED.HardwareModel.SpiChannel::tmp_spi_alloc(Microsoft.CortexM3OnMBED.HardwareModel.SpiImpl**)
ERROR: missing implementation for void Microsoft.CortexM3OnMBED.HardwareModel.SpiChannel::tmp_spi_init(Microsoft.CortexM3OnMBED.HardwareModel.SpiImpl*,int,int,i
nt,int)
ERROR: missing implementation for void Microsoft.CortexM3OnMBED.HardwareModel.SpiChannel::tmp_spi_format(Microsoft.CortexM3OnMBED.HardwareModel.SpiImpl*,int,int
,int)
ERROR: missing implementation for void Microsoft.CortexM3OnMBED.HardwareModel.SpiChannel::tmp_spi_frequency(Microsoft.CortexM3OnMBED.HardwareModel.SpiImpl*,int)
ERROR: missing implementation for void Microsoft.DeviceModels.Chipset.CortexM3.NVIC::CMSIS_STUB_NVIC_SetPriorityGrouping(uint)
ERROR: missing implementation for void Microsoft.DeviceModels.Chipset.CortexM3.NVIC::CMSIS_STUB_NVIC_SetPriority(Microsoft.Zelig.Runtime.TargetPlatform.ARMv7.Pr
ocessorARMv7M.IRQn_Type,uint)
ERROR: missing implementation for uint Microsoft.DeviceModels.Chipset.CortexM3.SysTick::CMSIS_STUB_SysTick_GetCTRL()
ERROR: missing implementation for uint Microsoft.DeviceModels.Chipset.CortexM3.SysTick::CMSIS_STUB_SysTick_GetVAL()
ERROR: missing implementation for uint Microsoft.DeviceModels.Chipset.CortexM3.SysTick::CMSIS_STUB_SysTick_GetCALIB()
ERROR: missing implementation for void Microsoft.DeviceModels.Chipset.CortexM3.SysTick::CMSIS_STUB_SysTick_SetCTRL(uint)
ERROR: missing implementation for void Microsoft.DeviceModels.Chipset.CortexM3.SysTick::CMSIS_STUB_SysTick_SetLOAD(uint)
ERROR: missing implementation for void Microsoft.DeviceModels.Chipset.CortexM3.SysTick::CMSIS_STUB_SysTick_SetVAL(uint)
ERROR: missing implementation for uint Microsoft.DeviceModels.Chipset.CortexM3.SysTick::CMSIS_STUB_CLOCK__GetSystemCoreClock()
The LLVM code generator does not correctly allocate space for types that need initialization. Types are correctly dumped among the globals, but we do make no space for initialization value.
When I load the Zelig solution, the Test\mbed\SDK\Native project doesn't load. VS2015 doesn't give an error, however, loading it in VS2013 gives the following error:
'The imported project "D:\dev\git\llilum\Zelig\Zelig\Test\mbed\SimpleSDK\Native\Platforms\Llilum_LPC1768.props" was not found...'
I have verified this file doesn't exist (Platforms directory doesn't exist).
Hi.
I have a problem when compiling sample application.
During compiling process, zeling compiler stop working with message "Zelig Compiler has stop working".
From log messages, i see the error:
"Unhandled Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at Llvm.NET.LLVMNative.DisposeModule(LLVMModuleRef M)
at Llvm.NET.Module.Dispose(Boolean disposing)
at Llvm.NET.Module.Finalize()
"
Any help is appreciated. )
Thank you.
I know you just committed a lot of these changes, but here are the few issues I had:
Some of the stubs are not defined for the K64F as far as I can tell, e.g.
CUSTOM_STUB_DebuggerConnected
CUSTOM_STUB_SCB__get_HFSR
CUSTOM_STUB_SCB__get_CFSR
CUSTOM_STUB_SCB__get_BFAR
I also had an issue where the processor context was failing a cast on the thread context and breaking, it looked like the thread context was the one in ProcessorARMv7M_VFP but the runtime was casting to the ProcessorARMv7M.Context class. Changing the processor on the K64F to derive from ProcessorARMv7M instead of ProcessorARMv7M_VFP got it working for me.
Noticed some debugging issues, breakpoints sometimes work, sometimes not or behave oddly (i.e. break wrong place). The callstack listed the line numbers correctly but double clicking to go to them jumped to random locations.
In the end I did get the little blinky test app working via the SDK, and it is all very cool =) looking forward to alpha. Also if your going to support more mbed boards the STM32F7 DISCO board with touch screen LCD would be very cool to see.
I am following the Creating a Board Support Package guide (*) and I am stuck at point 11 of Modifying the Makefile section - it seems there are a few problems:
make STM32L152
ends with error makefile:31: *** commands commence before first target. Stop.
, because the spaces were (incorrectly?) replaced with tabs in a recent commit,makefile:31: *** TARGET is undefined. Pass in TARGET for desired board. Stop.
. I think the correct command is make TARGET=STM32L152
,make: *** No rule to make target .\Microsoft.Zelig.Test.mbed.Simple_opt.o, needed by STM32L152\mbed_simple.elf. Stop.
, because Microsoft.Zelig.Test.mbed.Simple_opt.o is supposed to be created as a result of the Native project (in the next section), but the project cannot be loaded, as reported in the issue #39 (?)(*) I have already fixed minor errors there
I try to debug K64F platform. Deployment is ok, but debug session do not starts.
1>------ Deploy started: Project: Native, Configuration: Debug ARM ------
1>INFO:root:new board id detected: 02400201C5271E6438D9E3DC
1>INFO:root:board allows 5 concurrent packets
1>INFO:root:DAP SWD MODE initialised
1>INFO:root:IDCODE: 0x2BA01477
1>INFO:root:K64F not in secure state
1>INFO:root:6 hardware breakpoints, 4 literal comparators
1>INFO:root:CPU core is Cortex-M4
1>INFO:root:FPU present
1>INFO:root:4 hardware watchpoints
1>
1>[ ] 0%
1>[ ] 3%
1>[= ] 6%
1>[= ] 9%
1>[== ] 12%
1>[== ] 15%
1>[=== ] 18%
1>[==== ] 21%
1>[==== ] 24%
1>[===== ] 26%
1>[===== ] 29%
1>[====== ] 32%
1>[======= ] 35%
1>[======= ] 38%
1>[======== ] 41%
1>[======== ] 44%
1>[========= ] 47%
1>[========== ] 50%
1>[========== ] 53%
1>[=========== ] 56%
1>[=========== ] 59%
1>[============ ] 62%
1>[============ ] 65%
1>[============= ] 68%
1>[============== ] 71%
1>[============== ] 74%
1>[=============== ] 76%
1>[=============== ] 79%
1>[================ ] 82%
1>[================= ] 85%
1>[================= ] 88%
1>[================== ] 91%
1>[================== ] 94%
1>[====================] 100%
1>WARNING: file already exists but should not:
...\Temp_MEI86002\include\pyconfig.h
========== Deploy: 1 succeeded, 0 failed, 0 skipped ==========
Note: gdb server succesfully starts
Which options are most needed?
Any other?
Zelig seems to crash if you use generic collections (a dictionary in this case), seems to be at this spot (Zelig\Zelig\CompileTime\CodeGenerator\CodeTransformation\LLVM\LLVMModuleManager_Types.cs:153)
The type in question is:
System.Collections.Generic.Dictionary`2<TKey,TValue>.Entry<TKey,TValue>&
In a previous commit you had a check there that if the underlying type was null it would return null. Putting that back in gets a bit further, but eventually I get an assert for this type:
System.Collections.Generic.EqualityComparer`1<T>
assert being from LLVM\lib\IR\Type.cpp
"Expression isOpaque() && "Struct body already set!"
This class ( http://pastebin.com/gsptjk3D ) in the simple project generates these issues, add this the main in program.cs
var font = Font.LoadFromFile("DEJAVU.FNT");
I am try to compile K64F target and receive linkage error:
Link:
D:\mydocs\gitHub\llilum\Scripts\SDKDrop\mbed\TARGET_K64F/TOOLCHAIN_GCC_ARM/mbed_overrides.o: In function NMI_Handler': mbed_overrides.c:(.text.NMI_Handler+0x0): multiple definition of
NMI_Handler' ARM\Debug\SimpleTestProgram.o:D:\mydocs\gitHub\llilum\Zelig\Zelig\RunTime\Zelig\Kernel\HardwareModel\TargetPlatform\ARMv7/ProcessorARMv7M_ContextSwitch.cs:651: first defined here
collect2.exe : error : ld returned 1 exit status
Can anyone help me?
LibLLVM project's Intermediate Directory is set to root, which causes build failure during attempt to write artefacts to directory for which it does not have permissions.
It is apparently missing leading ..
, like the Output Directory (right above in the project properties dialog).
Enable test Simple_TestClass_init_init_a_05 to repro, and other tests that refer to this issue (#55)
Currently we rely on the reset value for enabling exception line SVC, PendSV and SysTick, we should enable them explicitly during processor initialization
We can use LLILUM to enforce or detect memory allocation patters and scheduling patterns. For example we can create an attribute such as [NoAllocate] and use it with a method to ensure that no memory allocation will be performed by any function called directly or indirectly by that method. This method would be useful to enforce memory usage patters at compilation time.
Or we can create an attribute such as [DoNotSwitch] to tell the scheduler not to context switch the calling thread of the methods decorated with such attribute. Such attribute could be useful, for example, to driver a PWM motor with no hiccups.
These are just two examples.
Any idea is welcome.
Sorry for opening so many issues here, but i really want to try the llilum, when i trying to do the debugging with the llilum managed code project, the visual studio will throws an ECall exception at the code
int invalidPin = HardwareProvider.Instance.InvalidPin;
in the BaseSerialStream.cs file
Currently we allow entering thread mode from any exception level. We should reconsider allowing thread mode only when no exception are active, pending completion of InterruptController driver.
See usage of macro c_CCR_STD_CONFIG_8 in ProcessorARMv7M.cs
Which one is the most compelling?
any other?
Hope STM32 series would be supported soon, the current kits are too expensive for students.. Thanks for great works!
How about supporting IronPython assemblies AOT compilation for LLILUM devices?
I just got the LLVM successfully builded, but still having problems when build the CreateSDKDrop.bat & Zelig.sln, there are two errors always appear.
error: ‘class llvm::DIBuilder’ has no member named ‘createLocalVariable’
error: 'llvm:DIBuilder::createSubroutineType' can't accept 3 params.
Please advise how to fix it, thank you~~
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.