TOP_DIR = ../


## includes

include $(TOP_DIR)/config.mk


## target

TARGET = libaqua.so


## objects

OBJ = aqua_fft.o aqua_rng.o aqua_rng_ugaussian.o aqua_surface.o \
      aqua_surface_phillips.o aqua_surface_phill_ugauss.o \
      aqua_surface_ugaussian.o aqua_wave.o aqua_wave_phillips.o \
      aqua_waves_set.o field.o vector.o


## CFLAGS

CFLAGS += -fpic


## LDFLAGS

LDFLAGS += $(FFTW_LDFLAGS) $(GSL_LDFLAGS) -lm


## main rules


all: $(TARGET)


$(TARGET): $(OBJ)
	$(CXX) $(LDFLAGS) -shared -fpic -o $(TARGET) $(OBJ)


## objects rules

aqua_fft.o: aqua_fft.cpp aqua_fft.h config.h
aqua_rng.o: aqua_rng.cpp aqua_rng.h config.h
aqua_rng_ugaussian.o: aqua_rng_ugaussian.cpp aqua_rng_ugaussian.h \
  aqua_rng.h config.h
aqua_surface.o: aqua_surface.cpp aqua_surface.h aqua_fft.h config.h \
  aqua_rng.h aqua_waves_set.h field.h ../include/constant.h
aqua_surface_phill_ugauss.o: aqua_surface_phill_ugauss.cpp \
  aqua_surface_phill_ugauss.h aqua_surface_phillips.h aqua_surface.h \
  aqua_rng_ugaussian.h aqua_rng.h config.h
aqua_surface_phillips.o: aqua_surface_phillips.cpp \
  aqua_surface_phillips.h aqua_surface.h aqua_rng.h config.h \
  aqua_rng_ugaussian.h aqua_wave_phillips.h aqua_wave.h aqua_waves_set.h
aqua_surface_ugaussian.o: aqua_surface_ugaussian.cpp \
  aqua_surface_ugaussian.h aqua_surface.h aqua_rng_ugaussian.h aqua_rng.h \
  config.h aqua_wave.h
aqua_wave.o: aqua_wave.cpp aqua_wave.h vector.h ../include/constant.h
aqua_wave_phillips.o: aqua_wave_phillips.cpp aqua_wave_phillips.h \
  aqua_wave.h vector.h ../include/constant.h
aqua_waves_set.o: aqua_waves_set.cpp aqua_waves_set.h aqua_rng.h config.h \
  aqua_wave.h
field.o: field.cpp field.h aqua_fft.h config.h vector.h \
  ../include/memory.h
vector.o: vector.cpp vector.h


## other rules

clean:
	$(RM) $(OBJ) $(TARGET)


.PHONY: all clean
