APPLE_DEVELOPMENT := $(shell cat ../ids/APPLE_DEVELOPMENT)
APPLE_DEVELOPER_ID_APPLICATION := $(shell cat ../ids/APPLE_DEVELOPER_ID_APPLICATION)

FLAGS = -g
CFLAGS = -g
#-O
MACOS_VERSION = 13.0
SDK = $(shell xcrun --show-sdk-path)
XCODE_PATH = $(shell xcode-select --print-path)

EXEC = Grapp

SRCMODULES = Helpers.swift EditableNSTextField.swift EventMonitor.swift \
			 PopoverPanel.swift SearchViewController.swift \
			 SettingsViewController.swift HotKeyManager.swift \
			 KeyDetectorButton.swift PathManager.swift \
			 PathsTableCellView.swift ProgramsTable.swift ShadowView.swift \
			 DirMonitor.swift MenulessWindow.swift \
			 AboutViewController.swift AppDelegate.swift main.swift
ARMOBJMODULES = $(addprefix ./arm64/,$(SRCMODULES:.swift=.o))
X86OBJMODULES = $(addprefix ./x86_64/,$(SRCMODULES:.swift=.o))

LIBS =

FRAMEWORKS = -framework AppKit -framework ServiceManagement

default: $(EXEC).app

./arm64/%.o: %.swift
	swift -frontend -c \
		-target arm64-apple-macos$(MACOS_VERSION) $(FLAGS) \
		-primary-file $< $(filter-out $<, $(SRCMODULES)) $(LIBS) \
		$(FRAMEWORKS) -sdk $(SDK) -module-name $(EXEC) -o $@ \
		-emit-module && \
	touch $@

ifdef UNIVERSAL
./x86_64/%.o: %.swift
	@swift -frontend -c \
		-target x86_64-apple-macos$(MACOS_VERSION) $(FLAGS) \
		-primary-file $< $(filter-out $<, $(SRCMODULES)) \
		$(LIBS) $(FRAMEWORKS) -sdk $(SDK) -module-name $(EXEC) -o $@ \
		-emit-module && \
	touch $@
endif

./arm64/$(EXEC): $(ARMOBJMODULES)
	@ld -syslibroot $(SDK) -lSystem $(FRAMEWORKS) -arch arm64 \
		-macos_version_min $(MACOS_VERSION).0 \
		/Library/Developer/CommandLineTools/usr/lib/swift/macosx/libswiftCompatibilityPacks.a \
		-sectcreate __TEXT __info_plist Info.plist \
		-L /Library/Developer/CommandLineTools/usr/lib/swift/macosx -L \
		/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/swift \
		-no_objc_category_merging -L $(XCODE_PATH) -rpath \
		Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx \
		./arm64/main.o $(filter-out ./arm64/main.o, $(ARMOBJMODULES)) -o $@

ifdef UNIVERSAL
./x86_64/$(EXEC): $(X86OBJMODULES)
	@ld -syslibroot $(SDK) -lSystem $(FRAMEWORKS) -arch x86_64 \
		-macos_version_min $(MACOS_VERSION).0 \
		/Library/Developer/CommandLineTools/usr/lib/swift/macosx/libswiftCompatibilityPacks.a \
		-sectcreate __TEXT __info_plist Info.plist \
		-L /Library/Developer/CommandLineTools/usr/lib/swift/macosx \
		-L /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/swift \
		-no_objc_category_merging -L $(XCODE_PATH) -rpath \
		Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx \
		./x86_64/main.o $(filter-out ./x86_64/main.o, $(X86OBJMODULES)) -o $@
endif

# TODO: The universal build doesn't seem to compile x86_64.
ifdef UNIVERSAL
$(EXEC): ./arm64/$(EXEC) ./x86_64/$(EXEC)
	@lipo -create -output $(EXEC) $^
else
$(EXEC): ./arm64/$(EXEC)
	@lipo -create -output $(EXEC) $^
endif

$(EXEC).app: $(EXEC)
	@rm -rf $@
	@mkdir -p $@/Contents/MacOS/ && \
	mkdir -p $@/Contents/Resources/ && \
	cp Info.plist $@/Contents/ && \
	cp resources/AppIcon.icns $@/Contents/Resources/ && \
	cp $(EXEC) $@/Contents/MacOS/ && \
	$(if $(DEBUG), codesign --entitlements Grapp.entitlements \
		-s ${APPLE_DEVELOPMENT} -f --timestamp -o runtime $(EXEC).app, \
			codesign -s ${APPLE_DEVELOPER_ID_APPLICATION} -f --timestamp \
				-o runtime $(EXEC).app)

clean:
	rm -rf $(EXEC) $(EXEC).app arm64 x86_64
	mkdir arm64 x86_64
