summaryrefslogtreecommitdiffstats
path: root/build.sh
blob: 31d07403bab973babf2d4c074be7c968ad6c59c1 (plain) (blame)
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
#!/bin/bash
set -e

date +"%T"

BUILD_DIR=build
SOURCE_DIR=src
INCLUDES="-I${SOURCE_DIR}/code -I${SOURCE_DIR} -I${SOURCE_DIR}/base -I${BUILD_DIR}"
CFLAGS="-g -fno-rtti -fno-exceptions -Wall -Werror -fanalyzer -no-pie -Wno-unused-function -Wno-unused-variable -DPLATFORM_LINUX=1 -Wno-analyzer-null-dereference"

PKG_LIBS="vulkan wayland-client xkbcommon"
PKG_CFLAGS=$(pkg-config --cflags $PKG_LIBS)
PKG_LDFLAGS=$(pkg-config --libs $PKG_LIBS)

mkdir -p "$BUILD_DIR"

# Generate xdg-shell protocol glue (only regenerate if missing)
WL_PROTO_DIR=$(pkg-config --variable=pkgdatadir wayland-protocols)
XDG_SHELL_XML="${WL_PROTO_DIR}/stable/xdg-shell/xdg-shell.xml"

if [ ! -f "${BUILD_DIR}/xdg-shell-client-protocol.h" ]; then
    echo "Generating xdg-shell client header..."
    wayland-scanner client-header "$XDG_SHELL_XML" "${BUILD_DIR}/xdg-shell-client-protocol.h"
fi

if [ ! -f "${BUILD_DIR}/xdg-shell-protocol.c" ]; then
    echo "Generating xdg-shell protocol code..."
    wayland-scanner private-code "$XDG_SHELL_XML" "${BUILD_DIR}/xdg-shell-protocol.c"
fi

if [ ! -f "${BUILD_DIR}/xdg-shell-protocol.o" ]; then
    echo "Compiling xdg-shell protocol glue..."
    gcc $(pkg-config --cflags wayland-client)  -I"${BUILD_DIR}" -c "${BUILD_DIR}/xdg-shell-protocol.c" -o "${BUILD_DIR}/xdg-shell-protocol.o"
fi

echo "Building ${BUILD_DIR}/program..."
g++ $INCLUDES $CFLAGS $PKG_CFLAGS \
    "${SOURCE_DIR}/code/program.cpp" \
    "${BUILD_DIR}/xdg-shell-protocol.o" \
    $PKG_LDFLAGS \
	-lX11 \
    -o "${BUILD_DIR}/program"