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
|