1
0
Fork 0
forked from fte/fteqw
fteqw/engine/qclib/Makefile
Shpoike dc010d6ec8 fteqw: add memrealloc builtin.
fteqw: make it a bit clearer when there's no tls drivers compiled/loaded.
fteqcc: fix decompiler code to not crash nor misbehave on 64bit cpus.
fteqcc: add -TDP_20241108 to target dp's most recent additions.
fteqcc: add -Fundefwordsize (autoenabled when targetting dp) to tell the compiler to not make any assumptions about runtime pointer types. this skips some optimisations, blocks sizeof(float), casts between pointer and string,  and a few other sizing things, unsafe operations will become errors.
fteqcc: add -FILP32 - changes 'long' datatype to int32_t, which should match common C assumptions around long/size_t/intptr_t
fteqcc: add -Fpointerrelocs (autoenabled with a recent enough fte target). this finally allows pointer globals to be preinitialised with the addresses of other globals.
fteqcc: add -Fomitinternals. this omits the reflection data in the progs roughly equivelent to visibility=hidden om linux. This WILL break saved games, and probably a few other things too, but will greatly reduce stringtable sizes.
fteqcc: improve compat when compiling C code
qclib: fix op_push
2024-12-28 16:24:00 +00:00

113 lines
3 KiB
Makefile

COMMON_OBJS=comprout.o hash.o qcc_cmdlib.o qcd_main.o
QCC_OBJS=qccmain.o qcc_pr_comp.o qcc_pr_lex.o packager.o decomp.o
VM_OBJS=pr_exec.o pr_edict.o pr_multi.o initlib.o qcdecomp.o
GTKGUI_OBJS=qcc_gtk.o qccguistuff.o
WIN32GUI_OBJS=qccgui.o qccguistuff.o packager.o
TUI_OBJS=qcctui.o
LIB_OBJS=
CC?=gcc
CFLAGS?=-Wall
all: help qcc
help:
@echo for fteqccgui: win or nocyg
@echo for commandline: qcc
@echo for debug builds, add: DEBUG=1
@echo
USEGUI_CFLAGS=
# set to -DUSEGUI when compiling the GUI
WARNING_CFLAGS=-Wno-pointer-sign
BASE_CFLAGS+=$(WARNING_CFLAGS)
BASE_CFLAGS+=$(USEGUI_CFLAGS)
ifneq ($(DEBUG),)
BASE_CFLAGS+=-ggdb
else
BASE_LDFLAGS+=-s
endif
BASE_LDFLAGS+=-lz
# set to "" for debugging
DO_CC?=$(CC) $(BASE_CFLAGS) -o $@ -c $< $(CFLAGS)
lib:
R_win_nocyg: $(QCC_OBJS) $(COMMON_OBJS) $(WIN32GUI_OBJS)
$(CC) $(BASE_CFLAGS) -o fteqcc.exe -O3 $(BASE_LDFLAGS) $(QCC_OBJS) $(COMMON_OBJS) $(WIN32GUI_OBJS) -mno-cygwin -mwindows -lcomctl32 -lole32 -lshlwapi
R_nocyg: $(QCC_OBJS) $(COMMON_OBJS) $(WIN32GUI_OBJS)
$(CC) $(BASE_CFLAGS) -o fteqcc.exe -O3 $(BASE_LDFLAGS) $(QCC_OBJS) $(COMMON_OBJS) $(WIN32GUI_OBJS) -mno-cygwin -lcomctl32 -lole32 -lshlwapi
R_win: $(QCC_OBJS) $(COMMON_OBJS) $(WIN32GUI_OBJS)
$(CC) $(BASE_CFLAGS) -o fteqcc.exe -O3 $(BASE_LDFLAGS) $(QCC_OBJS) $(COMMON_OBJS) $(WIN32GUI_OBJS) -mwindows -lcomctl32 -lole32 -lshlwapi
win_nocyg:
$(MAKE) USEGUI_CFLAGS="-DUSEGUI -DQCCONLY" R_win_nocyg
nocyg:
$(MAKE) USEGUI_CFLAGS="-DUSEGUI -DQCCONLY" R_nocyg
win:
$(MAKE) USEGUI_CFLAGS="-DUSEGUI -DQCCONLY" R_win
R_qcc: $(QCC_OBJS) $(COMMON_OBJS) $(TUI_OBJS)
$(CC) $(BASE_CFLAGS) -o fteqcc.bin -O3 $(QCC_OBJS) $(TUI_OBJS) $(COMMON_OBJS) $(BASE_LDFLAGS) -lm
qcc:
$(MAKE) USEGUI_CFLAGS="" R_qcc
qccmain.o: qccmain.c qcc.h
$(DO_CC)
qcc_cmdlib.o: qcc_cmdlib.c qcc.h
$(DO_CC)
qcc_pr_comp.o: qcc_pr_comp.c qcc.h
$(DO_CC)
qcc_pr_lex.o: qcc_pr_lex.c qcc.h
$(DO_CC)
comprout.o: comprout.c qcc.h
$(DO_CC)
hash.o: hash.c qcc.h
$(DO_CC)
qcd_main.o: qcd_main.c qcc.h
$(DO_CC)
qccguistuff.o: qccguistuff.c qcc.h
$(DO_CC)
packager.o: packager.c qcc.h
$(DO_CC)
%.o: %.c
$(DO_CC)
qcc_gtk.o: qcc_gtk.c qcc.h
$(DO_CC) `pkg-config --cflags gtk+-2.0`
R_gtkgui: $(QCC_OBJS) $(COMMON_OBJS) $(GTKGUI_OBJS)
$(CC) $(BASE_CFLAGS) $(USEGUI_CFLAGS) -o fteqccgui.bin -O3 $(GTKGUI_OBJS) $(QCC_OBJS) $(COMMON_OBJS) `pkg-config --libs gtk+-2.0`
gtkgui:
$(MAKE) USEGUI_CFLAGS="-DUSEGUI -DQCCONLY" R_gtkgui
clean:
$(RM) fteqcc.bin fteqcc.exe $(QCC_OBJS) $(COMMON_OBJS) $(VM_OBJS) $(GTKGUI_OBJS) $(WIN32GUI_OBJS) $(TUI_OBJS)
qcvm.so: $(QCC_OBJS) $(VM_OBJS) $(COMMON_OBJS)
$(CC) $(BASE_CFLAGS) -o $@ -O3 $(BASE_LDFLAGS) $(QCC_OBJS) $(VM_OBJS) $(COMMON_OBJS) -shared
qcvm.a: $(QCC_OBJS) $(VM_OBJS) $(COMMON_OBJS)
ar r $@ $^
test.o: test.c
$(DO_CC)
qcvm: test.o qcvm.a
$(CC) $(BASE_CFLAGS) $(CFLAGS) -o qcvm -O3 $(BASE_LDFLAGS) $^ -lm -lz -ggdb
tests: qcvm
@echo Running Tests...
@$(foreach a,$(wildcard tests/*.src), echo TEST: $a; rm progs.dat; ./testapp.bin progs.dat -srcfile $a; echo; echo)
@echo Tests run.
.PHONY: tests