This patch makes the generation of StaticDescriptorInitializer_$filename$
depend on whether LITE_RUNTIME is enabled. Note that this works only when
extensions are not used.
This lets us significantly decrease the number of static initializers generated
by protoc in LITE_RUNTIME mode (used in Chromium).
In LITE_RUNTIME mode, $adddescriptorsname$() is called the first time that
default_instance() is called (rather than being called during static init).
To benefit from this patch in LITE_RUNTIME mode without extensions, compile
with -DGOOGLE_PROTOBUF_NO_STATIC_INIT.
BUG=351
It is based on V8's new CallOnce(): http://codereview.chromium.org/9447052/.
This patch includes the following changes:
- POD (no static initializer generated) and faster implementation on Windows.
- GoogleOnceInit() can now take an additional parameter which is forwarded to
the function provided by the user.
This patch is part of the static initializers removal initiative.
1. Refactoring of build to allow multiple target frameworks
2. Addition of multiple Silverlight versions
3. Renamed *_Silverlight2 configurations to *_Silverlight
4. Added batch files for each framework build (Build20, Build35, Build40)
5. Moved the package building into MSBuild tasks
6. BuildAll.bat now builds all packages in one build
7. Removed Generate*Package.bat batch files (replaced by BuildAll.bat)
8. Removed the ability to build with 3.5 MSBuild
9. Source is only generated with Release/2.0 build of ProtoGen
10. Removed unit testing proto files from packaging
11. Removed the remaining 'pause' statements from all batch files
12. RunBenchmarks target now builds with .NET 2.0 instead of 4.0
13. Benchmark arguments can now be specified with BenchmarkArgs parameter
14. ProtoBench now supports '/log:path' so console can still see progress
15. Updated PublishRelease.bat and *.nuspec for new build output
16. Updated ProtocolBuffers.Serialization.csproj to omit extensions for 2.0
17. Added NUnit console configurations for each .NET framework version