basic_dir := ${basicPath}
basic_inc := \
    $(basic_dir)include \
    $(basic_dir)include/OmniStream \
    $(basic_dir)include/OmniStream/core \
    $(basic_dir)include/OmniStream/core/include \
    $(basic_dir)include/OmniStream/runtime \
    $(basic_dir)include/OmniStream/streaming \
    $(basic_dir)include/OmniStream/table \
    $(basic_dir)include/OmniStream/include \
    $(basic_dir)include/OmniOperatorJIT \
    $(basic_dir)include/OmniOperatorJIT/core \
    $(basic_dir)include/OmniOperatorJIT/core/src \
    $(basic_dir)include/ksl/include \
    $(basic_dir)include/huawei_secure_c/include

CXX := g++
CXXFLAGS := -O3 -std=c++17 -fPIC $(addprefix -I, $(basic_inc)) -D__GLIBCXX_TYPE_INT_N_0=__int128 -D__GLIBCXX_BITSIZE_INT_N_0=128
LDFLAGS := -L$(basic_dir)/lib -ltnel

SRC_DIR := $(CURDIR)
OUTPUT_DIR := $(SRC_DIR)/../../output/${sha256}

export SRC_DIR OUTPUT_DIR CXX CXXFLAGS LDFLAGS

SUBDIRS := $(shell find . -mindepth 2 -name Makefile -exec dirname {} \; | sort | uniq)

.PHONY: all clean

all:
	@for dir in $(SUBDIRS); do \
		echo "Building in $$dir"; \
		$(MAKE) -C $$dir || exit 1; \
	done

clean:
	@for dir in $(SUBDIRS); do \
		echo "Cleaning $$dir"; \
		$(MAKE) -C $$dir clean || exit 1; \
	done
