41 lines
1.1 KiB
Makefile
41 lines
1.1 KiB
Makefile
#!/usr/bin/make -f
|
|
SHELL :=/bin/sh
|
|
.SHELLFLAGS :=-efc
|
|
MAKEFLAGS +=--no-print-directory
|
|
|
|
SRC = main.cc coreutils-sort.cc overlay.cc print.cc sort.cc xxhash.cc
|
|
|
|
CROSS ?=
|
|
CC =$(CROSS)gcc
|
|
CXX =$(CROSS)g++
|
|
STRIP =$(CROSS)strip
|
|
|
|
CFLAGS_LTO ?=-flto=2 -fuse-linker-plugin -ffat-lto-objects -flto-partition=none
|
|
CFLAGS_COMMON ?=-O2 -g -fPIE -fstack-protector-strong
|
|
CFLAGS ?=$(CFLAGS_COMMON) $(CFLAGS_LTO)
|
|
CPPFLAGS ?=-Wall -Wextra -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
|
|
CXXFLAGS ?=$(CFLAGS_COMMON) $(CFLAGS_LTO) -std=gnu++20
|
|
LDFLAGS ?=-Wl,-z,relro -Wl,-z,now -pie
|
|
|
|
NO_WARN = attributes class-memaccess unused-function unused-result
|
|
CPPFLAGS += $(foreach w,$(NO_WARN),-Wno-$(w))
|
|
|
|
NO_CXX = rtti exceptions
|
|
CXXFLAGS +=$(foreach f,$(NO_CXX),-fno-$(f))
|
|
|
|
OBJ = $(SRC:.cc=.cc.o)
|
|
|
|
.DEFAULT: all
|
|
.PHONY: all build clean
|
|
all build: overlaydirs
|
|
|
|
%.cc.o: %.cc
|
|
$(CXX) -c $(CXXFLAGS) $(CPPFLAGS) -o $@ $^
|
|
|
|
overlaydirs: $(OBJ)
|
|
$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ \
|
|
$(if $(filter $(RELMODE),1),&& $(STRIP) --strip-debug --strip-unneeded $@)
|
|
|
|
clean:
|
|
rm -f overlaydirs $(OBJ)
|