node/deps/uv/README.md

187 lines
5.0 KiB
Markdown
Raw Normal View History

2014-08-07 19:03:17 +08:00
![libuv][libuv_banner]
## Overview
2011-09-24 02:07:57 +08:00
2013-10-30 07:33:17 +08:00
libuv is a multi-platform support library with a focus on asynchronous I/O. It
2013-12-14 02:35:09 +08:00
was primarily developed for use by [Node.js](http://nodejs.org), but it's also
used by [Luvit](http://luvit.io/), [Julia](http://julialang.org/),
[pyuv](https://github.com/saghul/pyuv), and [others](https://github.com/libuv/libuv/wiki/Projects-that-use-libuv).
2011-05-13 10:16:40 +08:00
2013-10-30 07:33:17 +08:00
## Feature highlights
2011-09-24 02:07:57 +08:00
2013-10-30 07:33:17 +08:00
* Full-featured event loop backed by epoll, kqueue, IOCP, event ports.
2011-09-24 02:07:57 +08:00
2013-10-30 07:33:17 +08:00
* Asynchronous TCP and UDP sockets
2011-09-24 02:07:57 +08:00
2013-10-30 07:33:17 +08:00
* Asynchronous DNS resolution
2011-09-24 02:07:57 +08:00
2013-10-30 07:33:17 +08:00
* Asynchronous file and file system operations
2011-09-24 11:23:41 +08:00
2013-10-30 07:33:17 +08:00
* File system events
2011-09-24 02:07:57 +08:00
2013-10-30 07:33:17 +08:00
* ANSI escape code controlled TTY
2011-09-24 02:07:57 +08:00
2013-10-30 07:33:17 +08:00
* IPC with socket sharing, using Unix domain sockets or named pipes (Windows)
2011-09-24 02:07:57 +08:00
2013-10-30 07:33:17 +08:00
* Child processes
2011-09-24 02:07:57 +08:00
2013-10-30 07:33:17 +08:00
* Thread pool
2011-09-24 02:07:57 +08:00
2013-10-30 07:33:17 +08:00
* Signal handling
2011-09-24 02:07:57 +08:00
2013-10-30 07:33:17 +08:00
* High resolution clock
2011-10-01 02:22:38 +08:00
2013-10-30 07:33:17 +08:00
* Threading and synchronization primitives
2011-09-24 02:07:57 +08:00
2014-09-20 01:37:55 +08:00
## Versioning
Starting with version 1.0.0 libuv follows the [semantic versioning](http://semver.org/)
scheme. The API change and backwards compatibility rules are those indicated by
2014-09-20 01:37:55 +08:00
SemVer. libuv will keep a stable ABI across major releases.
2011-09-24 02:07:57 +08:00
2012-10-07 05:04:30 +08:00
## Community
* [Mailing list](http://groups.google.com/group/libuv)
* [IRC chatroom (#libuv@irc.freenode.org)](http://webchat.freenode.net?channels=libuv&uio=d4)
2011-09-24 02:07:57 +08:00
## Documentation
2014-09-20 01:37:55 +08:00
### Official API documentation
Located in the docs/ subdirectory. It uses the [Sphinx](http://sphinx-doc.org/)
framework, which makes it possible to build the documentation in multiple
formats.
Show different supported building options:
$ make help
Build documentation as HTML:
$ make html
Build documentation as man pages:
$ make man
Build documentation as ePub:
$ make epub
NOTE: Windows users need to use make.bat instead of plain 'make'.
Documentation can be browsed online [here](http://docs.libuv.org).
### Other resources
2014-01-01 02:33:54 +08:00
* [An Introduction to libuv](http://nikhilm.github.com/uvbook/)
— An overview of libuv with tutorials.
* [LXJS 2012 talk](http://www.youtube.com/watch?v=nGn60vDSxQ4)
— High-level introductory talk about libuv.
* [Tests and benchmarks](https://github.com/libuv/libuv/tree/master/test)
2014-01-01 02:33:54 +08:00
— API specification and usage examples.
* [libuv-dox](https://github.com/thlorenz/libuv-dox)
— Documenting types and methods of libuv, mostly by reading uv.h.
* [learnuv](https://github.com/thlorenz/learnuv)
— Learn uv for fun and profit, a self guided workshop to libuv.
2011-09-24 02:07:57 +08:00
## Build Instructions
2011-05-13 10:16:40 +08:00
For GCC there are two build methods: via autotools or via [GYP][].
2013-07-17 03:04:31 +08:00
GYP is a meta-build system which can generate MSVS, Makefile, and XCode
backends. It is best used for integration into other projects.
2013-02-21 04:12:18 +08:00
2013-07-17 03:04:31 +08:00
To build with autotools:
2013-02-21 04:12:18 +08:00
2013-07-17 03:04:31 +08:00
$ sh autogen.sh
$ ./configure
$ make
$ make check
$ make install
2013-06-27 01:48:10 +08:00
2013-10-30 07:33:17 +08:00
### Windows
2011-08-06 18:38:11 +08:00
2014-06-27 08:44:36 +08:00
First, [Python][] 2.6 or 2.7 must be installed as it is required by [GYP][].
If python is not in your path, set the environment variable `PYTHON` to its
2014-06-27 08:44:36 +08:00
location. For example: `set PYTHON=C:\Python27\python.exe`
2013-10-30 07:33:17 +08:00
To build with Visual Studio, launch a git shell (e.g. Cmd or PowerShell)
and run vcbuild.bat which will checkout the GYP code into build/gyp and
generate uv.sln as well as related project files.
To have GYP generate build script for another system, checkout GYP into the
2013-01-22 23:21:25 +08:00
project tree manually:
2011-08-06 18:38:11 +08:00
$ git clone https://chromium.googlesource.com/external/gyp.git build/gyp
OR
$ svn co http://gyp.googlecode.com/svn/trunk build/gyp
2011-08-09 05:14:47 +08:00
2013-10-30 07:33:17 +08:00
### Unix
Run:
2013-01-22 23:21:25 +08:00
2013-11-21 00:25:24 +08:00
$ ./gyp_uv.py -f make
2013-07-17 03:04:31 +08:00
$ make -C out
2013-01-22 23:21:25 +08:00
Run `./gyp_uv.py -f make -Dtarget_arch=x32` to build [x32][] binaries.
2013-10-30 07:33:17 +08:00
### OS X
Run:
2011-08-09 05:14:47 +08:00
2013-11-21 00:25:24 +08:00
$ ./gyp_uv.py -f xcode
2014-01-28 01:30:51 +08:00
$ xcodebuild -ARCHS="x86_64" -project uv.xcodeproj \
-configuration Release -target All
Using Homebrew:
$ brew install --HEAD libuv
2014-01-28 01:30:51 +08:00
Note to OS X users:
Make sure that you specify the architecture you wish to build for in the
"ARCHS" flag. You can specify more than one by delimiting with a space
(e.g. "x86_64 i386").
2011-08-09 05:14:47 +08:00
2013-10-30 07:33:17 +08:00
### Android
Run:
2011-08-09 05:14:47 +08:00
2013-07-17 03:04:31 +08:00
$ source ./android-configure NDK_PATH gyp
$ make -C out
2011-08-06 18:38:11 +08:00
2013-02-21 04:12:18 +08:00
Note for UNIX users: compile your project with `-D_LARGEFILE_SOURCE` and
`-D_FILE_OFFSET_BITS=64`. GYP builds take care of that automatically.
2013-12-14 02:35:09 +08:00
### Running tests
Run:
$ ./gyp_uv.py -f make
$ make -C out
$ ./out/Debug/run-tests
2011-09-24 02:07:57 +08:00
## Supported Platforms
2011-05-13 10:16:40 +08:00
2011-08-09 05:14:47 +08:00
Microsoft Windows operating systems since Windows XP SP2. It can be built
2013-04-12 23:43:05 +08:00
with either Visual Studio or MinGW. Consider using
[Visual Studio Express 2010][] or later if you do not have a full Visual
Studio license.
2011-08-09 05:14:47 +08:00
2013-07-17 03:04:31 +08:00
Linux using the GCC toolchain.
2011-05-13 10:16:40 +08:00
2013-10-30 07:33:17 +08:00
OS X using the GCC or XCode toolchain.
2011-05-13 10:16:40 +08:00
Solaris 121 and later using GCC toolchain.
2013-04-12 23:43:05 +08:00
2014-02-27 10:08:30 +08:00
## Patches
2013-12-14 02:35:09 +08:00
See the [guidelines for contributing][].
2013-07-17 03:04:31 +08:00
[node.js]: http://nodejs.org/
[GYP]: http://code.google.com/p/gyp/
2014-06-27 08:44:36 +08:00
[Python]: https://www.python.org/downloads/
2013-04-12 23:43:05 +08:00
[Visual Studio Express 2010]: http://www.microsoft.com/visualstudio/eng/products/visual-studio-2010-express
[guidelines for contributing]: https://github.com/libuv/libuv/blob/master/CONTRIBUTING.md
[libuv_banner]: https://raw.githubusercontent.com/libuv/libuv/master/img/banner.png