ntp-tools / Makefile /
dbecb1f 4 months ago
1 contributor
107 lines | 2.237kb
# 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