#!/usr/bin/env -S wmake -h -e -f
#
#  Makefile for cross-compiling 7zdec from a Linux host to a DOS target
#  using the Open Watcom toolchain.
#

7Z_FLAGS = -dZ7_EXTRACT_ONLY -dZ7_PPMD_SUPPORT -dZ7_ST

CC = wcc386
CFLAGS = -6 -bt=dos -ohtexan -d__WATCOM_LFN__ -i$(%WATCOM)/h $(7Z_FLAGS)
CC_SQUELCH = tail +7

LD = wlink
LFLAGS = system dos32a option stub=$(%WATCOM)/binw/dos32a.exe option eliminate
LD_SQUELCH = tail +6

# Order matters here for linking. (nb: `C/Util/7z/makefile`)
7ZDEC_SRC =          &
  C/7zDec.c          &
  C/Util/7z/7zMain.c &
  C/7zAlloc.c        &
  C/7zArcIn.c        &
  C/7zBuf.c          &
  C/7zBuf2.c         &
  C/7zCrc.c          &
  C/7zFile.c         &
  C/7zStream.c       &
  C/Aes.c            &
  C/Alloc.c          &
  C/Bcj2.c           &
  C/Blake2s.c        &
  C/Bra.c            &
  C/Bra86.c          &
  C/BraIA64.c        &
  C/BwtSort.c        &
  C/CpuArch.c        &
  C/Delta.c          &
  C/DllSecur.c       &
  C/LzFind.c         &
  C/Lzma86Dec.c      &
  C/Lzma2Dec.c       &
  C/LzmaLib.c        &
  C/Ppmd7.c          &
  C/Ppmd7aDec.c      &
  C/Ppmd7Dec.c       &
  C/Ppmd8.c          &
  C/Ppmd8Dec.c       &
  C/Sha1.c           &
  C/Sha256.c         &
  C/Sort.c           &
  C/SwapBytes.c      &
  C/Xz.c             &
  C/XzCrc64.c        &
  C/XzDec.c          &
  C/XzIn.c           &
  C/7zCrcOpt.c       &
  C/XzCrc64Opt.c     &
  C/Sha1Opt.c        &
  C/Sha256Opt.c      &
  C/AesOpt.c         &
  C/LzmaDec.c        &

7ZDEC_OBJ = $(7ZDEC_SRC:.c=.obj)

# Idiomatically declare source paths for the implicit build rule.
.c: C/;C/Util/7z/

# Override the implicit rule such that it does not produce `.o` files on Linux.
.c.obj:
	$(CC) $(CFLAGS) -fo=$@ $< | $(CC_SQUELCH)

7zdec.exe: $(7ZDEC_OBJ)
	$(LD) $(LFLAGS) name $@ file { $< } | $(LD_SQUELCH)
	# @todo: $(%WATCOM)/binw/ss.exe 7zdec.exe quiet.d32

clean: .SYMBOLIC
	rm -f 7zdec.exe
	rm -f C/*.obj C/Util/7z/*.obj
	rm -f C/*.err C/Util/7z/*.err
