You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

156 lines
5.4 KiB

DIRS := nfq tpws ip2net mdig
DIRS_MAC := tpws ip2net mdig
TGT := binaries/my
# MacOS target detection with improved compatibility
MACOS_TARGET ?= $(shell uname -m | sed 's/x86_64/x86_64-apple-macos10.8/;s/arm64/arm64-apple-macos10.8/')
# Detect MacOS version for better compatibility
MACOS_VERSION ?= $(shell sw_vers -productVersion 2>/dev/null | cut -d. -f1,2 || echo "10.8")
# Check if we're on MacOS (Darwin)
IS_MACOS := $(shell [ "$(shell uname)" = "Darwin" ] && echo "1" || echo "0")
all: clean
@mkdir -p "$(TGT)"; \
for dir in $(DIRS); do \
find "$$dir" -type f \( -name "*.c" -o -name "*.h" -o -name "*akefile" \) -exec chmod -x {} \; ; \
$(MAKE) -C "$$dir" || exit; \
for exe in "$$dir/"*; do \
if [ -f "$$exe" ] && [ -x "$$exe" ]; then \
mv -f "$$exe" "${TGT}" ; \
ln -fs "../${TGT}/$$(basename "$$exe")" "$$exe" ; \
fi \
done \
done
systemd: clean
@mkdir -p "$(TGT)"; \
for dir in $(DIRS); do \
find "$$dir" -type f \( -name "*.c" -o -name "*.h" -o -name "*akefile" \) -exec chmod -x {} \; ; \
$(MAKE) -C "$$dir" systemd || exit; \
for exe in "$$dir/"*; do \
if [ -f "$$exe" ] && [ -x "$$exe" ]; then \
mv -f "$$exe" "${TGT}" ; \
ln -fs "../${TGT}/$$(basename "$$exe")" "$$exe" ; \
fi \
done \
done
android: clean
@mkdir -p "$(TGT)"; \
for dir in $(DIRS); do \
find "$$dir" -type f \( -name "*.c" -o -name "*.h" -o -name "*akefile" \) -exec chmod -x {} \; ; \
$(MAKE) -C "$$dir" android || exit; \
for exe in "$$dir/"*; do \
if [ -f "$$exe" ] && [ -x "$$exe" ]; then \
mv -f "$$exe" "${TGT}" ; \
ln -fs "../${TGT}/$$(basename "$$exe")" "$$exe" ; \
fi \
done \
done
bsd: clean
@mkdir -p "$(TGT)"; \
for dir in $(DIRS); do \
find "$$dir" -type f \( -name "*.c" -o -name "*.h" -o -name "*akefile" \) -exec chmod -x {} \; ; \
$(MAKE) -C "$$dir" bsd || exit; \
for exe in "$$dir/"*; do \
if [ -f "$$exe" ] && [ -x "$$exe" ]; then \
mv -f "$$exe" "${TGT}" ; \
ln -fs "../${TGT}/$$(basename "$$exe")" "$$exe" ; \
fi \
done \
done
mac: clean
@mkdir -p "$(TGT)"; \
echo "Building for MacOS (Darwin) with target: $(MACOS_TARGET)"; \
echo "MacOS version: $(MACOS_VERSION)"; \
echo "Note: MacOS is NOT BSD - it's a hybrid system with unique characteristics"; \
# Check if nfq is available (it's not supported on MacOS) \
if [ "$(IS_MACOS)" = "1" ]; then \
echo "Note: nfq component is not supported on MacOS (no NFQUEUE support)"; \
echo "Building only: $(DIRS_MAC)"; \
fi; \
for dir in $(DIRS_MAC); do \
find "$$dir" -type f \( -name "*.c" -o -name "*.h" -o -name "*akefile" \) -exec chmod -x {} \; ; \
MACOS_TARGET="$(MACOS_TARGET)" MACOS_VERSION="$(MACOS_VERSION)" $(MAKE) -C "$$dir" mac || exit; \
for exe in "$$dir/"*; do \
if [ -f "$$exe" ] && [ -x "$$exe" ]; then \
mv -f "$$exe" "${TGT}" ; \
ln -fs "../${TGT}/$$(basename "$$exe")" "$$exe" ; \
fi \
done \
done
# Universal binary build for MacOS (both architectures)
mac-universal: clean
@mkdir -p "$(TGT)"; \
echo "Building universal binary for MacOS (Darwin) (x86_64 + arm64)"; \
echo "MacOS version: $(MACOS_VERSION)"; \
echo "Note: MacOS is NOT BSD - it's a hybrid system with unique characteristics"; \
# Check if nfq is available (it's not supported on MacOS) \
if [ "$(IS_MACOS)" = "1" ]; then \
echo "Note: nfq component is not supported on MacOS (no NFQUEUE support)"; \
echo "Building only: $(DIRS_MAC)"; \
fi; \
for dir in $(DIRS_MAC); do \
find "$$dir" -type f \( -name "*.c" -o -name "*.h" -o -name "*akefile" \) -exec chmod -x {} \; ; \
MACOS_TARGET="$(MACOS_TARGET)" MACOS_VERSION="$(MACOS_VERSION)" $(MAKE) -C "$$dir" mac-universal || exit; \
for exe in "$$dir/"*; do \
if [ -f "$$exe" ] && [ -x "$$exe" ]; then \
mv -f "$$exe" "${TGT}" ; \
ln -fs "../${TGT}/$$(basename "$$exe")" "$$exe" ; \
fi \
done \
done
# MacOS specific build with architecture detection
mac-auto: clean
@mkdir -p "$(TGT)"; \
echo "Auto-detecting MacOS (Darwin) architecture and building..."; \
if [ "$(IS_MACOS)" = "1" ]; then \
MACOS_TARGET="$(MACOS_TARGET)" MACOS_VERSION="$(MACOS_VERSION)" $(MAKE) mac; \
else \
echo "Error: This target is only available on MacOS (Darwin)"; \
exit 1; \
fi
clean:
@[ -d "$(TGT)" ] && rm -rf "$(TGT)" ; \
for dir in $(DIRS); do \
$(MAKE) -C "$$dir" clean; \
done
# MacOS specific clean
mac-clean:
@[ -d "$(TGT)" ] && rm -rf "$(TGT)" ; \
for dir in $(DIRS_MAC); do \
$(MAKE) -C "$$dir" clean; \
done
# Show MacOS build information
mac-info:
@echo "MacOS (Darwin) Build Information:"
@echo "=================================="
@echo "System: $(shell uname)"
@echo "Architecture: $(shell uname -m)"
@echo "MacOS version: $(MACOS_VERSION)"
@echo "Target: $(MACOS_TARGET)"
@echo "Is MacOS (Darwin): $(IS_MACOS)"
@echo "Supported components: $(DIRS_MAC)"
@echo "Unsupported components: nfq (no NFQUEUE support)"
@echo ""
@echo "IMPORTANT: MacOS is NOT BSD - it's a hybrid system with:"
@echo " - XNU kernel (Mach + BSD-like layer + Apple components)"
@echo " - Unique networking stack and system calls"
@echo " - Apple-specific security features (SIP, code signing)"
@echo " - Different firewall (PF) and service management (launchd)"
@echo ""
@echo "Available targets:"
@echo " make mac - Build for current architecture"
@echo " make mac-universal - Build universal binary (x86_64 + arm64)"
@echo " make mac-auto - Auto-detect and build"
@echo " make mac-clean - Clean MacOS builds only"
@echo " make mac-info - Show this information"