cosmopolitan/third_party/sqlite3/sqlite3.mk
Justine Tunney 133c693650 Work around Landlock output inode in compile.com
This change fixes Landlock Make so that only the output target file is
unveiled, rather than unveiling the directory that contains it. This
gives us a much stronger sandbox. It also helped identify problematic
build code in our repo that should have been using o/tmp instead.

Landlock isn't able to let us unveil files that don't exist. Even if
they do, then once a file is deleted, the sandboxing for it goes away.
This caused problems for Landlock Make because tools like GNU LD will
repeatedly delete and recreate the output file. This change uses the
compile.com wrapper to ensure on changes happen to the output inode.

New binary available on https://justine.lol/make/

Fixes #528
2022-08-09 07:55:44 -07:00

207 lines
6.8 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───────────────────────┘
#
# OVERVIEW
#
# SQLite Embedded Database
#
# NOTES
#
# Please be warned that locks currently do nothing on Windows since
# figuring out how to polyfill them correctly is a work in progress
# Further note we currently don't do that thing SQLite does for Mac
# file locks so your dbase will only be as reliable as Apple wanted
# it to be when they wrote their POSIX file locking implementation.
PKGS += THIRD_PARTY_SQLITE3
THIRD_PARTY_SQLITE3_ARTIFACTS += THIRD_PARTY_SQLITE3_A
THIRD_PARTY_SQLITE3 = $(THIRD_PARTY_SQLITE3_A_DEPS) $(THIRD_PARTY_SQLITE3_A)
THIRD_PARTY_SQLITE3_A = o/$(MODE)/third_party/sqlite3/libsqlite3.a
THIRD_PARTY_SQLITE3_A_FILES := $(wildcard third_party/sqlite3/*)
THIRD_PARTY_SQLITE3_A_HDRS = $(filter %.h,$(THIRD_PARTY_SQLITE3_A_FILES))
THIRD_PARTY_SQLITE3_A_INCS = $(filter %.inc,$(THIRD_PARTY_SQLITE3_A_FILES))
THIRD_PARTY_SQLITE3_A_SRCS_C = $(filter %.c,$(THIRD_PARTY_SQLITE3_A_FILES))
THIRD_PARTY_SQLITE3_A_SRCS_T = $(filter %.inc,$(THIRD_PARTY_SQLITE3_A_FILES))
THIRD_PARTY_SQLITE3_BINS = $(THIRD_PARTY_SQLITE3_COMS) $(THIRD_PARTY_SQLITE3_COMS:%=%.dbg)
THIRD_PARTY_SQLITE3_A_SRCS = \
$(THIRD_PARTY_SQLITE3_A_SRCS_C) \
$(THIRD_PARTY_SQLITE3_A_SRCS_T)
THIRD_PARTY_SQLITE3_A_OBJS = \
$(filter-out %shell.o,$(THIRD_PARTY_SQLITE3_A_SRCS_C:%.c=o/$(MODE)/%.o))
THIRD_PARTY_SQLITE3_SHELL_OBJS = \
$(filter %shell.o,$(THIRD_PARTY_SQLITE3_A_SRCS_C:%.c=o/$(MODE)/%.o))
THIRD_PARTY_SQLITE3_COMS = \
o/$(MODE)/third_party/sqlite3/sqlite3.com
THIRD_PARTY_SQLITE3_A_CHECKS = \
$(THIRD_PARTY_SQLITE3_A).pkg \
$(THIRD_PARTY_SQLITE3_A_HDRS:%=o/$(MODE)/%.ok)
THIRD_PARTY_SQLITE3_A_DIRECTDEPS = \
LIBC_ALG \
LIBC_BITS \
LIBC_CALLS \
LIBC_FMT \
LIBC_INTRIN \
LIBC_MEM \
LIBC_NEXGEN32E \
LIBC_RUNTIME \
LIBC_STDIO \
LIBC_STR \
LIBC_STUBS \
LIBC_SYSV \
LIBC_SYSV_CALLS \
LIBC_TIME \
LIBC_RAND \
LIBC_TINYMATH \
LIBC_UNICODE \
THIRD_PARTY_GDTOA \
THIRD_PARTY_LINENOISE \
THIRD_PARTY_MUSL \
THIRD_PARTY_ZLIB \
TOOL_ARGS
THIRD_PARTY_SQLITE3_A_DEPS := \
$(call uniq,$(foreach x,$(THIRD_PARTY_SQLITE3_A_DIRECTDEPS),$($(x))))
o/$(MODE)/third_party/sqlite3/sqlite3.com.dbg: \
$(THIRD_PARTY_SQLITE3_A_DEPS) \
$(THIRD_PARTY_SQLITE3_SHELL_OBJS) \
o/$(MODE)/third_party/sqlite3/shell.o \
o/$(MODE)/third_party/sqlite3/shell.pkg \
$(CRT) \
$(APE_NO_MODIFY_SELF)
@$(APELINK)
$(THIRD_PARTY_SQLITE3_A): \
third_party/sqlite3/ \
$(THIRD_PARTY_SQLITE3_A).pkg \
$(THIRD_PARTY_SQLITE3_A_OBJS)
$(THIRD_PARTY_SQLITE3_A).pkg: \
$(THIRD_PARTY_SQLITE3_A_OBJS) \
$(foreach x,$(THIRD_PARTY_SQLITE3_A_DIRECTDEPS),$($(x)_A).pkg)
o/$(MODE)/third_party/sqlite3/shell.pkg: \
$(THIRD_PARTY_SQLITE3_SHELL_OBJS) \
$(foreach x,$(THIRD_PARTY_SQLITE3_A_DIRECTDEPS),$($(x)_A).pkg)
# https://www.sqlite.org/compile.html
THIRD_PARTY_SQLITE3_FLAGS = \
-DNDEBUG \
-DSQLITE_CORE \
-DSQLITE_OS_UNIX \
-DBUILD_sqlite \
-DHAVE_USLEEP \
-DHAVE_READLINK \
-DHAVE_FCHOWN \
-DHAVE_LSTAT \
-DHAVE_GMTIME_R \
-DHAVE_FDATASYNC \
-DHAVE_STRCHRNUL \
-DHAVE_LOCALTIME_R \
-DHAVE_MALLOC_USABLE_SIZE \
-DSQLITE_THREADSAFE=0 \
-DSQLITE_MAX_EXPR_DEPTH=0 \
-DSQLITE_DEFAULT_MEMSTATUS=0 \
-DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \
-DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
-DSQLITE_OMIT_UTF16 \
-DSQLITE_OMIT_TCL_VARIABLE \
-DSQLITE_OMIT_LOAD_EXTENSION \
-DSQLITE_OMIT_SHARED_CACHE \
-DSQLITE_OMIT_AUTOINIT \
-DSQLITE_OMIT_GET_TABLE \
-DSQLITE_HAVE_C99_MATH_FUNCS \
-DSQLITE_ENABLE_MATH_FUNCTIONS \
-DSQLITE_ENABLE_JSON1 \
$(THIRD_PARTY_SQLITE3_A_OBJS): \
OVERRIDE_CFLAGS += \
$(THIRD_PARTY_SQLITE3_FLAGS) \
-DSQLITE_OMIT_UPDATE_HOOK
$(THIRD_PARTY_SQLITE3_SHELL_OBJS): \
OVERRIDE_CFLAGS += \
$(THIRD_PARTY_SQLITE3_FLAGS) \
-DHAVE_READLINE=0 \
-DHAVE_EDITLINE=0 \
-DSQLITE_HAVE_ZLIB \
-DSQLITE_ENABLE_IOTRACE \
-DSQLITE_ENABLE_PREUPDATE_HOOK \
-DSQLITE_ENABLE_COLUMN_METADATA \
-DSQLITE_ENABLE_EXPLAIN_COMMENTS \
-DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION \
-DSQLITE_ENABLE_SESSION \
-DSQLITE_ENABLE_STMTVTAB \
-DSQLITE_ENABLE_DBPAGE_VTAB \
-DSQLITE_ENABLE_DBSTAT_VTAB \
-DSQLITE_ENABLE_BYTECODE_VTAB \
-DSQLITE_ENABLE_OFFSET_SQL_FUNC \
-DSQLITE_ENABLE_DESERIALIZE \
-DSQLITE_ENABLE_FTS3 \
-DSQLITE_ENABLE_FTS4 \
-DSQLITE_ENABLE_FTS5 \
-DSQLITE_ENABLE_RTREE \
-DSQLITE_ENABLE_GEOPOLY \
-DHAVE_LINENOISE
o//third_party/sqlite3/parse.o \
o//third_party/sqlite3/select.o \
o//third_party/sqlite3/pragma.o \
o//third_party/sqlite3/vdbe.o: \
OVERRIDE_CFLAGS += \
-Os
o/$(MODE)/third_party/sqlite3/shell.o: \
OVERRIDE_CFLAGS += \
-DSTACK_FRAME_UNLIMITED
$(THIRD_PARTY_SQLITE3_A_OBJS) \
$(THIRD_PARTY_SQLITE3_SHELL_OBJS): \
OVERRIDE_CFLAGS += \
-fdata-sections \
-ffunction-sections
# use smaller relocations for indirect branches
o/$(MODE)/third_party/sqlite3/expr.o \
o/$(MODE)/third_party/sqlite3/printf.o \
o/$(MODE)/third_party/sqlite3/parse.o: \
OVERRIDE_CFLAGS += \
-fpie
o/$(MODE)/third_party/sqlite3/shell.o: QUOTA = -M512m -C16 -L180
o/$(MODE)/third_party/sqlite3/vdbe.o: QUOTA = -M1024m
o/$(MODE)/third_party/sqlite3/vdbe.shell.o: QUOTA = -M1024m
o/$(MODE)/third_party/sqlite3/fts5.o: QUOTA = -M512m -C16
o/$(MODE)/third_party/sqlite3/fts5.shell.o: QUOTA = -M512m -C16 -L180
o/$(MODE)/third_party/sqlite3/rtree.o: \
third_party/sqlite3/rtree.c \
third_party/sqlite3/geopoly.inc \
third_party/gdtoa/gdtoa.h
o/$(MODE)/third_party/sqlite3/rtree.shell.o: \
third_party/sqlite3/rtree.shell.c \
third_party/sqlite3/geopoly.inc \
third_party/gdtoa/gdtoa.h
THIRD_PARTY_SQLITE3_LIBS = $(foreach x,$(THIRD_PARTY_SQLITE3_ARTIFACTS),$($(x)))
THIRD_PARTY_SQLITE3_SRCS = $(foreach x,$(THIRD_PARTY_SQLITE3_ARTIFACTS),$($(x)_SRCS))
THIRD_PARTY_SQLITE3_HDRS = $(foreach x,$(THIRD_PARTY_SQLITE3_ARTIFACTS),$($(x)_HDRS))
THIRD_PARTY_SQLITE3_INCS = $(foreach x,$(THIRD_PARTY_SQLITE3_ARTIFACTS),$($(x)_INCS))
THIRD_PARTY_SQLITE3_CHECKS = $(foreach x,$(THIRD_PARTY_SQLITE3_ARTIFACTS),$($(x)_CHECKS))
THIRD_PARTY_SQLITE3_OBJS = $(foreach x,$(THIRD_PARTY_SQLITE3_ARTIFACTS),$($(x)_OBJS))
$(THIRD_PARTY_SQLITE3_OBJS): third_party/sqlite3/sqlite3.mk
$(THIRD_PARTY_SQLITE3_SHELL_OBJS): third_party/sqlite3/sqlite3.mk
.PHONY: o/$(MODE)/third_party/sqlite3
o/$(MODE)/third_party/sqlite3: \
$(THIRD_PARTY_SQLITE3_BINS) \
$(THIRD_PARTY_SQLITE3_CHECKS)