56 lines
1.8 KiB
Makefile
56 lines
1.8 KiB
Makefile
BIN := ./$(notdir $(lastword $(abspath .)))
|
|
|
|
EXT_H := h
|
|
EXT_HPP := h hh hpp hxx h++
|
|
EXT_C := c
|
|
EXT_CXX := C cc cpp cxx c++
|
|
|
|
INCLUDE_DIRS := ../include .
|
|
SOURCE_DIRS := .
|
|
|
|
WILD_EXT = $(strip $(foreach EXT,$($(1)),$(wildcard $(2)/*.$(EXT))))
|
|
|
|
HDRS_C := $(foreach INCLUDE_DIR,$(INCLUDE_DIRS),$(call WILD_EXT,EXT_H,$(INCLUDE_DIR)))
|
|
HDRS_CXX := $(foreach INCLUDE_DIR,$(INCLUDE_DIRS),$(call WILD_EXT,EXT_HPP,$(INCLUDE_DIR)))
|
|
SRCS_C := $(foreach SOURCE_DIR,$(SOURCE_DIRS),$(call WILD_EXT,EXT_C,$(SOURCE_DIR)))
|
|
SRCS_CXX := $(foreach SOURCE_DIR,$(SOURCE_DIRS),$(call WILD_EXT,EXT_CXX,$(SOURCE_DIR)))
|
|
OBJS := $(SRCS_C:%=%.o) $(SRCS_CXX:%=%.o)
|
|
|
|
CC := $(CC)
|
|
CCFLAGS := -Wall -Wextra -Wfatal-errors -O2 -std=c11 $(foreach INCLUDE_DIR,$(INCLUDE_DIRS),-I$(INCLUDE_DIR))
|
|
CXX := $(CXX)
|
|
CXXFLAGS := -Wall -Wextra -Wfatal-errors -O2 -std=c++17 $(foreach INCLUDE_DIR,$(INCLUDE_DIRS),-I$(INCLUDE_DIR))
|
|
LD := $(if $(SRCS_CXX),$(CXX),$(CC))
|
|
LDFLAGS :=
|
|
LDLIBS := -ldl -lpthread
|
|
|
|
LIB_DIRS := $(filter-out ../include/ ../grading/ ../playground/ ../template/ ../sync-examples/,$(filter-out $(wildcard ../*),$(wildcard ../*/)))
|
|
LIB_SOS := $(patsubst %/,%.so,$(filter-out ../reference/,$(LIB_DIRS)))
|
|
|
|
.PHONY: build build-libs clean clean-libs run
|
|
|
|
build: $(BIN)
|
|
build-libs:
|
|
@$(foreach DIR,$(LIB_DIRS),make -C $(DIR) build; )
|
|
clean:
|
|
$(RM) $(OBJS) $(BIN)
|
|
clean-libs:
|
|
@$(foreach DIR,$(LIB_DIRS),make -C $(DIR) clean; )
|
|
run: $(BIN)
|
|
$(BIN) 453 ../reference.so $(LIB_SOS)
|
|
|
|
define BUILD_C
|
|
%.$(1).o: %.$(1) $$(HDRS_C) Makefile
|
|
$$(CC) $$(CCFLAGS) -c -o $$@ $$<
|
|
endef
|
|
$(foreach EXT,$(EXT_C),$(eval $(call BUILD_C,$(EXT))))
|
|
|
|
define BUILD_CXX
|
|
%.$(1).o: %.$(1) $$(HDRS_CXX) Makefile
|
|
$$(CXX) $$(CXXFLAGS) -c -o $$@ $$<
|
|
endef
|
|
$(foreach EXT,$(EXT_CXX),$(eval $(call BUILD_CXX,$(EXT))))
|
|
|
|
$(BIN): $(OBJS) Makefile
|
|
$(LD) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)
|