cosmopolitan/tool/plinko/plinko.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

67 lines
1.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───────────────────────┘
PKGS += TOOL_PLINKO
TOOL_PLINKO_SRCS := $(wildcard tool/plinko/*.c)
TOOL_PLINKO_OBJS = \
$(TOOL_PLINKO_SRCS:%.c=o/$(MODE)/%.o)
TOOL_PLINKO_COMS = \
$(TOOL_PLINKO_SRCS:%.c=o/$(MODE)/%.com)
TOOL_PLINKO_BINS = \
$(TOOL_PLINKO_COMS) \
$(TOOL_PLINKO_COMS:%=%.dbg)
TOOL_PLINKO_DIRECTDEPS = \
LIBC_INTRIN \
LIBC_LOG \
LIBC_MEM \
LIBC_CALLS \
LIBC_RUNTIME \
LIBC_UNICODE \
LIBC_SYSV \
LIBC_STDIO \
LIBC_X \
LIBC_STUBS \
LIBC_NEXGEN32E \
LIBC_ZIPOS \
TOOL_PLINKO_LIB
TOOL_PLINKO_DEPS := \
$(call uniq,$(foreach x,$(TOOL_PLINKO_DIRECTDEPS),$($(x))))
o/$(MODE)/tool/plinko/plinko.pkg: \
$(TOOL_PLINKO_OBJS) \
$(foreach x,$(TOOL_PLINKO_DIRECTDEPS),$($(x)_A).pkg)
o/$(MODE)/tool/plinko/%.com.dbg: \
$(TOOL_PLINKO_DEPS) \
o/$(MODE)/tool/plinko/%.o \
o/$(MODE)/tool/plinko/plinko.pkg \
o/$(MODE)/tool/plinko/lib/library.lisp.zip.o \
$(CRT) \
$(APE_NO_MODIFY_SELF)
@$(APELINK)
$(TOOL_PLINKO_OBJS): \
$(BUILD_FILES) \
tool/plinko/plinko.mk
o/$(MODE)/tool/plinko/lib/library.lisp.zip.o \
o/$(MODE)/tool/plinko/lib/binarytrees.lisp.zip.o \
o/$(MODE)/tool/plinko/lib/algebra.lisp.zip.o \
o/$(MODE)/tool/plinko/lib/infix.lisp.zip.o \
o/$(MODE)/tool/plinko/lib/ok.lisp.zip.o: \
ZIPOBJ_FLAGS += \
-B
o/$(MODE)/tool/plinko/plinko.com.zip.o: \
o/$(MODE)/tool/plinko/plinko.com
@$(COMPILE) -AZIPOBJ $(ZIPOBJ) $(ZIPOBJ_FLAGS) -B $(OUTPUT_OPTION) $<
.PHONY: o/$(MODE)/tool/plinko
o/$(MODE)/tool/plinko: $(TOOL_PLINKO_BINS) $(TOOL_PLINKO_CHECKS)