#!/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"