1 contributor
# Default target and architecture
TARGET = linux
ARCH = $(shell uname -m)
PREFIX =
CC = gcc
AR =
STRIP =
CFLAGS = -static -Wall -Wextra -O2
# Override for MACHINE if set
ifeq ($(MACHINE),arm6)
ARCH = arm6
PREFIX = arm-linux-gnueabi
CC = $(PREFIX)-gcc
AR = $(PREFIX)-ar
STRIP = $(PREFIX)-strip
endif
ifeq ($(MACHINE),arm7)
ARCH = arm7
PREFIX = arm-linux-gnueabihf
CC = $(PREFIX)-gcc
AR = $(PREFIX)-ar
STRIP = $(PREFIX)-strip
endif
ifeq ($(MACHINE),win64)
ARCH = win64
TARGET = windows.exe
PREFIX = x86_64-w64-mingw32
CC = $(PREFIX)-gcc
AR = $(PREFIX)-ar
STRIP = $(PREFIX)-strip
CFLAGS += -D_WINDOWS_
endif
ifeq ($(MACHINE),win32)
ARCH = win32
TARGET = windows.exe
PREFIX = i686-w64-mingw32
CC = $(PREFIX)-gcc
AR = $(PREFIX)-ar
STRIP = $(PREFIX)-strip
CFLAGS += -D_WINDOWS_
endif
ifeq ($(MACHINE),cosmocc)
ARCH = multi
TARGET = cosmocc
PREFIX = cosmo
CC = $(COSMOCCDIR)/bin/$(PREFIX)cc
AR = $(COSMOCCDIR)/bin/$(PREFIX)ar
endif
ifeq ($(MACHINE),aarch64)
ARCH = aarch64
PREFIX = aarch64-none-linux-gnu
CC = $(AARCH64DIR)/bin/$(PREFIX)-gcc
AR = $(AARCH64DIR)/bin/$(PREFIX)-ar
STRIP = $(AARCH64DIR)/bin/$(PREFIX)-strip
endif
ifeq ($(MACHINE),riscv64)
ARCH = riscv64
PREFIX = riscv64-linux-gnu
CC = $(PREFIX)-gcc
AR = $(PREFIX)-ar
STRIP = $(PREFIX)-strip
endif
# Source files
SRCS = ntpprint.c ntpset.c set_time_back.c
# Output directory based on ARCH
OUTDIR = $(ARCH)
# Create binary names with architecture and target suffix
BINARIES = $(patsubst %.c,$(OUTDIR)/%-$(_TARGET)-$(ARCH),$(SRCS))
# Handle special case for TARGET variable inside pattern (since TARGET changes only in some ifeqs)
# So we assign a helper variable _TARGET to ensure TARGET is properly used in pattern substitution
_TARGET = $(TARGET)
all: $(BINARIES)
# Ensure output directory exists before building
$(OUTDIR):
mkdir -p $(OUTDIR)
# Pattern rule: compile each source file to output directory with naming scheme
$(OUTDIR)/%-$(_TARGET)-$(ARCH): %.c | $(OUTDIR)
$(CC) $(CFLAGS) -o $@ $<
ifdef STRIP
$(STRIP) $@
endif
ifeq ($(MACHINE),cosmocc)
$(RM) -fv $@.aarch64.elf $@.com.dbg
endif
clean:
rm -rf arm6 arm7 win64 win32 multi aarch64 riscv64 x86_64
.PHONY: all clean