mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 03:27:39 +00:00
8a91518633
Cosmopolitan's QuickJS is now equally conformant and performant, with the exception of Atomics, which have been disabled since Cosmopolitan currently doesn't support pthreads. QuickJS memory usage -- BigNum 2021-03-27 version, 64-bit, malloc limit: -1 NAME COUNT SIZE memory allocated 937 131764 (140.6 per block) memory used 938 116103 (8 overhead, 16.7 average slack) atoms 513 21408 (41.7 per atom) objects 170 12279 (72.2 per object) properties 864 15531 (5.1 per object) shapes 58 12995 (224.1 per shape) bytecode functions 13 1512 bytecode 13 867 (66.7 per function) C functions 99 arrays 1 fast arrays 1 elements 1 16 (1.0 per fast array) Result: 35/74740 errors, 1279 excluded, 485 skipped, 19 new, 2 fixed real 2m40.828s user 2m29.764s sys 0m10.939s
296 lines
5.5 KiB
Makefile
296 lines
5.5 KiB
Makefile
#-*-mode:makefile-gmake;indent-tabs-mode:t;tab-width:8;coding:utf-8-*-┐
|
|
#───vi: set et ft=make ts=8 tw=8 fenc=utf-8 :vi───────────────────────┘
|
|
|
|
# Default Mode
|
|
#
|
|
# - `make`
|
|
# - Backtraces
|
|
# - Function tracing
|
|
# - Reasonably small
|
|
# - Reasonably optimized
|
|
# - Reasonably debuggable
|
|
|
|
ifeq ($(MODE),)
|
|
|
|
CONFIG_CCFLAGS += \
|
|
$(BACKTRACES) \
|
|
$(FTRACE) \
|
|
-Og
|
|
|
|
TARGET_ARCH ?= \
|
|
-msse3
|
|
|
|
endif
|
|
|
|
# Optimized Mode
|
|
#
|
|
# - `make MODE=opt`
|
|
# - Backtraces
|
|
# - More optimized
|
|
# - Reasonably small
|
|
# - No memory corruption detection
|
|
# - assert() / CHECK_xx() may leak code into binary for debuggability
|
|
# - GCC 8+ hoists check fails into .text.cold, thus minimizing impact
|
|
|
|
ifeq ($(MODE), opt)
|
|
|
|
CONFIG_CPPFLAGS += \
|
|
-DNDEBUG \
|
|
-msse2avx \
|
|
-Wa,-msse2avx
|
|
|
|
CONFIG_CCFLAGS += \
|
|
$(BACKTRACES) \
|
|
-O3
|
|
|
|
TARGET_ARCH ?= \
|
|
-march=native
|
|
|
|
endif
|
|
|
|
# Release Mode
|
|
#
|
|
# - `make MODE=rel`
|
|
# - More optimized
|
|
# - Reasonably small
|
|
# - Numeric backtraces
|
|
# - Toilsome debuggability
|
|
# - assert() statements removed
|
|
# - DCHECK_xx() statements removed
|
|
# - No memory corruption detection
|
|
# - CHECK_xx() won't leak strings into binary
|
|
|
|
ifeq ($(MODE), rel)
|
|
|
|
CONFIG_CPPFLAGS += \
|
|
-DNDEBUG
|
|
|
|
CONFIG_CCFLAGS += \
|
|
$(BACKTRACES) \
|
|
-O2
|
|
|
|
TARGET_ARCH ?= \
|
|
-msse3
|
|
|
|
endif
|
|
|
|
# Debug Mode
|
|
#
|
|
# - `make MODE=dbg`
|
|
# - Backtraces
|
|
# - Zero optimization
|
|
# - Enables sanitization
|
|
# - Enables stack canaries
|
|
# - Enormous binaries (b/c ubsan suboptimalities)
|
|
|
|
ifeq ($(MODE), dbg)
|
|
|
|
CONFIG_CPPFLAGS += \
|
|
-DMODE_DBG
|
|
|
|
CONFIG_CCFLAGS += \
|
|
$(BACKTRACES) \
|
|
$(FTRACE) \
|
|
-Og
|
|
|
|
CONFIG_COPTS += \
|
|
$(SECURITY_BLANKETS) \
|
|
$(SANITIZER)
|
|
|
|
TARGET_ARCH ?= \
|
|
-msse3
|
|
|
|
OVERRIDE_CCFLAGS += \
|
|
-fno-pie
|
|
|
|
endif
|
|
|
|
# Tiny Mode
|
|
#
|
|
# - `make MODE=tiny`
|
|
# - No checks
|
|
# - No asserts
|
|
# - No canaries
|
|
# - No paranoia
|
|
# - No avx hooks
|
|
# - No backtraces
|
|
# - No algorithmics
|
|
# - YOLO
|
|
ifeq ($(MODE), tiny)
|
|
CONFIG_CPPFLAGS += \
|
|
-DTINY \
|
|
-DNDEBUG \
|
|
-DTRUSTWORTHY
|
|
CONFIG_CCFLAGS += \
|
|
-Os \
|
|
-fno-align-functions \
|
|
-fno-align-jumps \
|
|
-fno-align-labels \
|
|
-fno-align-loops
|
|
TARGET_ARCH ?= \
|
|
-msse3
|
|
endif
|
|
|
|
# Linux-Only Tiny Mode
|
|
#
|
|
# - `make MODE=tinylinux`
|
|
# - No checks
|
|
# - No asserts
|
|
# - No canaries
|
|
# - No paranoia
|
|
# - No avx hooks
|
|
# - No backtraces
|
|
# - No portability
|
|
# - No algorithmics
|
|
# - YOLO
|
|
ifeq ($(MODE), tinylinux)
|
|
CONFIG_CPPFLAGS += \
|
|
-DTINY \
|
|
-DNDEBUG \
|
|
-DTRUSTWORTHY \
|
|
-DSUPPORT_VECTOR=1
|
|
CONFIG_CCFLAGS += \
|
|
-Os \
|
|
-fno-align-functions \
|
|
-fno-align-jumps \
|
|
-fno-align-labels \
|
|
-fno-align-loops
|
|
TARGET_ARCH ?= \
|
|
-msse3
|
|
endif
|
|
|
|
# Linux+BSD Tiny Mode
|
|
#
|
|
# - `make MODE=tinylinuxbsd`
|
|
# - No apple
|
|
# - No checks
|
|
# - No asserts
|
|
# - No canaries
|
|
# - No paranoia
|
|
# - No microsoft
|
|
# - No avx hooks
|
|
# - No backtraces
|
|
# - No algorithmics
|
|
# - YOLO
|
|
ifeq ($(MODE), tinylinuxbsd)
|
|
CONFIG_CPPFLAGS += \
|
|
-DTINY \
|
|
-DNDEBUG \
|
|
-DTRUSTWORTHY \
|
|
-DSUPPORT_VECTOR=113
|
|
CONFIG_CCFLAGS += \
|
|
-Os \
|
|
-fno-align-functions \
|
|
-fno-align-jumps \
|
|
-fno-align-labels \
|
|
-fno-align-loops
|
|
TARGET_ARCH ?= \
|
|
-msse3
|
|
endif
|
|
|
|
# Unix Tiny Mode
|
|
#
|
|
# - `make MODE=tinysysv`
|
|
# - No checks
|
|
# - No asserts
|
|
# - No canaries
|
|
# - No paranoia
|
|
# - No microsoft
|
|
# - No avx hooks
|
|
# - No backtraces
|
|
# - No algorithmics
|
|
# - YOLO
|
|
ifeq ($(MODE), tinysysv)
|
|
CONFIG_CPPFLAGS += \
|
|
-DTINY \
|
|
-DNDEBUG \
|
|
-DTRUSTWORTHY \
|
|
-DSUPPORT_VECTOR=121
|
|
CONFIG_CCFLAGS += \
|
|
-Os \
|
|
-fno-align-functions \
|
|
-fno-align-jumps \
|
|
-fno-align-labels \
|
|
-fno-align-loops
|
|
TARGET_ARCH ?= \
|
|
-msse3
|
|
endif
|
|
|
|
# Tiny Metallic Unix Mode
|
|
#
|
|
# - `make MODE=tinynowin`
|
|
# - No checks
|
|
# - No asserts
|
|
# - No canaries
|
|
# - No paranoia
|
|
# - No microsoft
|
|
# - No avx hooks
|
|
# - No backtraces
|
|
# - No algorithmics
|
|
# - YOLO
|
|
ifeq ($(MODE), tinynowin)
|
|
CONFIG_CPPFLAGS += \
|
|
-DTINY \
|
|
-DNDEBUG \
|
|
-DTRUSTWORTHY \
|
|
-DSUPPORT_VECTOR=251
|
|
CONFIG_CCFLAGS += \
|
|
-Os \
|
|
-fno-align-functions \
|
|
-fno-align-jumps \
|
|
-fno-align-labels \
|
|
-fno-align-loops
|
|
TARGET_ARCH ?= \
|
|
-msse3
|
|
endif
|
|
|
|
# LLVM Mode
|
|
ifeq ($(MODE), llvm)
|
|
TARGET_ARCH ?= -msse3
|
|
CONFIG_CCFLAGS += $(BACKTRACES) $(FTRACE) -O2
|
|
AS = clang
|
|
CC = clang
|
|
CXX = clang++
|
|
CXXFILT = llvm-c++filt
|
|
LD = ld.lld
|
|
NM = llvm-nm
|
|
GCC = clang
|
|
STRIP = llvm-strip
|
|
OBJCOPY = llvm-objcopy
|
|
OBJDUMP = llvm-objdump
|
|
ADDR2LINE = llvm-addr2line
|
|
endif
|
|
|
|
# ANSI Mode
|
|
#
|
|
# These flags cause GCC to predefine __STRICT_ANSI__. Please be warned
|
|
# that Cosmopolitan headers are written to comply with that request if
|
|
# it's possible to do so. Consider the following example:
|
|
#
|
|
# make -j12 -O o//tool/viz/printvideo.i
|
|
# clang-format-10 -i o//tool/viz/printvideo.i
|
|
# less o//tool/viz/printvideo.i
|
|
#
|
|
# You'll notice functions like memcpy(), ioctl(), etc. get expanded into
|
|
# wild-eyed gnu-style performance hacks. You can turn it off as follows:
|
|
#
|
|
# make -j12 -O MODE=ansi o/ansi/tool/viz/printvideo.i
|
|
# clang-format-10 -i o/ansi/tool/viz/printvideo.i
|
|
# less o/ansi/tool/viz/printvideo.i
|
|
#
|
|
# Here it becomes clear that ANSI mode can help you decouple your source
|
|
# from Cosmopolitan, by turning it into plain ordinary textbook C code.
|
|
#
|
|
# Another potential use case is distributing code to folks using tools
|
|
# such as MSVC or XCode. You can run your binary objects through a tool
|
|
# like objconv to convert them to COFF or MachO. Then use ANSI mode to
|
|
# rollup one header file that'll enable linkage with minimal issues.
|
|
|
|
ifeq ($(MODE), ansi)
|
|
|
|
CONFIG_CFLAGS += -std=c11
|
|
#CONFIG_CPPFLAGS += -ansi
|
|
CONFIG_CXXFLAGS += -std=c++11
|
|
TARGET_ARCH ?= -msse3
|
|
|
|
endif
|