2020-06-15 14:18:57 +00:00
|
|
|
#-*-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
|
|
|
|
#
|
|
|
|
# Cosmopolitan Core Build Definitions
|
|
|
|
#
|
|
|
|
# DESCRIPTION
|
|
|
|
#
|
|
|
|
# Nearly all compiler flag tuning is done within this one file. Flags
|
|
|
|
# may be customized with environment variables. We also use this file
|
|
|
|
# to compute expensive values once per build.
|
|
|
|
#
|
|
|
|
# When tuning the variables below, please note they're interpreted in
|
|
|
|
# the strictest sense. For example, we don't pass CFLAGS to gcc if we
|
2021-02-07 14:11:44 +00:00
|
|
|
# know it's compiling a .S file. This enables our `make V=0` logging
|
|
|
|
# to be succinct and informative at the cost of being less forgiving.
|
2020-06-15 14:18:57 +00:00
|
|
|
#
|
|
|
|
# Further note that link order is equally unforgiving in repositories
|
|
|
|
# of this scale. We approach that by over-specifying dependencies, in
|
|
|
|
# packages that're broken down usually on a per-directory basis. This
|
|
|
|
# is aided by the checkdeps and functional programming tools which in
|
|
|
|
# most cases should be able to deduce correct ordering automatically.
|
|
|
|
#
|
|
|
|
# Concerning our approach to flag tuning, most of it is non-essential
|
|
|
|
# and largely serves to turn features off. Particularly features that
|
|
|
|
# would otherwise lock us in to a particular platform or legal terms.
|
|
|
|
# Other flags will usually be the ones that provide us marginal gains
|
|
|
|
# in terms of performance and code size, but the world won't end when
|
|
|
|
# they aren't used. Flags that play a critical role in source working
|
2020-08-26 16:41:07 +00:00
|
|
|
# correctly will usually be specified on a object-by-object basis, in
|
2020-06-15 14:18:57 +00:00
|
|
|
# their respective packages.
|
|
|
|
#
|
|
|
|
# VARIABLES
|
|
|
|
#
|
2023-06-08 11:37:05 +00:00
|
|
|
# Our configuration variables, ordered by increasing preference:
|
|
|
|
#
|
|
|
|
# CCFLAGS frontend flags (.i, .c, .cc, .f, .S, .lds, etc.)
|
|
|
|
# OFLAGS objectify flags (precludes -S and -E)
|
2020-06-15 14:18:57 +00:00
|
|
|
# CPPFLAGS preprocessor flags (.h, .c, .cc, .S, .inc, .lds, etc.)
|
2023-06-08 11:37:05 +00:00
|
|
|
# TARGET_ARCH microarchitecture flags (e.g. -march=native)
|
|
|
|
# COPTS c/c++ flags (.c, .cc)
|
2020-06-15 14:18:57 +00:00
|
|
|
# CFLAGS c flags (.c only)
|
|
|
|
# CXXFLAGS c++ flags (.cc only)
|
|
|
|
# LDFLAGS linker flags (don't use -Wl, frontend prefix)
|
|
|
|
# ASFLAGS assembler flags (don't use -Wa, frontend prefix)
|
2023-06-08 11:37:05 +00:00
|
|
|
#
|
|
|
|
# For each FOO above, there exists (by increasing preference)
|
|
|
|
#
|
|
|
|
# DEFAULT_FOO see build/definitions.mk
|
|
|
|
# CONFIG_FOO see build/config.mk
|
|
|
|
# FOO set ~/.cosmo.mk and target-specific
|
|
|
|
# OVERRIDE_FOO set ~/.cosmo.mk and target-specific (use rarely)
|
|
|
|
#
|
2020-06-15 14:18:57 +00:00
|
|
|
|
2021-02-20 01:10:13 +00:00
|
|
|
LC_ALL = C
|
2021-02-07 14:11:44 +00:00
|
|
|
SOURCE_DATE_EPOCH = 0
|
|
|
|
|
2020-06-15 14:18:57 +00:00
|
|
|
ARFLAGS = rcsD
|
2020-08-25 11:23:25 +00:00
|
|
|
ZFLAGS ?=
|
2020-06-15 14:18:57 +00:00
|
|
|
XARGS ?= xargs -P4 -rs8000
|
|
|
|
DOT ?= dot
|
2021-02-22 07:33:44 +00:00
|
|
|
CLANG = clang
|
2020-06-15 14:18:57 +00:00
|
|
|
FC = gfortran #/opt/cross9f/bin/x86_64-linux-musl-gfortran
|
2022-05-25 18:31:08 +00:00
|
|
|
TMPDIR = o/tmp
|
2020-06-15 14:18:57 +00:00
|
|
|
|
2021-02-20 06:20:38 +00:00
|
|
|
AR = build/bootstrap/ar.com
|
2022-05-25 18:31:08 +00:00
|
|
|
CP = build/bootstrap/cp.com
|
|
|
|
RM = build/bootstrap/rm.com -f
|
2023-05-09 09:35:05 +00:00
|
|
|
GZIP = build/bootstrap/gzip.com
|
2022-05-25 18:31:08 +00:00
|
|
|
ECHO = build/bootstrap/echo.com
|
2023-06-08 12:17:28 +00:00
|
|
|
CHMOD = build/bootstrap/chmod.com
|
2022-05-25 18:31:08 +00:00
|
|
|
TOUCH = build/bootstrap/touch.com
|
2021-02-20 06:20:38 +00:00
|
|
|
PKG = build/bootstrap/package.com
|
|
|
|
MKDEPS = build/bootstrap/mkdeps.com
|
|
|
|
ZIPOBJ = build/bootstrap/zipobj.com
|
2023-06-10 16:15:19 +00:00
|
|
|
ZIPCOPY = build/bootstrap/zipcopy.com
|
2023-08-11 11:37:23 +00:00
|
|
|
PECHECK = build/bootstrap/pecheck.com
|
2022-08-06 10:51:50 +00:00
|
|
|
FIXUPOBJ = build/bootstrap/fixupobj.com
|
2022-05-25 18:31:08 +00:00
|
|
|
MKDIR = build/bootstrap/mkdir.com -p
|
2022-06-26 01:17:31 +00:00
|
|
|
COMPILE = build/bootstrap/compile.com -V9 -P4096 $(QUOTA)
|
2022-05-25 18:31:08 +00:00
|
|
|
|
|
|
|
COMMA := ,
|
|
|
|
PWD := $(shell build/bootstrap/pwd.com)
|
|
|
|
|
2023-07-24 00:07:38 +00:00
|
|
|
IGNORE := $(shell $(MKDIR) $(TMPDIR))
|
2022-05-25 18:31:08 +00:00
|
|
|
|
2023-05-09 09:35:05 +00:00
|
|
|
ifneq ($(findstring aarch64,$(MODE)),)
|
|
|
|
ARCH = aarch64
|
|
|
|
VM = o/third_party/qemu/qemu-aarch64
|
2023-06-04 15:19:45 +00:00
|
|
|
HOSTS ?= pi silicon
|
2023-05-09 09:35:05 +00:00
|
|
|
else
|
|
|
|
ARCH = x86_64
|
2023-08-08 03:22:49 +00:00
|
|
|
HOSTS ?= freebsd openbsd netbsd rhel7 rhel5 xnu win10
|
2023-05-09 09:35:05 +00:00
|
|
|
endif
|
|
|
|
|
2023-06-08 11:37:05 +00:00
|
|
|
ifeq ($(PREFIX),)
|
|
|
|
ifeq ($(USE_SYSTEM_TOOLCHAIN),)
|
2022-10-02 06:11:56 +00:00
|
|
|
ifneq ("$(wildcard o/third_party/gcc/bin/x86_64-pc-linux-gnu-*)","")
|
|
|
|
PREFIX = o/third_party/gcc/bin/x86_64-pc-linux-gnu-
|
2022-05-25 18:31:08 +00:00
|
|
|
else
|
|
|
|
IGNORE := $(shell build/bootstrap/unbundle.com)
|
2022-10-02 06:11:56 +00:00
|
|
|
PREFIX = o/third_party/gcc/bin/x86_64-linux-musl-
|
2023-05-02 02:43:59 +00:00
|
|
|
endif
|
2023-05-09 09:35:05 +00:00
|
|
|
ifeq ($(ARCH), aarch64)
|
2023-05-02 02:43:59 +00:00
|
|
|
PREFIX = o/third_party/gcc/bin/aarch64-linux-musl-
|
2022-05-25 18:31:08 +00:00
|
|
|
endif
|
2023-06-08 11:37:05 +00:00
|
|
|
endif
|
|
|
|
endif
|
2020-06-15 14:18:57 +00:00
|
|
|
|
2022-10-02 06:11:56 +00:00
|
|
|
AS = $(PREFIX)as
|
|
|
|
CC = $(PREFIX)gcc
|
|
|
|
CXX = $(PREFIX)g++
|
|
|
|
CXXFILT = $(PREFIX)c++filt
|
|
|
|
LD = $(PREFIX)ld.bfd
|
|
|
|
NM = $(PREFIX)nm
|
|
|
|
GCC = $(PREFIX)gcc
|
|
|
|
STRIP = $(PREFIX)strip
|
|
|
|
OBJCOPY = $(PREFIX)objcopy
|
|
|
|
OBJDUMP = $(PREFIX)objdump
|
2023-06-08 13:44:54 +00:00
|
|
|
ifneq ($(wildcard $(PWD)/$(PREFIX)addr2line), )
|
|
|
|
ADDR2LINE = $(PWD)/$(PREFIX)addr2line
|
|
|
|
else
|
|
|
|
ADDR2LINE = $(PREFIX)addr2line
|
|
|
|
endif
|
2022-10-02 06:11:56 +00:00
|
|
|
|
2020-06-15 14:18:57 +00:00
|
|
|
export ADDR2LINE
|
2021-02-07 14:11:44 +00:00
|
|
|
export LC_ALL
|
2022-05-25 18:31:08 +00:00
|
|
|
export MKDIR
|
2020-06-15 14:18:57 +00:00
|
|
|
export MODE
|
2021-02-07 14:11:44 +00:00
|
|
|
export SOURCE_DATE_EPOCH
|
2020-06-15 14:18:57 +00:00
|
|
|
export TMPDIR
|
2021-02-07 14:11:44 +00:00
|
|
|
|
2022-08-21 07:17:20 +00:00
|
|
|
ifeq ($(LANDLOCKMAKE_VERSION),)
|
2023-06-08 11:37:05 +00:00
|
|
|
TMPSAFE = $(join $(TMPDIR),$(subst /,_,$@)).tmp
|
2022-08-21 07:17:20 +00:00
|
|
|
else
|
|
|
|
TMPSAFE = $(TMPDIR)/
|
|
|
|
endif
|
|
|
|
|
2023-05-19 02:05:08 +00:00
|
|
|
ifeq ($(ARCH), aarch64)
|
|
|
|
IMAGE_BASE_VIRTUAL ?= 0x010000000000
|
|
|
|
else
|
|
|
|
IMAGE_BASE_VIRTUAL ?= 0x400000
|
|
|
|
endif
|
|
|
|
|
2021-10-14 00:27:13 +00:00
|
|
|
BACKTRACES = \
|
|
|
|
-fno-optimize-sibling-calls \
|
|
|
|
-mno-omit-leaf-frame-pointer
|
|
|
|
|
2023-05-09 09:35:05 +00:00
|
|
|
ifneq ($(ARCH), aarch64)
|
|
|
|
BACKTRACES += -fno-schedule-insns2
|
|
|
|
endif
|
|
|
|
|
2020-06-15 14:18:57 +00:00
|
|
|
SANITIZER = \
|
2021-02-07 14:11:44 +00:00
|
|
|
-fsanitize=address
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
NO_MAGIC = \
|
|
|
|
-fno-stack-protector \
|
2022-03-18 09:33:37 +00:00
|
|
|
-fwrapv \
|
|
|
|
-fno-sanitize=all
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
OLD_CODE = \
|
|
|
|
-fno-strict-aliasing \
|
|
|
|
-fno-strict-overflow
|
|
|
|
|
|
|
|
TRADITIONAL = \
|
|
|
|
-Wno-implicit-int \
|
|
|
|
-Wno-return-type \
|
|
|
|
-Wno-pointer-sign
|
|
|
|
|
2023-06-05 07:37:25 +00:00
|
|
|
DEFAULT_CCFLAGS += \
|
2020-06-15 14:18:57 +00:00
|
|
|
-Wall \
|
|
|
|
-Werror \
|
2023-06-08 13:44:54 +00:00
|
|
|
-fno-omit-frame-pointer \
|
2020-06-15 14:18:57 +00:00
|
|
|
-frecord-gcc-switches
|
|
|
|
|
2023-06-08 11:37:05 +00:00
|
|
|
DEFAULT_COPTS ?= \
|
2020-06-15 14:18:57 +00:00
|
|
|
-fno-math-errno \
|
|
|
|
-fno-ident \
|
|
|
|
-fno-common \
|
|
|
|
-fno-gnu-unique \
|
|
|
|
-fstrict-aliasing \
|
|
|
|
-fstrict-overflow \
|
2023-06-08 11:37:05 +00:00
|
|
|
-fno-semantic-interposition \
|
|
|
|
-fno-dwarf2-cfi-asm \
|
|
|
|
-fno-unwind-tables \
|
|
|
|
-fno-asynchronous-unwind-tables
|
2023-05-01 21:36:25 +00:00
|
|
|
|
2023-05-19 02:05:08 +00:00
|
|
|
ifeq ($(ARCH), x86_64)
|
2023-08-12 05:52:11 +00:00
|
|
|
# Microsoft says "[a]ny memory below the stack beyond the red zone
|
|
|
|
# [note: Windows defines the x64 red zone size as 0] is considered
|
|
|
|
# volatile and may be modified by the operating system at any time."
|
|
|
|
# https://devblogs.microsoft.com/oldnewthing/20190111-00/?p=100685
|
2023-05-01 21:36:25 +00:00
|
|
|
DEFAULT_COPTS += \
|
|
|
|
-mno-red-zone \
|
2022-07-10 11:01:17 +00:00
|
|
|
-mno-tls-direct-seg-refs
|
2023-05-01 21:36:25 +00:00
|
|
|
endif
|
2020-06-15 14:18:57 +00:00
|
|
|
|
2023-05-19 02:05:08 +00:00
|
|
|
ifeq ($(ARCH), aarch64)
|
|
|
|
#
|
|
|
|
# - Apple says in "Writing ARM64 code for Apple platforms" that we're
|
|
|
|
# not allowed to use the x18 register.
|
|
|
|
#
|
|
|
|
# - Cosmopolitan Libc uses x28 for thread-local storage because Apple
|
|
|
|
# forbids us from using tpidr_el0 too.
|
|
|
|
#
|
2023-08-12 05:52:11 +00:00
|
|
|
# - Cosmopolitan currently lacks an implementation of the runtime
|
|
|
|
# libraries needed by the -moutline-atomics flag
|
|
|
|
#
|
2023-05-19 02:05:08 +00:00
|
|
|
DEFAULT_COPTS += \
|
|
|
|
-ffixed-x18 \
|
2023-06-05 09:07:28 +00:00
|
|
|
-ffixed-x28 \
|
|
|
|
-mno-outline-atomics
|
2023-05-19 02:05:08 +00:00
|
|
|
endif
|
|
|
|
|
2020-08-25 11:23:25 +00:00
|
|
|
MATHEMATICAL = \
|
|
|
|
-O3 \
|
|
|
|
-fwrapv
|
|
|
|
|
2023-06-05 07:37:25 +00:00
|
|
|
DEFAULT_CPPFLAGS += \
|
2023-08-14 03:31:27 +00:00
|
|
|
-D_COSMO_SOURCE \
|
2021-02-27 18:47:19 +00:00
|
|
|
-DMODE='"$(MODE)"' \
|
2020-06-15 14:18:57 +00:00
|
|
|
-DIMAGE_BASE_VIRTUAL=$(IMAGE_BASE_VIRTUAL) \
|
|
|
|
-nostdinc \
|
2022-08-06 10:51:50 +00:00
|
|
|
-iquote .
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
DEFAULT_CFLAGS = \
|
|
|
|
-std=gnu2x
|
|
|
|
|
|
|
|
DEFAULT_CXXFLAGS = \
|
|
|
|
-fno-rtti \
|
|
|
|
-fno-exceptions \
|
|
|
|
-fuse-cxa-atexit \
|
2020-07-02 20:46:08 +00:00
|
|
|
-Wno-int-in-bool-context \
|
2022-07-22 13:58:36 +00:00
|
|
|
-Wno-narrowing \
|
|
|
|
-Wno-literal-suffix
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
DEFAULT_ASFLAGS = \
|
|
|
|
-W \
|
|
|
|
-I. \
|
2023-07-10 19:17:18 +00:00
|
|
|
--noexecstack
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
DEFAULT_LDFLAGS = \
|
|
|
|
-static \
|
|
|
|
-nostdlib \
|
2023-07-24 00:07:38 +00:00
|
|
|
-znorelro \
|
2021-02-11 16:37:18 +00:00
|
|
|
--gc-sections \
|
2020-06-15 14:18:57 +00:00
|
|
|
--build-id=none \
|
2023-07-01 12:10:12 +00:00
|
|
|
--no-dynamic-linker
|
|
|
|
|
|
|
|
# # generate linker report files
|
|
|
|
# DEFAULT_LDFLAGS += --cref -Map=$@.map
|
2023-05-19 02:05:08 +00:00
|
|
|
|
|
|
|
ifeq ($(ARCH), aarch64)
|
|
|
|
DEFAULT_LDFLAGS += \
|
|
|
|
-zmax-page-size=0x4000 \
|
|
|
|
-zcommon-page-size=0x4000 \
|
|
|
|
-znorelro
|
|
|
|
else
|
|
|
|
DEFAULT_LDFLAGS += \
|
2023-08-10 01:36:38 +00:00
|
|
|
-zmax-page-size=0x1000 \
|
2023-05-19 02:05:08 +00:00
|
|
|
-zcommon-page-size=0x1000
|
|
|
|
endif
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
ASONLYFLAGS = \
|
2021-02-08 17:19:00 +00:00
|
|
|
-c \
|
2023-07-10 12:55:00 +00:00
|
|
|
-g
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
DEFAULT_LDLIBS =
|
|
|
|
|
|
|
|
MCA = llvm-mca-10 \
|
|
|
|
-mtriple=x86_64-pc-linux-gnu \
|
|
|
|
-instruction-info \
|
|
|
|
-iterations=3 \
|
|
|
|
-all-stats \
|
|
|
|
-all-views \
|
|
|
|
-timeline
|
|
|
|
|
|
|
|
cc.flags = \
|
|
|
|
$(DEFAULT_CCFLAGS) \
|
|
|
|
$(CONFIG_CCFLAGS) \
|
|
|
|
$(CCFLAGS) \
|
2020-06-19 06:04:41 +00:00
|
|
|
$(OVERRIDE_CCFLAGS)
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
o.flags = \
|
|
|
|
$(DEFAULT_OFLAGS) \
|
|
|
|
$(CONFIG_OFLAGS) \
|
|
|
|
$(OFLAGS) \
|
|
|
|
$(OVERRIDE_OFLAGS)
|
|
|
|
|
|
|
|
cpp.flags = \
|
|
|
|
$(DEFAULT_CPPFLAGS) \
|
|
|
|
$(CONFIG_CPPFLAGS) \
|
|
|
|
$(CPPFLAGS) \
|
2020-09-28 08:13:56 +00:00
|
|
|
$(OVERRIDE_CPPFLAGS) \
|
2022-08-06 10:51:50 +00:00
|
|
|
-include libc/integral/normalize.inc
|
2020-06-15 14:18:57 +00:00
|
|
|
|
|
|
|
copt.flags = \
|
|
|
|
$(TARGET_ARCH) \
|
|
|
|
$(DEFAULT_COPTS) \
|
|
|
|
$(CONFIG_COPTS) \
|
|
|
|
$(COPTS) \
|
|
|
|
$(OVERRIDE_COPTS)
|
|
|
|
|
|
|
|
f.flags = \
|
|
|
|
$(DEFAULT_FFLAGS) \
|
|
|
|
$(CONFIG_FFLAGS) \
|
|
|
|
$(FFLAGS) \
|
|
|
|
$(OVERRIDE_FFLAGS)
|
|
|
|
|
|
|
|
c.flags = \
|
|
|
|
$(DEFAULT_CFLAGS) \
|
|
|
|
$(CONFIG_CFLAGS) \
|
|
|
|
$(CFLAGS) \
|
|
|
|
$(OVERRIDE_CFLAGS)
|
|
|
|
|
|
|
|
cxx.flags = \
|
|
|
|
$(DEFAULT_CXXFLAGS) \
|
|
|
|
$(CONFIG_CXXFLAGS) \
|
|
|
|
$(CXXFLAGS) \
|
|
|
|
$(OVERRIDE_CXXFLAGS)
|
|
|
|
|
|
|
|
s.flags = \
|
|
|
|
$(DEFAULT_ASFLAGS) \
|
|
|
|
$(CONFIG_ASFLAGS) \
|
|
|
|
$(ASFLAGS) \
|
|
|
|
$(OVERRIDE_ASFLAGS)
|
|
|
|
|
|
|
|
S.flags = $(addprefix -Wa$(COMMA),$(s.flags))
|
|
|
|
|
|
|
|
LD.libs = \
|
|
|
|
$(LDLIBS) \
|
|
|
|
$(LOADLIBES) \
|
|
|
|
$(DEFAULT_LDLIBS) \
|
|
|
|
$(CONFIG_LDLIBS) \
|
|
|
|
$(LDLIBS) \
|
|
|
|
$(DEFAULT_LIBS) \
|
|
|
|
$(CONFIG_LIBS) \
|
|
|
|
$(LIBS)
|
|
|
|
|
2023-06-08 11:37:05 +00:00
|
|
|
COMPILE.c.flags = $(cc.flags) $(copt.flags) $(cpp.flags) $(c.flags)
|
|
|
|
COMPILE.cxx.flags = $(cc.flags) $(copt.flags) $(cpp.flags) $(cxx.flags)
|
2020-06-15 14:18:57 +00:00
|
|
|
COMPILE.f.flags = $(cc.flags) $(copt.flags) $(f.flags)
|
2023-06-08 11:37:05 +00:00
|
|
|
COMPILE.F.flags = $(cc.flags) $(copt.flags) $(cpp.flags) $(f.flags)
|
2020-06-15 14:18:57 +00:00
|
|
|
COMPILE.i.flags = $(cc.flags) $(copt.flags) $(c.flags)
|
|
|
|
COMPILE.ii.flags = $(cc.flags) $(copt.flags) $(cxx.flags)
|
|
|
|
LINK.flags = $(DEFAULT_LDFLAGS) $(CONFIG_LDFLAGS) $(LDFLAGS)
|
2023-06-08 11:37:05 +00:00
|
|
|
OBJECTIFY.c.flags = $(cc.flags) $(o.flags) $(S.flags) $(cpp.flags) $(copt.flags) $(c.flags)
|
|
|
|
OBJECTIFY.cxx.flags = $(cc.flags) $(o.flags) $(S.flags) $(cpp.flags) $(copt.flags) $(cxx.flags)
|
2020-06-15 14:18:57 +00:00
|
|
|
OBJECTIFY.s.flags = $(ASONLYFLAGS) $(s.flags)
|
2023-06-08 11:37:05 +00:00
|
|
|
OBJECTIFY.S.flags = $(cc.flags) $(o.flags) $(S.flags) $(cpp.flags)
|
|
|
|
OBJECTIFY.f.flags = $(cc.flags) $(o.flags) $(S.flags) $(f.flags)
|
|
|
|
OBJECTIFY.F.flags = $(cc.flags) $(o.flags) $(S.flags) $(cpp.flags) $(copt.flags) $(f.flags)
|
2020-06-15 14:18:57 +00:00
|
|
|
PREPROCESS.flags = -E $(copt.flags) $(cc.flags) $(cpp.flags)
|
|
|
|
PREPROCESS.lds.flags = -D__LINKER__ $(filter-out -g%,$(PREPROCESS.flags)) -P -xc
|
|
|
|
|
|
|
|
COMPILE.c = $(CC) -S $(COMPILE.c.flags)
|
2020-07-02 20:46:08 +00:00
|
|
|
COMPILE.cxx = $(CXX) -S $(COMPILE.cxx.flags)
|
2020-06-15 14:18:57 +00:00
|
|
|
COMPILE.i = $(CC) -S $(COMPILE.i.flags)
|
|
|
|
COMPILE.f = $(FC) -S $(COMPILE.f.flags)
|
|
|
|
COMPILE.F = $(FC) -S $(COMPILE.F.flags)
|
|
|
|
OBJECTIFY.s = $(AS) $(OBJECTIFY.s.flags)
|
|
|
|
OBJECTIFY.S = $(CC) $(OBJECTIFY.S.flags) -c
|
|
|
|
OBJECTIFY.f = $(FC) $(OBJECTIFY.f.flags) -c
|
|
|
|
OBJECTIFY.F = $(FC) $(OBJECTIFY.F.flags) -c
|
|
|
|
OBJECTIFY.c = $(CC) $(OBJECTIFY.c.flags) -c
|
|
|
|
OBJECTIFY.cxx = $(CXX) $(OBJECTIFY.cxx.flags) -c
|
|
|
|
PREPROCESS = $(CC) $(PREPROCESS.flags)
|
|
|
|
PREPROCESS.lds = $(CC) $(PREPROCESS.lds.flags)
|
2021-02-08 17:19:00 +00:00
|
|
|
LINK = $(LD) $(LINK.flags)
|
2020-06-15 14:18:57 +00:00
|
|
|
ELF = o/libc/elf/elf.lds
|
2023-06-10 16:15:19 +00:00
|
|
|
ELFLINK = $(COMPILE) -ALINK.elf $(LINK) $(LINKARGS) $(OUTPUT_OPTION) && $(COMPILE) -AFIXUP.ape -T$@ $(FIXUPOBJ) $@
|
2020-06-15 14:18:57 +00:00
|
|
|
LINKARGS = $(patsubst %.lds,-T %.lds,$(call uniqr,$(LD.libs) $(filter-out %.pkg,$^)))
|
|
|
|
LOLSAN = build/lolsan -b $(IMAGE_BASE_VIRTUAL)
|
|
|
|
|
|
|
|
# The compiler won't generate %xmm code for sources extensioned .greg.c,
|
|
|
|
# which is needed for C modules wanting to run at the executive level or
|
|
|
|
# during privileged runtime states, e.g. code morphing.
|
|
|
|
OBJECTIFY.greg.c = \
|
|
|
|
$(CC) \
|
|
|
|
$(filter-out -pg,$(OBJECTIFY.c.flags)) \
|
|
|
|
-D__MGENERAL_REGS_ONLY__ \
|
|
|
|
-mgeneral-regs-only \
|
|
|
|
-fno-stack-protector \
|
|
|
|
-fno-instrument-functions \
|
|
|
|
-fno-optimize-sibling-calls \
|
|
|
|
-fno-sanitize=all \
|
2022-03-16 20:33:13 +00:00
|
|
|
-ffreestanding \
|
|
|
|
-fwrapv \
|
2020-06-15 14:18:57 +00:00
|
|
|
-c
|
|
|
|
|
|
|
|
OBJECTIFY.ansi.c = $(CC) $(OBJECTIFY.c.flags) -ansi -Wextra -Werror -pedantic-errors -c
|
|
|
|
OBJECTIFY.c99.c = $(CC) $(OBJECTIFY.c.flags) -std=c99 -Wextra -Werror -pedantic-errors -c
|
|
|
|
OBJECTIFY.c11.c = $(CC) $(OBJECTIFY.c.flags) -std=c11 -Wextra -Werror -pedantic-errors -c
|
|
|
|
OBJECTIFY.c2x.c = $(CC) $(OBJECTIFY.c.flags) -std=c2x -Wextra -Werror -pedantic-errors -c
|
|
|
|
|
2020-09-28 08:13:56 +00:00
|
|
|
OBJECTIFY.real.c = \
|
|
|
|
$(GCC) \
|
2020-10-06 06:11:49 +00:00
|
|
|
-x-no-pg \
|
2020-09-28 08:13:56 +00:00
|
|
|
$(OBJECTIFY.c.flags) \
|
|
|
|
-wrapper build/realify.sh \
|
2020-10-01 08:20:13 +00:00
|
|
|
-D__REAL_MODE__ \
|
2020-09-28 08:13:56 +00:00
|
|
|
-ffixed-r8 \
|
|
|
|
-ffixed-r9 \
|
|
|
|
-ffixed-r10 \
|
|
|
|
-ffixed-r11 \
|
|
|
|
-ffixed-r12 \
|
|
|
|
-ffixed-r13 \
|
|
|
|
-ffixed-r14 \
|
|
|
|
-ffixed-r15 \
|
2020-10-06 06:11:49 +00:00
|
|
|
-mno-red-zone \
|
2020-10-01 08:20:13 +00:00
|
|
|
-fcall-used-rbx \
|
2020-10-06 06:11:49 +00:00
|
|
|
-fno-jump-tables \
|
|
|
|
-fno-shrink-wrap \
|
|
|
|
-fno-schedule-insns2 \
|
|
|
|
-flive-range-shrinkage \
|
2020-10-01 08:20:13 +00:00
|
|
|
-fno-omit-frame-pointer \
|
|
|
|
-momit-leaf-frame-pointer \
|
|
|
|
-mpreferred-stack-boundary=3 \
|
|
|
|
-fno-delete-null-pointer-checks \
|
2020-09-28 08:13:56 +00:00
|
|
|
-c
|
|
|
|
|
2020-06-15 14:18:57 +00:00
|
|
|
OBJECTIFY.ncabi.c = \
|
|
|
|
$(GCC) \
|
|
|
|
$(OBJECTIFY.c.flags) \
|
|
|
|
-mno-sse \
|
|
|
|
-mfpmath=387 \
|
|
|
|
-fno-stack-protector \
|
|
|
|
-fno-instrument-functions \
|
|
|
|
-fno-optimize-sibling-calls \
|
|
|
|
-fno-sanitize=all \
|
|
|
|
-fcall-saved-rcx \
|
|
|
|
-fcall-saved-rdx \
|
|
|
|
-fcall-saved-rdi \
|
|
|
|
-fcall-saved-rsi \
|
|
|
|
-fcall-saved-r8 \
|
|
|
|
-fcall-saved-r9 \
|
|
|
|
-fcall-saved-r10 \
|
|
|
|
-fcall-saved-r11 \
|
|
|
|
-c \
|
|
|
|
-xc
|
|
|
|
|
2020-08-25 11:23:25 +00:00
|
|
|
OBJECTIFY.initabi.c = \
|
|
|
|
$(GCC) \
|
|
|
|
$(OBJECTIFY.c.flags) \
|
|
|
|
-fno-stack-protector \
|
|
|
|
-fno-instrument-functions \
|
|
|
|
-fno-optimize-sibling-calls \
|
|
|
|
-fno-sanitize=all \
|
|
|
|
-fcall-saved-rdi \
|
|
|
|
-fcall-saved-rsi \
|
|
|
|
-c
|
|
|
|
|
|
|
|
TAGSFLAGS = \
|
|
|
|
-e \
|
|
|
|
-a \
|
|
|
|
--if0=no \
|
|
|
|
--langmap=c:.c.h.i \
|
|
|
|
--line-directives=yes \
|
2020-11-25 16:19:00 +00:00
|
|
|
--exclude=libc/nt/struct/imagefileheader.internal.h \
|
2020-08-25 11:23:25 +00:00
|
|
|
--exclude=libc/nt/struct/filesegmentelement.h
|