summaryrefslogtreecommitdiff
path: root/base/build.sh
blob: b4150417e9f2077bd0cdd2412188502f5db7dfa9 (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
#!/bin/bash
export PATH="$(git rev-parse --show-toplevel)/bin:$PATH"

# Project name
PROJECT_NAME="base"

# Base configuration common to all builds
CFLAGS="-mavx2 -mtune=native -std=gnu11 "
CFLAGS+="-msse4.1 -mfunction-return=keep -mindirect-branch=keep "
CFLAGS+="-fwrapv -ffast-math -fno-trapping-math -fwhole-program "
CFLAGS+="-fno-stack-protector -fno-PIE -no-pie -fno-strict-aliasing -ffunction-sections -fdata-sections "
CFLAGS+="-U_FORTIFY_SOURCE "
CFLAGS+="-Wall -Wextra "
CFLAGS+="-Wno-unused-parameter -Wno-sign-compare -Wno-trigraphs -Wno-maybe-uninitialized "
CFLAGS+="-Wno-unused-variable -Wno-unused-const-variable -Wno-unused-function "

LDFLAGS="-Wl,--gc-sections "

# Base include paths
INCLUDE_PATHS="-I../include -I../base -I../.."

# Linux-specific includes and libraries
LINUX_INCLUDE="-I/usr/include/pipewire-0.3 -I/usr/include/spa-0.2"
LINUX_LIBS="-lpipewire-0.3 -lXi -lX11 -lGL -lm -ldl -pthread"

# Windows-specific includes and libraries
WINDOWS_INCLUDE=""
WINDOWS_LIBS="-lwinmm -lksuser -lole32 -lmmdevapi -lavrt -lgdi32 -lopengl32 -luuid"

# Determine build type
BUILD_TYPE=$1
if [ -z "$BUILD_TYPE" ]; then
	BUILD_TYPE="normal"
fi

case "$BUILD_TYPE" in
	"normal")
		CFLAGS+=" -g -O2 -DDEBUG_INTERNAL"
		;;
	"debug")
		CFLAGS+=" -g -O0"
		LDFLAGS+=" -fno-pie -no-pie"
		;;
	"release")
		CFLAGS+=" -s -O2"
		;;
	*)
		echo "Unknown build type: $BUILD_TYPE"
		exit 1
		;;
esac

# Make sure shaders are up to date
shader2h 330 vertex_shader vertex_shader.glsl data/vertex_shader.h
shader2h 330 fragment_shader shader.h fragment_shader.glsl data/fragment_shader.h

# Stop on first error
set -e

# Common compile commands
gcc_cmd="gcc $CFLAGS ${PROJECT_NAME}.c -o ${PROJECT_NAME} $INCLUDE_PATHS $LDFLAGS"
mingw_cmd="x86_64-w64-mingw32-gcc $CFLAGS ${PROJECT_NAME}.c -o ${PROJECT_NAME}.exe -mwindows $INCLUDE_PATHS $LDFLAGS"

# Run Linux and Windows builds in parallel
(
	ctime -begin .${PROJECT_NAME}_linux
	$gcc_cmd $LINUX_INCLUDE $LINUX_LIBS
	ctime -end .${PROJECT_NAME}_linux $?
) &

(
	ctime -begin .${PROJECT_NAME}_windows
	$mingw_cmd $WINDOWS_INCLUDE $WINDOWS_LIBS
	ctime -end .${PROJECT_NAME}_windows $?
) &
wait