mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-01 03:53:33 +00:00
0cb6b6ff4b
Now that we have understandable system call tracing on Windows, this change rewrites many of the polyfill internals for that platform, to help things get closer to tip top shape. Support for complex forking scenarios had been in a regressed state for quite some time. Now, it works! Subsequent changes should be able to address the performance.
125 lines
3.8 KiB
Makefile
125 lines
3.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───────────────────────┘
|
|
#
|
|
# SYNOPSIS
|
|
#
|
|
# System Call Compatibility Layer
|
|
#
|
|
# DESCRIPTION
|
|
#
|
|
# This package exports a familiar system call interface that works
|
|
# across platforms.
|
|
|
|
PKGS += LIBC_CALLS
|
|
|
|
LIBC_CALLS_ARTIFACTS += LIBC_CALLS_A
|
|
LIBC_CALLS = $(LIBC_CALLS_A_DEPS) $(LIBC_CALLS_A)
|
|
LIBC_CALLS_A = o/$(MODE)/libc/calls/syscalls.a
|
|
LIBC_CALLS_A_FILES := \
|
|
$(wildcard libc/calls/typedef/*) \
|
|
$(wildcard libc/calls/struct/*) \
|
|
$(wildcard libc/calls/*)
|
|
LIBC_CALLS_A_HDRS = $(filter %.h,$(LIBC_CALLS_A_FILES))
|
|
LIBC_CALLS_A_INCS = $(filter %.inc,$(LIBC_CALLS_A_FILES))
|
|
LIBC_CALLS_A_SRCS_S = $(filter %.S,$(LIBC_CALLS_A_FILES))
|
|
LIBC_CALLS_A_SRCS_C = $(filter %.c,$(LIBC_CALLS_A_FILES))
|
|
|
|
LIBC_CALLS_A_SRCS = \
|
|
$(LIBC_CALLS_A_SRCS_S) \
|
|
$(LIBC_CALLS_A_SRCS_C)
|
|
|
|
LIBC_CALLS_A_OBJS = \
|
|
$(LIBC_CALLS_A_SRCS_S:%.S=o/$(MODE)/%.o) \
|
|
$(LIBC_CALLS_A_SRCS_C:%.c=o/$(MODE)/%.o)
|
|
|
|
LIBC_CALLS_A_CHECKS = \
|
|
$(LIBC_CALLS_A).pkg \
|
|
$(LIBC_CALLS_A_HDRS:%=o/$(MODE)/%.ok)
|
|
|
|
LIBC_CALLS_A_DIRECTDEPS = \
|
|
LIBC_FMT \
|
|
LIBC_INTRIN \
|
|
LIBC_NEXGEN32E \
|
|
LIBC_NT_ADVAPI32 \
|
|
LIBC_NT_IPHLPAPI \
|
|
LIBC_NT_KERNEL32 \
|
|
LIBC_NT_NTDLL \
|
|
LIBC_NT_POWERPROF \
|
|
LIBC_NT_WS2_32 \
|
|
LIBC_STR \
|
|
LIBC_STUBS \
|
|
LIBC_SYSV_CALLS \
|
|
LIBC_SYSV
|
|
|
|
LIBC_CALLS_A_DEPS := \
|
|
$(call uniq,$(foreach x,$(LIBC_CALLS_A_DIRECTDEPS),$($(x))))
|
|
|
|
$(LIBC_CALLS_A): \
|
|
libc/calls/ \
|
|
$(LIBC_CALLS_A).pkg \
|
|
$(LIBC_CALLS_A_OBJS)
|
|
|
|
$(LIBC_CALLS_A).pkg: \
|
|
$(LIBC_CALLS_A_OBJS) \
|
|
$(foreach x,$(LIBC_CALLS_A_DIRECTDEPS),$($(x)_A).pkg)
|
|
|
|
o/$(MODE)/libc/calls/raise.o: \
|
|
OVERRIDE_COPTS += \
|
|
$(NO_MAGIC)
|
|
|
|
o/$(MODE)/libc/calls/termios2linux.o \
|
|
o/$(MODE)/libc/calls/termios2host.o \
|
|
o/$(MODE)/libc/calls/sigenter-freebsd.o \
|
|
o/$(MODE)/libc/calls/sigenter-netbsd.o \
|
|
o/$(MODE)/libc/calls/sigenter-openbsd.o \
|
|
o/$(MODE)/libc/calls/sigenter-xnu.o \
|
|
o/$(MODE)/libc/calls/ntcontext2linux.o: \
|
|
OVERRIDE_COPTS += \
|
|
-O3
|
|
|
|
# TODO(jart): make va_arg optimize well in default mode
|
|
o//libc/calls/ioctl.o \
|
|
o//libc/calls/ioctl_default.o \
|
|
o//libc/calls/ioctl_fioclex-nt.o \
|
|
o//libc/calls/ioctl_fioclex.o \
|
|
o//libc/calls/ioctl_siocgifconf-nt.o \
|
|
o//libc/calls/ioctl_siocgifconf.o \
|
|
o//libc/calls/ioctl_tcgets-nt.o \
|
|
o//libc/calls/ioctl_tcgets.o \
|
|
o//libc/calls/ioctl_tcsets-nt.o \
|
|
o//libc/calls/ioctl_tcsets.o \
|
|
o//libc/calls/ioctl_tiocgwinsz-nt.o \
|
|
o//libc/calls/ioctl_tiocgwinsz.o \
|
|
o//libc/calls/ioctl_tiocswinsz-nt.o \
|
|
o//libc/calls/ioctl_tiocswinsz.o \
|
|
o//libc/calls/fcntl.o: \
|
|
OVERRIDE_CFLAGS += \
|
|
-Os
|
|
|
|
# must use alloca()
|
|
o/$(MODE)/libc/calls/execl.o \
|
|
o/$(MODE)/libc/calls/execle.o \
|
|
o/$(MODE)/libc/calls/execlp.o \
|
|
o/$(MODE)/libc/calls/execve-nt.o \
|
|
o/$(MODE)/libc/calls/execve-sysv.o \
|
|
o/$(MODE)/libc/calls/mkntenvblock.o: \
|
|
OVERRIDE_CPPFLAGS += \
|
|
-DSTACK_FRAME_UNLIMITED
|
|
|
|
o/$(MODE)/libc/calls/ioctl-siocgifconf.o \
|
|
o/$(MODE)/libc/calls/ioctl-siocgifconf-nt.o: \
|
|
OVERRIDE_COPTS += \
|
|
-ffunction-sections \
|
|
-fdata-sections
|
|
|
|
LIBC_CALLS_LIBS = $(foreach x,$(LIBC_CALLS_ARTIFACTS),$($(x)))
|
|
LIBC_CALLS_SRCS = $(foreach x,$(LIBC_CALLS_ARTIFACTS),$($(x)_SRCS))
|
|
LIBC_CALLS_HDRS = $(foreach x,$(LIBC_CALLS_ARTIFACTS),$($(x)_HDRS))
|
|
LIBC_CALLS_INCS = $(foreach x,$(LIBC_CALLS_ARTIFACTS),$($(x)_INCS))
|
|
LIBC_CALLS_BINS = $(foreach x,$(LIBC_CALLS_ARTIFACTS),$($(x)_BINS))
|
|
LIBC_CALLS_CHECKS = $(foreach x,$(LIBC_CALLS_ARTIFACTS),$($(x)_CHECKS))
|
|
LIBC_CALLS_OBJS = $(foreach x,$(LIBC_CALLS_ARTIFACTS),$($(x)_OBJS))
|
|
LIBC_CALLS_TESTS = $(foreach x,$(LIBC_CALLS_ARTIFACTS),$($(x)_TESTS))
|
|
|
|
.PHONY: o/$(MODE)/libc/calls
|
|
o/$(MODE)/libc/calls: $(LIBC_CALLS_CHECKS)
|