Skip to content

Instantly share code, notes, and snippets.

@khlorghaal
Created January 10, 2025 00:43
Show Gist options
  • Save khlorghaal/4e1d05d379c8d9fbbe238dcbe90fd262 to your computer and use it in GitHub Desktop.
Save khlorghaal/4e1d05d379c8d9fbbe238dcbe90fd262 to your computer and use it in GitHub Desktop.
.DEFAULT_GOAL:= ide
PLATFORM= x11
CC= clang -std=c20 $(flags)
CX= clang++ -std=c++23 $(flags)
flags:= \
-Wno-parentheses -Wno-deprecated-declarations -Wno-microsoft-template -Wno-ambiguous-reversed-operator -Wno-string-compare \
-Werror=return-stack-address -Werror=uninitialized\
-I"deps/gl3w" -I"deps/glfw/include/GLFW"\
-ferror-limit=1
#-fcaret-diagnostics-max-lines=4 -ftemplate-backtrace-limit=2\
flags_dbg:= -O0 -ggdb3 -fsanitize=address
flags_rls:= -O3 -gmlt
linkage:= -fuse-ld=lld -lGL
.PRECIOUS: %.a
ar= llvm-ar -rc $@ $^
cco= $(CC) -c $< -o $@#objects
ccs= $(CC) -S $< -o $@#assemblies
cxo= $(CX) -c $< -o $@
cxs= $(CX) -S $< -o $@
glfw_args:= -I"deps/glfw/deps" -D_POSIX_C_SOURCE=200809L
glfw_files:= init context platform null_init null_window null_monitor null_joystick input monitor window glx_context vulkan
ifeq ($(PLATFORM),x11)
glfw_args+= -D_GLFW_X11
glfw_files+= osmesa_context glx_context egl_context x11_init x11_monitor x11_window xkb_unicode linux_joystick posix_module posix_time posix_poll posix_thread
endif
ifeq ($(PLATFORM),win32)
glfw_args+= -D_GLFW_WIN32
glfw_files+= wgl_context glx_context win32_init win32_joystick win32_monitor win32_time win32_tls win32_window
endif
glfw_srcs:= $(glfw_files:%=deps/glfw/src/%.c)
glfw_objs:= $(glfw_files:%=build/dbg/%.o)
glfw_asms:= $(glfw_files:%=build/rel/%.s)
build/dbg/%.o: deps/glfw/src/%.c
$(cco) $(glfw_args)
build/dbg/%.s: deps/glfw/src/%.c
$(ccs) $(glfw_args)
build/dbg/gl3w.o: deps/gl3w/gl3w.c
$(cco)
build/rel/gl3w.s: deps/gl3w/gl3w.c
$(ccs)
doots_objs:= \
build/dbg/doot_wrap_std.o \
build/dbg/doot_wrap_os.o
doots_asms:= \
build/rls/doot_wrap_std.s \
build/rls/doot_wrap_os.s
build/dbg/doot_wrap_std.o: src/doot/wrap_std.cpp
$(cxo)
build/dbg/doot_wrap_os.o: src/doot/wrap_os.cpp
$(cxo)
build/rls/doot_wrap_std.s: src/doot/wrap_std.cpp
$(cxs)
build/rls/doot_wrap_os.s: src/doot/wrap_os.cpp
$(cxs)
build/dbg/doot.o: src/doot/doot.cpp src/doot/*
$(cxo)
build/rel/doot.s: src/doot/doot.cpp src/doot/*
$(cxs)
build/dbg/deps_cln.a: $(doots_objs) $(glfw_objs) build/dbg/gl3w.o
$(ar)
build/rel/deps_cln.a: $(doots_asms) $(glfw_asms) build/rel/gl3w.s
$(ar)
build/dbg/deps_srv.a: $(doots_objs);
$(ar)
build/rel/deps_srv.a: $(doots_asms);#reserved
$(ar)
tst: flags+=$(flags_dbg)
tst: build/dbg/doot.o build/dbg/deps_cln.a build/dbg/deps_srv.a
$(CX) $(linkage) -DTEST -DSERVER -DCLIENT $^ src/test.cpp -o build/dbg/test
san: tst
./build/dbg/test
ide: tst
gdb ./build/dbg/test -ex run -x gdb.cfg
dbg: flags+=$(flags_dbg)
dbg: build/dbg/doot.o build/dbg/deps_cln.a build/dbg/deps_srv.a
$(CX) $(linkage) -DSERVER $< build/dbg/deps_srv.a src/server/server.cpp -o build/dbg/server
$(CX) $(linkage) -DCLIENT $< build/dbg/deps_cln.a src/client/client.cpp -o build/dbg/client
rls: flags+=$(flags_rls)
rls: build/rls/doot.s build/rls/deps_cln.a build/rls/deps_srv.a
$(CX) $(linkage) -DSERVER $< build/rel/deps_srv.a src/server/server.cpp -o build/rel/server
$(CX) $(linkage) -DCLIENT $< build/rel/deps_cln.a src/client/client.cpp -o build/rel/client
cp -r glsl build/rel/glsl
cp -r image build/rel/image
cp -r audio build/rel/audio
re: clean
headerlol:
echo "#include <math.h>" | clang++ -e - | clip
deploy:
rm build/rel/(*.a,*.s,*.o)
clean:
rm -rdf build/dbg/*
rm -rdf build/rel/*
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment