This is a maintenance fork
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Justine Tunney ac00be1a4e Make small fixes and oops ran clang-format on dtoa 2 years ago
..
alg Add glob and some finer tuning of documentation 2 years ago
bits Make small fixes and oops ran clang-format on dtoa 2 years ago
calls Make small fixes and oops ran clang-format on dtoa 2 years ago
conv Make small fixes and oops ran clang-format on dtoa 2 years ago
crt Polish up repository and other revisions 2 years ago
crypto Add glob and some finer tuning of documentation 2 years ago
dns Initial import 2 years ago
elf Add glob and some finer tuning of documentation 2 years ago
escape Add glob and some finer tuning of documentation 2 years ago
fmt Make small fixes and oops ran clang-format on dtoa 2 years ago
integral Add glob and some finer tuning of documentation 2 years ago
internal Initial import 2 years ago
intrin Initial import 2 years ago
isystem Initial import 2 years ago
log Make small fixes and oops ran clang-format on dtoa 2 years ago
math Polish up repository and other revisions 2 years ago
mem Polish up repository and other revisions 2 years ago
nexgen32e Make small fixes and oops ran clang-format on dtoa 2 years ago
nt Polish up repository and other revisions 2 years ago
rand Make small fixes and oops ran clang-format on dtoa 2 years ago
runtime Make small fixes and oops ran clang-format on dtoa 2 years ago
sock Initial import 2 years ago
stdio Make small fixes and oops ran clang-format on dtoa 2 years ago
str Polish up repository and other revisions 2 years ago
stubs Polish up repository and other revisions 2 years ago
sysv Add glob and some finer tuning of documentation 2 years ago
testlib Polish up repository and other revisions 2 years ago
time Polish up repository and other revisions 2 years ago
tinymath Make small fixes and oops ran clang-format on dtoa 2 years ago
unicode Polish up repository and other revisions 2 years ago
x Add glob and some finer tuning of documentation 2 years ago
zipos Fix stdio bug w/ embedded zip filesystem 2 years ago
README.md Initial import 2 years ago
assert.h Initial import 2 years ago
complex.h Initial import 2 years ago
dce.h Darth Raadt is holding the Bell Labs ABI hostage 2 years ago
disclaimer.inc Initial import 2 years ago
dos.h Initial import 2 years ago
errno.h Initial import 2 years ago
inttypes.h Initial import 2 years ago
leb128.h Initial import 2 years ago
libc.mk Initial import 2 years ago
limits.h Initial import 2 years ago
literal.h Initial import 2 years ago
mach.h Initial import 2 years ago
macho.h Initial import 2 years ago
macros-cpp.inc Polish up repository and other revisions 2 years ago
macros.h Make small fixes and oops ran clang-format on dtoa 2 years ago
macros.inc Make small fixes and oops ran clang-format on dtoa 2 years ago
math.h Initial import 2 years ago
ncabi.h Initial import 2 years ago
notice.inc Add scouts honor escape hatch for source embedding 2 years ago
paths.h Initial import 2 years ago
pe.h Initial import 2 years ago
typename.h Initial import 2 years ago
tzfile.h Initial import 2 years ago
wave.h Initial import 2 years ago
zip.h Initial import 2 years ago

README.md

SYNOPSIS

Cosmopolitan Standard Library.

OVERVIEW

This directory defines static archives defining functions, like printf(), mmap(), win32, etc. Please note that the Cosmopolitan build configuration doesn't link any C/C++ library dependencies by default, so you still have the flexibility to choose the one provided by your system. If you'd prefer Cosmopolitan, just add $(LIBC) and $(CRT) to your linker arguments.

Your library is compromised of many bite-sized static archives. We use the checkdeps tool to guarantee that the contents of the archives are organized in a logical way that's easy to use with or without our makefile infrastructure, since there's no cyclic dependencies.

The Cosmopolitan Library exports only the most stable canonical system calls for all supported operating systems, regardless of which platform is used for compilation. We polyfill many of the APIs, e.g. read(), write() so they work consistently everywhere while other apis, e.g. CreateWindowEx(), might only work on one platform, in which case they become no-op functions on others.

Cosmopolitan polyfill wrappers will usually use the dollar sign naming convention, so they may be bypassed when necessary. This same convention is used when multiple implementations of string library and other performance-critical function are provided to allow Cosmopolitan to go fast on both old and newer computers.

We take an approach to configuration that relies heavily on the compiler's dead code elimination pass (libc/dce.h). Most of the code is written so that, for example, folks not wanting support for OpenBSD can flip a bit in SUPPORT_VECTOR and that code will be omitted from the build. The same is true for builds that are tuned using -march=native which effectively asks the library to not include runtime support hooks for x86 processors older than what you use.

Please note that, unlike Cygwin or MinGW, Cosmopolitan does not achieve broad support by bolting on a POSIX emulation layer. We do nothing more than (in most cases) stateless API translations that get you 90% of the way there in a fast lightweight manner. We therefore can't address some of the subtle differences, such as the nuances of absolute paths on Windows. Our approach could be compared to something more along the lines of, "the Russians just used a pencil to write in space", versus spending millions researching a pen like NASA.

One cost worth noting, concerning stateless API translation, is file descriptors needed to change from int to int64_t, thus requiring a certain degree of added care when porting software.