.DEFAULT_GOAL = build/main.out CXX = clang++ CXXFLAGS += -std=c++26 -Wno-experimental-header-units -Wno-unused-command-line-argument LDFLAGS += -std=c++26 SYSTEMHEADER_FLAGS = -Wno-deprecated-builtins -Wno-pragma-system-header-outside-header -Wno-keyword-compat module_pair = $(if $(findstring user,$1),$(patsubst build/user/%.pcm,%=,$1))$1 build_module_path = $(if $1,$(let first rest,$1,$(if $(rest),-fmodule-file=$(call module_pair,$(first)) $(call build_module_path,$(rest)),-fmodule-file=$(call module_pair,$(first))))) object_build = $(filter-out %.pcm,$^) $(call build_module_path,$(filter %.pcm,$^)) autodir = @mkdir -p $(@D) build/main.out: build/main.o build/builder.o $(call autodir) $(CXX) $(LDFLAGS) $^ -o $@ build/main.o:: main.cxx build/system/print.pcm build/user/builder.pcm build/builder.o:: builder.cxxm build/system/type_traits.pcm build/user/builder.pcm:: build/system/type_traits.pcm build/%.o:: $(call autodir) $(CXX) $(CXXFLAGS) -c $(call object_build) @mv $(patsubst build/%,%,$@) $@ build/user/%.pcm:: %.cxxm $(call autodir) $(CXX) $(CXXFLAGS) --precompile -o $@ $(call object_build) build/system/%.pcm: $(call autodir) $(CXX) $(CXXFLAGS) -xc++-system-header --precompile $(patsubst build/system/%.pcm,%,$@) -o $@ $(SYSTEMHEADER_FLAGS) .PHONY: clean run bear clean: @-rm -rf ./build bear: clean bear --append -- $(MAKE) run: $(.DEFAULT_GOAL) @./$(.DEFAULT_GOAL)