98 lines
2.6 KiB
Makefile
98 lines
2.6 KiB
Makefile
# Normal directories
|
|
SRC_DIR := src
|
|
BIN_DIR := bin
|
|
DBG_DIR := bin/debug
|
|
|
|
# Grader directories
|
|
GRADER := $(wildcard $(SRC_DIR)/grader.cpp)
|
|
GRADER_DIR := $(SRC_DIR)/grader
|
|
HANDLER_DIR := $(SRC_DIR)/handler
|
|
|
|
GRADER_SRC := $(wildcard $(GRADER_DIR)/*.cpp)
|
|
GRADER_BIN := $(patsubst $(GRADER_DIR)/%.cpp, $(BIN_DIR)/%, $(GRADER_SRC))
|
|
GRADER_DBG := $(patsubst $(GRADER_DIR)/%.cpp, $(DBG_DIR)/%, $(GRADER_SRC))
|
|
|
|
# Change CPP source directories if grader is defined
|
|
ifdef GRADER
|
|
SRC := $(wildcard $(HANDLER_DIR)/*.cpp)
|
|
BIN := $(patsubst $(HANDLER_DIR)/%.cpp, $(BIN_DIR)/%, $(SRC))
|
|
DBG := $(patsubst $(HANDLER_DIR)/%.cpp, $(DBG_DIR)/%, $(SRC))
|
|
else
|
|
SRC := $(wildcard $(SRC_DIR)/*.cpp)
|
|
BIN := $(patsubst $(SRC_DIR)/%.cpp, $(BIN_DIR)/%, $(SRC))
|
|
DBG := $(patsubst $(SRC_DIR)/%.cpp, $(DBG_DIR)/%, $(SRC))
|
|
endif
|
|
|
|
SRC_C := $(wildcard $(SRC_DIR)/*.c)
|
|
BIN_C := $(patsubst $(SRC_DIR)/%.c, $(BIN_DIR)/%, $(SRC_C))
|
|
DBG_C := $(patsubst $(SRC_DIR)/%.c, $(DBG_DIR)/%, $(SRC_C))
|
|
|
|
SRC_JAVA := $(wildcard $(SRC_DIR)/*.java)
|
|
BIN_JAVA := $(patsubst $(SRC_DIR)/%.java, $(BIN_DIR)/%.class, $(SRC_JAVA))
|
|
DBG_JAVA := $(patsubst $(SRC_DIR)/%.java, $(DBG_DIR)/%.class, $(SRC_JAVA))
|
|
|
|
CHECKER := $(wildcard $(SRC_DIR)/checker.cpp)
|
|
|
|
C := gcc
|
|
CPP := g++
|
|
CXX_FLAGS := -Wall -O2
|
|
DEBUG_FLAGS := -Wall -g
|
|
BOCA_FLAGS := -static -DBOCA_SUPPORT
|
|
|
|
JV = javac
|
|
JV_DEBUG = -g
|
|
JV_DIR = -d bin
|
|
JV_DBG_DIR = -d bin/debug
|
|
|
|
.PHONY: all debug release checker clean
|
|
|
|
all: debug release checker
|
|
|
|
debug: $(DBG) $(DBG_C) $(DBG_JAVA) $(GRADER_DBG)
|
|
|
|
release: $(BIN) $(BIN_C) $(BIN_JAVA) $(GRADER_BIN)
|
|
|
|
ifdef CHECKER
|
|
checker: $(DBG_DIR)/checker-boca $(BIN_DIR)/checker-boca
|
|
endif
|
|
|
|
$(BIN): $(BIN_DIR)/% : $(SRC_DIR)/%.cpp | $(BIN_DIR)
|
|
$(CPP) $(CXX_FLAGS) $^ -o $@
|
|
|
|
$(DBG): $(DBG_DIR)/% : $(SRC_DIR)/%.cpp | $(DBG_DIR)
|
|
$(CPP) $(DEBUG_FLAGS) $^ -o $@
|
|
|
|
$(BIN_C): $(BIN_DIR)/% : $(SRC_DIR)/%.c | $(BIN_DIR)
|
|
$(C) $(CXX_FLAGS) $^ -o $@
|
|
|
|
$(DBG_C): $(DBG_DIR)/% : $(SRC_DIR)/%.c | $(DBG_DIR)
|
|
$(C) $(DEBUG_FLAGS) $^ -o $@
|
|
|
|
$(BIN_JAVA): $(BIN_DIR)/%.class : $(SRC_DIR)/%.java | $(BIN_DIR)
|
|
$(JV) $(JV_DIR) $^
|
|
|
|
$(DBG_JAVA): $(DBG_DIR)/%.class : $(SRC_DIR)/%.java | $(DBG_DIR)
|
|
$(JV) $(JV_DEBUG) $(JV_DBG_DIR) $^
|
|
|
|
$(GRADER_BIN): $(BIN_DIR)/% : $(GRADER_DIR)/%.cpp $(GRADER) $(GRADER_DIR)/*.h
|
|
$(CPP) $(CXX_FLAGS) $^ -o $@
|
|
|
|
$(GRADER_DBG): $(DBG_DIR)/% : $(GRADER_DIR)/%.cpp $(GRADER) $(GRADER_DIR)/*.h
|
|
$(CPP) $(DEBUG_FLAGS) $^ -o $@
|
|
|
|
$(BIN_DIR):
|
|
mkdir -p $@
|
|
|
|
$(DBG_DIR):
|
|
mkdir -p $@
|
|
|
|
$(BIN_DIR)/checker-boca: $(SRC_DIR)/checker.cpp
|
|
$(CPP) $(CXX_FLAGS) $(BOCA_FLAGS) $^ -o $@
|
|
|
|
$(DBG_DIR)/checker-boca: $(SRC_DIR)/checker.cpp
|
|
$(CPP) $(DEBUG_FLAGS) $(BOCA_FLAGS) $^ -o $@
|
|
|
|
clean:
|
|
@echo Cleaning problem files
|
|
rm -rf bin
|