CC ?= cc CFLAGS ?= -std=c11 -march=native -O2 -pipe -Wall -Wextra -Wpedantic OPENMP_FLAGS ?= -fopenmp LDLIBS ?= -lm ENABLE_PNG ?= 1 SPACETIME ?= minkowski ifeq ($(ENABLE_PNG),1) CPPFLAGS += -DENABLE_PNG LDLIBS += -lpng IMAGE_EXT := png else IMAGE_EXT := ppm endif COMMON_SOURCES := $(filter-out src/main.c src/spacetime_minkowski.c src/spacetime_schwarzschild.c,$(wildcard src/*.c)) PROVIDER_SOURCE := src/spacetime_$(SPACETIME).c TARGET := build/$(SPACETIME)_sky CORE_MINKOWSKI_SOURCES := $(COMMON_SOURCES) src/spacetime_minkowski.c TEST_TARGET := build/test_geodesic FRAME_TEST_TARGET := build/test_frame SCHWARZSCHILD_TEST_TARGET := build/test_schwarzschild OBSERVER_TRACK_TEST_TARGET := build/test_observer_track CATALOG_PREFETCH_TEST_TARGET := build/test_catalog_prefetch PSF_HDR_TEST_TARGET := build/minkowski_psf_hdr_test .PHONY: all clean run test minkowski schwarzschild psf-hdr-test ifeq ($(SPACETIME),minkowski) BACKEND_CPPFLAGS := -DSPACETIME_MINKOWSKI else ifeq ($(SPACETIME),schwarzschild) BACKEND_CPPFLAGS := -DSPACETIME_SCHWARZSCHILD else $(error Unknown SPACETIME '$(SPACETIME)'; choose minkowski or schwarzschild) endif all: $(TARGET) $(TARGET): $(COMMON_SOURCES) $(PROVIDER_SOURCE) src/main.c | build $(CC) $(CPPFLAGS) $(BACKEND_CPPFLAGS) $(CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@ build: mkdir -p $@ run: $(TARGET) mkdir -p output/imgs ./$(TARGET) --catalog assets/sky_grid_5deg.csv --output output/imgs/$(SPACETIME)_sky.$(IMAGE_EXT) minkowski: $(MAKE) SPACETIME=minkowski all schwarzschild: $(MAKE) SPACETIME=schwarzschild all # Deliberately separate from the production binary: enables --hdr-output PFM. $(PSF_HDR_TEST_TARGET): $(COMMON_SOURCES) src/spacetime_minkowski.c src/main.c | build $(CC) $(CPPFLAGS) -DENABLE_HDR_DEBUG -DSPACETIME_MINKOWSKI $(CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@ psf-hdr-test: $(PSF_HDR_TEST_TARGET) $(TEST_TARGET): tests/test_geodesic.c $(CORE_MINKOWSKI_SOURCES) | build $(CC) $(CPPFLAGS) $(CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@ $(FRAME_TEST_TARGET): tests/test_frame.c $(CORE_MINKOWSKI_SOURCES) | build $(CC) $(CPPFLAGS) $(CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@ $(SCHWARZSCHILD_TEST_TARGET): tests/test_schwarzschild.c $(COMMON_SOURCES) src/spacetime_schwarzschild.c | build $(CC) $(CPPFLAGS) $(CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@ $(OBSERVER_TRACK_TEST_TARGET): tests/test_observer_track.c $(COMMON_SOURCES) | build $(CC) $(CPPFLAGS) $(CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@ $(CATALOG_PREFETCH_TEST_TARGET): tests/test_catalog_prefetch.c $(CORE_MINKOWSKI_SOURCES) | build $(CC) $(CPPFLAGS) $(CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@ test: $(TEST_TARGET) $(FRAME_TEST_TARGET) $(SCHWARZSCHILD_TEST_TARGET) $(OBSERVER_TRACK_TEST_TARGET) $(CATALOG_PREFETCH_TEST_TARGET) ./$(TEST_TARGET) ./$(FRAME_TEST_TARGET) ./$(SCHWARZSCHILD_TEST_TARGET) ./$(OBSERVER_TRACK_TEST_TARGET) ./$(CATALOG_PREFETCH_TEST_TARGET) clean: rm -rf build