CXX := g++
CXXFLAGS := -fPIC -Wall -Wextra -O3
LDFLAGS := -static-libgcc -static-libstdc++
BUILD := build

# Create build dir if not exists
$(shell mkdir -p $(BUILD))

# Targets
all: $(BUILD)/main

# Shared libs
$(BUILD)/libb.so: $(BUILD)/libb.o
	$(CXX) -shared $(LDFLAGS) -o $@ $^

$(BUILD)/liba.so: $(BUILD)/liba.o $(BUILD)/libb.so
	$(CXX) -shared $(LDFLAGS) -o $@ $(BUILD)/liba.o -L$(BUILD) -lb -Wl,-rpath=build,-rpath-link=$(BUILD)

# Objects
$(BUILD)/libb.o: libb.cpp libb.h
	$(CXX) $(CXXFLAGS) -c libb.cpp -o $@

$(BUILD)/liba.o: liba.cpp liba.h libb.h
	$(CXX) $(CXXFLAGS) -c liba.cpp -o $@

$(BUILD)/main.o: main.cpp liba.h
	$(CXX) $(CXXFLAGS) -c main.cpp -o $@

# Final binary
$(BUILD)/main: $(BUILD)/main.o $(BUILD)/liba.so $(BUILD)/libb.so
	$(CXX) $(LDFLAGS) $(BUILD)/main.o -L$(BUILD) -la -lb -Wl,-rpath,build -o $@

# Clean
clean:
	rm -rf $(BUILD)/*

