summaryrefslogtreecommitdiff
path: root/build/cross-compile.mk
blob: 5dc65f8814bbe662ead4d3dc664bad8224f4f342 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# Cross-compilation rules for GlaMaC
# This file contains rules for Windows cross-compilation from Linux

# Windows cross-compilation (Linux only)
ifeq ($(PLATFORM),linux)

win: $(BINDIR_WIN)/glamac.exe win-dlls win-data

win-all: win $(GLAUTILS_BINS_WIN)

$(BINDIR_WIN)/glamac.exe: $(GLAMAC_SRCS) | $(BINDIR_WIN)
	@echo "Cross-compiling glamac for Windows..."
	@which $(MINGW_CC) >/dev/null 2>&1 || (echo "ERROR: Install mingw-w64-gcc first" && exit 1)
	$(MINGW_CC) $^ $(CFLAGS_CROSS) -L$(CROSS_PREFIX)/lib -lmingw32 -lSDL3 -lSDL3_ttf -mwindows -static-libgcc -o $@

$(BINDIR_WIN)/%.exe: $(SRCDIR)/glautils/%.c | $(BINDIR_WIN)
	$(MINGW_CC) $< $(CFLAGS_CROSS) -static-libgcc -o $@

# Windows DLL management
win-dlls: | $(BINDIR_WIN)
	@echo "Getting Windows DLLs..."
	@$(MKDIR) $(DLL_CACHE)
	@if [ ! -f "$(DLL_CACHE)/SDL3.dll" ]; then \
		echo "Downloading SDL3.dll..."; \
		cd $(DLL_CACHE) && \
		wget -q https://github.com/libsdl-org/SDL/releases/download/release-3.2.10/SDL3-3.2.10-win32-x64.zip && \
		unzip -j SDL3-3.2.10-win32-x64.zip SDL3.dll && \
		$(RM) SDL3-3.2.10-win32-x64.zip; \
	fi
	@if [ ! -f "$(DLL_CACHE)/SDL3_ttf.dll" ]; then \
		echo "Downloading SDL3_ttf.dll..."; \
		cd $(DLL_CACHE) && \
		wget -q https://github.com/libsdl-org/SDL_ttf/releases/download/release-3.2.2/SDL3_ttf-3.2.2-win32-x64.zip && \
		unzip -j SDL3_ttf-3.2.2-win32-x64.zip SDL3_ttf.dll && \
		$(RM) SDL3_ttf-3.2.2-win32-x64.zip; \
	fi
	@cp $(DLL_CACHE)/*.dll $(BINDIR_WIN)/
	@echo "Windows build ready in $(BINDIR_WIN)/"

# Copy data files for Windows build
win-data: | $(BINDIR_WIN)
	@echo "Copying data files for Windows..."
	@$(MKDIR) $(BINDIR_WIN)/data/json
	@if [ -f "../data/json/glasses.json" ]; then \
		cp ../data/json/glasses.json $(BINDIR_WIN)/data/json/; \
		cp ../data/json/glasses.json $(BINDIR_WIN)/; \
		echo "Copied glasses.json to Windows build"; \
	else \
		echo "Warning: glasses.json not found, Windows build may use fallback data"; \
	fi
	@echo "Copying font for Windows..."
	@if [ -f "/usr/share/fonts/TTF/DejaVuSans.ttf" ]; then \
		cp /usr/share/fonts/TTF/DejaVuSans.ttf $(BINDIR_WIN)/; \
		echo "Copied DejaVuSans.ttf to Windows build"; \
	elif [ -f "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf" ]; then \
		cp /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf $(BINDIR_WIN)/; \
		echo "Copied DejaVuSans.ttf to Windows build"; \
	else \
		echo "Warning: DejaVu font not found, Windows build may fail to start"; \
	fi

# Cross-compilation setup
setup-cross:
	@echo "Setting up cross-compilation..."
	@which wget >/dev/null 2>&1 || (echo "Install wget first: sudo pacman -S wget" && exit 1)
	@which $(MINGW_CC) >/dev/null 2>&1 || (echo "Install mingw-w64-gcc first: sudo pacman -S mingw-w64-gcc" && exit 1)
	sudo $(MKDIR) $(CROSS_PREFIX)/include $(CROSS_PREFIX)/lib
	@echo "Downloading SDL3 development libraries..."
	cd /tmp && \
	wget -q https://github.com/libsdl-org/SDL/releases/download/release-3.2.10/SDL3-devel-3.2.10-mingw.tar.gz && \
	wget -q https://github.com/libsdl-org/SDL_ttf/releases/download/release-3.2.2/SDL3_ttf-devel-3.2.2-mingw.tar.gz && \
	tar -xzf SDL3-devel-3.2.10-mingw.tar.gz && \
	tar -xzf SDL3_ttf-devel-3.2.2-mingw.tar.gz && \
	sudo cp -r SDL3-3.2.10/x86_64-w64-mingw32/include/* $(CROSS_PREFIX)/include/ && \
	sudo cp -r SDL3-3.2.10/x86_64-w64-mingw32/lib/* $(CROSS_PREFIX)/lib/ && \
	sudo cp -r SDL3_ttf-3.2.2/x86_64-w64-mingw32/include/* $(CROSS_PREFIX)/include/ && \
	sudo cp -r SDL3_ttf-3.2.2/x86_64-w64-mingw32/lib/* $(CROSS_PREFIX)/lib/ && \
	$(RM) -rf SDL3-3.2.10* SDL3_ttf-3.2.2*
	@echo "Cross-compilation setup complete!"

else
# Windows host - disable cross-compilation
win win-all win-dlls setup-cross:
	@echo "Cross-compilation not available on Windows. Use 'make all' instead."
endif

# Cross-compilation cleanup
clean-cache:
	$(RMDIR) $(DLL_CACHE) 2>/dev/null || true

clean-all: clean clean-cache clean-deps-files

# Cross-compilation phony targets
.PHONY: win win-all win-dlls setup-cross win-data clean-cache clean-all
Back to https://optics-design.com