2014-08-07 13:03:17 +02:00
|
|
|
![libuv][libuv_banner]
|
|
|
|
|
|
|
|
## Overview
|
2011-09-23 20:07:57 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
libuv is a multi-platform support library with a focus on asynchronous I/O. It
|
2013-12-13 19:35:09 +01:00
|
|
|
was primarily developed for use by [Node.js](http://nodejs.org), but it's also
|
2013-10-30 00:33:17 +01:00
|
|
|
used by Mozilla's [Rust language](http://www.rust-lang.org/),
|
|
|
|
[Luvit](http://luvit.io/), [Julia](http://julialang.org/),
|
2014-08-07 13:03:17 +02:00
|
|
|
[pyuv](https://github.com/saghul/pyuv), and [others](https://github.com/joyent/libuv/wiki/Projects-that-use-libuv).
|
2011-05-13 04:16:40 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
## Feature highlights
|
2011-09-23 20:07:57 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
* Full-featured event loop backed by epoll, kqueue, IOCP, event ports.
|
2011-09-23 20:07:57 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
* Asynchronous TCP and UDP sockets
|
2011-09-23 20:07:57 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
* Asynchronous DNS resolution
|
2011-09-23 20:07:57 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
* Asynchronous file and file system operations
|
2011-09-24 05:23:41 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
* File system events
|
2011-09-23 20:07:57 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
* ANSI escape code controlled TTY
|
2011-09-23 20:07:57 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
* IPC with socket sharing, using Unix domain sockets or named pipes (Windows)
|
2011-09-23 20:07:57 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
* Child processes
|
2011-09-23 20:07:57 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
* Thread pool
|
2011-09-23 20:07:57 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
* Signal handling
|
2011-09-23 20:07:57 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
* High resolution clock
|
2011-09-30 20:22:38 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
* Threading and synchronization primitives
|
2011-09-23 20:07:57 +02:00
|
|
|
|
2014-09-19 19:37:55 +02:00
|
|
|
## Versioning
|
|
|
|
|
|
|
|
Starting with version 1.0.0 libuv follows the [semantic versioning](http://semver.org/)
|
|
|
|
scheme. The API change and backwards compatiblity rules are those indicated by
|
|
|
|
SemVer. libuv will keep a stable ABI across major releases.
|
2011-09-23 20:07:57 +02:00
|
|
|
|
2012-10-06 23:04:30 +02:00
|
|
|
## Community
|
|
|
|
|
|
|
|
* [Mailing list](http://groups.google.com/group/libuv)
|
2011-09-23 20:07:57 +02:00
|
|
|
|
|
|
|
## Documentation
|
|
|
|
|
2014-09-19 19:37:55 +02: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
|
|
|
|
|
2013-12-31 19:33:54 +01: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/joyent/libuv/tree/master/test)
|
|
|
|
— API specification and usage examples.
|
|
|
|
* [libuv-dox](https://github.com/thlorenz/libuv-dox)
|
|
|
|
— Documenting types and methods of libuv, mostly by reading uv.h.
|
2011-09-23 20:07:57 +02:00
|
|
|
|
|
|
|
## Build Instructions
|
2011-05-13 04:16:40 +02:00
|
|
|
|
2014-10-21 00:45:30 +02:00
|
|
|
For GCC there are two build methods: via autotools or via [GYP][].
|
2013-07-16 21:04:31 +02: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-20 21:12:18 +01:00
|
|
|
|
2013-07-16 21:04:31 +02:00
|
|
|
To build with autotools:
|
2013-02-20 21:12:18 +01:00
|
|
|
|
2013-07-16 21:04:31 +02:00
|
|
|
$ sh autogen.sh
|
|
|
|
$ ./configure
|
|
|
|
$ make
|
|
|
|
$ make check
|
|
|
|
$ make install
|
2013-06-26 19:48:10 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
### Windows
|
2011-08-06 12:38:11 +02:00
|
|
|
|
2014-06-27 02:44:36 +02:00
|
|
|
First, [Python][] 2.6 or 2.7 must be installed as it is required by [GYP][].
|
2014-10-21 00:45:30 +02:00
|
|
|
If python is not in your path, set the environment variable `PYTHON` to its
|
2014-06-27 02:44:36 +02:00
|
|
|
location. For example: `set PYTHON=C:\Python27\python.exe`
|
2013-10-30 00:33:17 +01: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 16:21:25 +01:00
|
|
|
project tree manually:
|
2011-08-06 12:38:11 +02:00
|
|
|
|
2013-07-16 21:04:31 +02:00
|
|
|
$ mkdir -p build
|
|
|
|
$ git clone https://git.chromium.org/external/gyp.git build/gyp
|
2011-08-08 23:14:47 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
### Unix
|
|
|
|
|
|
|
|
Run:
|
2013-01-22 16:21:25 +01:00
|
|
|
|
2013-11-20 17:25:24 +01:00
|
|
|
$ ./gyp_uv.py -f make
|
2013-07-16 21:04:31 +02:00
|
|
|
$ make -C out
|
2013-01-22 16:21:25 +01:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
### OS X
|
|
|
|
|
|
|
|
Run:
|
2011-08-08 23:14:47 +02:00
|
|
|
|
2013-11-20 17:25:24 +01:00
|
|
|
$ ./gyp_uv.py -f xcode
|
2014-01-27 18:30:51 +01:00
|
|
|
$ xcodebuild -ARCHS="x86_64" -project uv.xcodeproj \
|
|
|
|
-configuration Release -target All
|
|
|
|
|
|
|
|
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-08 23:14:47 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
### Android
|
|
|
|
|
|
|
|
Run:
|
2011-08-08 23:14:47 +02:00
|
|
|
|
2013-07-16 21:04:31 +02:00
|
|
|
$ source ./android-configure NDK_PATH gyp
|
|
|
|
$ make -C out
|
2011-08-06 12:38:11 +02:00
|
|
|
|
2013-02-20 21:12:18 +01: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-13 19:35:09 +01:00
|
|
|
### Running tests
|
|
|
|
|
|
|
|
Run:
|
|
|
|
|
|
|
|
$ ./gyp_uv.py -f make
|
|
|
|
$ make -C out
|
|
|
|
$ ./out/Debug/run-tests
|
|
|
|
|
2011-09-23 20:07:57 +02:00
|
|
|
## Supported Platforms
|
2011-05-13 04:16:40 +02:00
|
|
|
|
2011-08-08 23:14:47 +02:00
|
|
|
Microsoft Windows operating systems since Windows XP SP2. It can be built
|
2013-04-12 17:43:05 +02: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-08 23:14:47 +02:00
|
|
|
|
2013-07-16 21:04:31 +02:00
|
|
|
Linux using the GCC toolchain.
|
2011-05-13 04:16:40 +02:00
|
|
|
|
2013-10-30 00:33:17 +01:00
|
|
|
OS X using the GCC or XCode toolchain.
|
2011-05-13 04:16:40 +02:00
|
|
|
|
|
|
|
Solaris 121 and later using GCC toolchain.
|
2013-04-12 17:43:05 +02:00
|
|
|
|
2014-02-27 03:08:30 +01:00
|
|
|
## Patches
|
2013-12-13 19:35:09 +01:00
|
|
|
|
|
|
|
See the [guidelines for contributing][].
|
|
|
|
|
2013-07-16 21:04:31 +02:00
|
|
|
[node.js]: http://nodejs.org/
|
|
|
|
[GYP]: http://code.google.com/p/gyp/
|
2014-06-27 02:44:36 +02:00
|
|
|
[Python]: https://www.python.org/downloads/
|
2013-04-12 17:43:05 +02:00
|
|
|
[Visual Studio Express 2010]: http://www.microsoft.com/visualstudio/eng/products/visual-studio-2010-express
|
2013-12-13 19:35:09 +01:00
|
|
|
[guidelines for contributing]: https://github.com/joyent/libuv/blob/master/CONTRIBUTING.md
|
2014-08-07 13:03:17 +02:00
|
|
|
[libuv_banner]: https://raw.githubusercontent.com/joyent/libuv/master/img/banner.png
|