-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
76 lines (60 loc) · 3.07 KB
/
Makefile
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
CROSS = x86_64-w64-mingw32-
CC = gcc
OPT = -Os
PC = pkg-config # e.g. for CROSS-pkg-config
DEBUG_CFLAGS = -g3 -Wall -Wextra -Wconversion -Wno-sign-conversion \
-fsanitize=undefined -fsanitize-undefined-trap-on-error
WIN32_CFLAGS = -fno-builtin -fno-asynchronous-unwind-tables
WIN32_LIBS = -s -nostdlib -Wl,--gc-sections -lkernel32
LINUX_CFLAGS = -fno-builtin -fno-pie -fno-asynchronous-unwind-tables
LINUX_LIBS = -static -s -no-pie -nostdlib -Wl,--gc-sections
pkg-config.exe: win32_main.c cmdline.c miniwin32.h u-config.c
$(CROSS)$(CC) $(OPT) $(WIN32_CFLAGS) -o $@ win32_main.c $(WIN32_LIBS)
pkg-config-debug.exe: win32_main.c cmdline.c miniwin32.h u-config.c
$(CROSS)$(CC) -nostartfiles $(DEBUG_CFLAGS) -o $@ win32_main.c
# Auto-configure using the system's pkg-config search path
pkg-config: generic_main.c u-config.c
$(CC) $(OPT) -o $@ generic_main.c \
-DPKG_CONFIG_LIBDIR="\"$$($(PC) --variable pc_path pkg-config)\""
pkg-config-debug: generic_main.c u-config.c
$(CC) $(DEBUG_CFLAGS) -o $@ generic_main.c
# Auto-configure using the system's pkg-config search path
pkg-config-linux-amd64: linux_amd64_main.c linux_noarch.c u-config.c
$(CC) $(OPT) $(LINUX_CFLAGS) -o $@ linux_amd64_main.c $(LINUX_LIBS) \
-DPKG_CONFIG_LIBDIR="\"$$($(PC) --variable pc_path pkg-config)\""
pkg-config-linux-amd64-debug: linux_amd64_main.c linux_noarch.c u-config.c
$(CC) -nostdlib -fno-builtin $(DEBUG_CFLAGS) -o $@ linux_amd64_main.c
# Auto-configure using the system's pkg-config search path
pkg-config-linux-i686: linux_i686_main.c linux_noarch.c u-config.c
$(CC) $(OPT) $(LINUX_CFLAGS) -o $@ linux_i686_main.c $(LINUX_LIBS) \
-DPKG_CONFIG_LIBDIR="\"$$($(PC) --variable pc_path pkg-config)\""
pkg-config-linux-i686-debug: linux_i686_main.c linux_noarch.c u-config.c
$(CC) -nostdlib -fno-builtin $(DEBUG_CFLAGS) -o $@ linux_i686_main.c
# Concatenate Windows-only u-config into a single source file
amalgamation: pkg-config.c
pkg-config.c: u-config.c miniwin32.h cmdline.c win32_main.c
awk 'n{print"";n=0} NR==3{printf"%s\n",cc} !/^#i.*"/{print}' \
cc='// $$ cc -nostartfiles -o pkg-config.exe pkg-config.c' \
>$@ u-config.c n=1 miniwin32.h n=1 cmdline.c n=1 win32_main.c
release:
version=$$(git describe); prefix=u-config-$${version#v}; \
git archive --prefix=$$prefix/ HEAD | gzip -9 >$$prefix.tar.gz
tests.exe: test_main.c u-config.c
$(CROSS)$(CC) $(DEBUG_CFLAGS) -Wno-clobbered -o $@ test_main.c
tests: test_main.c u-config.c
$(CC) $(DEBUG_CFLAGS) -Wno-clobbered -o $@ test_main.c
check test: tests$(EXE)
./tests$(EXE)
# Build and install into w64devkit
install: win32_main.c cmdline.c miniwin32.h u-config.c
$(CROSS)$(CC) $(OPT) $(WIN32_CFLAGS) win32_main.c \
-DPKG_CONFIG_PREFIX="\"/$$(gcc -dumpmachine)\"" \
-o $(W64DEVKIT_HOME)/bin/pkg-config.exe $(WIN32_LIBS)
clean:
rm -f pkg-config.exe pkg-config-debug.exe \
pkg-config pkg-config-debug \
pkg-config-linux-amd64 pkg-config-linux-amd64-debug \
pkg-config-linux-i686 pkg-config-linux-i686-debug \
pkg-config.c u-config-*.tar.gz \
tests.exe tests \
*.ilk *.obj *.pdb test_main.exe