Use scaled long-double quadratic arithmetic without explicit FMA. Validate entry candidates against backend geometry and localize uncertain entries along the original exterior trajectory. Preserve conservative miss semantics and propagate concrete entry failures. Add production-sample and numerical regression coverage.
349 lines
17 KiB
Makefile
349 lines
17 KiB
Makefile
CC ?= cc
|
|
CFLAGS ?= -std=c11 -march=native -pipe -Wall -Wextra -Wpedantic
|
|
OPENMP_FLAGS ?= -fopenmp
|
|
LDLIBS ?= -lm
|
|
ENABLE_PNG ?= 1
|
|
SPACETIME ?= minkowski
|
|
BUILD_TYPE ?= Release
|
|
ENABLE_HDR ?= 0
|
|
PSF_EVENT_SINK ?= 1
|
|
PSF_BACKEND ?= cpu
|
|
HIPCC ?= hipcc
|
|
HIP_CXXFLAGS ?= -std=c++17 -O2 -Wall -Wextra -Wpedantic
|
|
|
|
ifeq ($(BUILD_TYPE),Release)
|
|
BUILD_CFLAGS := -O2 -DNDEBUG
|
|
BUILD_CPPFLAGS :=
|
|
else ifeq ($(BUILD_TYPE),Debug)
|
|
BUILD_CFLAGS := -O0 -g3
|
|
BUILD_CPPFLAGS := -DGR_DEBUG
|
|
else
|
|
$(error Unknown BUILD_TYPE '$(BUILD_TYPE)'; choose Release or Debug)
|
|
endif
|
|
|
|
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/dummy_psf.c src/fast_psf_fftw.c src/spacetime_minkowski.c src/spacetime_schwarzschild.c src/spacetime_alcubierre.c,$(wildcard src/*.c))
|
|
PROVIDER_SOURCE := src/spacetime_$(SPACETIME).c
|
|
BUILD_DIR := build/$(BUILD_TYPE)
|
|
TARGET_BASENAME := $(SPACETIME)_sky
|
|
OBJECT_DIR := $(BUILD_DIR)/obj/$(SPACETIME)
|
|
CORE_MINKOWSKI_SOURCES := $(COMMON_SOURCES) src/spacetime_minkowski.c
|
|
|
|
.PHONY: all backend clean run test tone-map-test sensor-bloom-test sensor-bloom-bench hip-psf-test hip-psf-bench fast-psf-fftw-bench minkowski schwarzschild alcubierre FORCE
|
|
|
|
ifneq ($(filter 0 1,$(PSF_EVENT_SINK)),$(PSF_EVENT_SINK))
|
|
$(error Unknown PSF_EVENT_SINK '$(PSF_EVENT_SINK)'; choose 0 or 1)
|
|
endif
|
|
BUILD_CPPFLAGS += -DFRAME_PSF_EVENT_SINK=$(PSF_EVENT_SINK)
|
|
|
|
ifeq ($(PSF_BACKEND),cpu)
|
|
RENDER_LINKER := $(CC)
|
|
ifeq ($(shell pkg-config --exists fftw3_omp && echo yes),yes)
|
|
CPU_FFTW_CPPFLAGS := -DFAST_PSF_FFTW $(shell pkg-config --cflags fftw3_omp)
|
|
CPU_FFTW_LDLIBS := $(shell pkg-config --libs fftw3_omp)
|
|
CPU_FFTW_SOURCES := src/fast_psf_fftw.c
|
|
BUILD_CPPFLAGS += $(CPU_FFTW_CPPFLAGS)
|
|
LDLIBS += $(CPU_FFTW_LDLIBS)
|
|
else
|
|
$(error PSF_BACKEND=cpu requires the FFTW OpenMP package 'fftw3_omp' (pkg-config --exists fftw3_omp). On Gentoo enable sci-libs/fftw[openmp].)
|
|
endif
|
|
else ifeq ($(PSF_BACKEND),hip)
|
|
RENDER_LINKER := $(HIPCC)
|
|
BUILD_CPPFLAGS += -DPSF_BACKEND_HIP
|
|
else ifeq ($(PSF_BACKEND),dummy)
|
|
RENDER_LINKER := $(CC)
|
|
BUILD_CPPFLAGS += -DPSF_BACKEND_DUMMY
|
|
else
|
|
$(error Unknown PSF_BACKEND '$(PSF_BACKEND)'; choose cpu, hip, or dummy)
|
|
endif
|
|
|
|
# `make test` builds and runs the CPU regression suite. The dummy and hip
|
|
# backends do not build those binaries, so reject the goal explicitly instead of
|
|
# silently reusing a stale test binary left by an earlier CPU build.
|
|
ifneq ($(filter test test-reference-images,$(MAKECMDGOALS)),)
|
|
ifneq ($(PSF_BACKEND),cpu)
|
|
$(error make test requires PSF_BACKEND=cpu)
|
|
endif
|
|
endif
|
|
|
|
# psf-capture is a CPU producer diagnostic; the dummy and hip backends do not
|
|
# provide the producer/frame symbols it links.
|
|
ifneq ($(filter psf-capture,$(MAKECMDGOALS)),)
|
|
ifneq ($(PSF_BACKEND),cpu)
|
|
$(error psf-capture requires PSF_BACKEND=cpu)
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(SPACETIME),minkowski)
|
|
BACKEND_CPPFLAGS := -DSPACETIME_MINKOWSKI
|
|
else ifeq ($(SPACETIME),schwarzschild)
|
|
BACKEND_CPPFLAGS := -DSPACETIME_SCHWARZSCHILD
|
|
else ifeq ($(SPACETIME),alcubierre)
|
|
BACKEND_CPPFLAGS := -DSPACETIME_ALCUBIERRE
|
|
else
|
|
$(error Unknown SPACETIME '$(SPACETIME)'; choose minkowski, schwarzschild, or alcubierre)
|
|
endif
|
|
|
|
ifeq ($(ENABLE_HDR),1)
|
|
HDR_CPPFLAGS := -DENABLE_HDR_OUTPUT $(shell pkg-config --cflags cfitsio)
|
|
HDR_LDLIBS := $(shell pkg-config --libs cfitsio)
|
|
HDR_BUILD_TAG := hdr_sink$(PSF_EVENT_SINK)_$(PSF_BACKEND)
|
|
else ifeq ($(ENABLE_HDR),0)
|
|
HDR_BUILD_TAG := standard_sink$(PSF_EVENT_SINK)_$(PSF_BACKEND)
|
|
else
|
|
$(error Unknown ENABLE_HDR '$(ENABLE_HDR)'; choose 0 or 1)
|
|
endif
|
|
|
|
# Test binaries are namespaced by spacetime and build tag so that switching
|
|
# PSF_BACKEND/ENABLE_HDR/PSF_EVENT_SINK cannot silently reuse a stale binary
|
|
# built for a different backend.
|
|
TEST_OUT_DIR := $(OBJECT_DIR)/$(HDR_BUILD_TAG)
|
|
TEST_TARGET := $(TEST_OUT_DIR)/test_geodesic
|
|
ADAPTIVE_GEODESIC_TEST_TARGET := $(TEST_OUT_DIR)/test_geodesic_adaptive
|
|
ASYMPTOTIC_TEST_TARGET := $(TEST_OUT_DIR)/test_asymptotic
|
|
ASYMPTOTIC_ENTRY_TEST_TARGET := $(TEST_OUT_DIR)/test_asymptotic_entry
|
|
ASYMPTOTIC_QUADRATIC_TEST_TARGET := $(TEST_OUT_DIR)/test_asymptotic_quadratic
|
|
ASYMPTOTIC_SCHWARZSCHILD_TEST_TARGET := $(TEST_OUT_DIR)/test_asymptotic_schwarzschild
|
|
TERMINATION_ORACLE_TEST_TARGET := $(TEST_OUT_DIR)/test_termination_oracle
|
|
FRAME_TEST_TARGET := $(TEST_OUT_DIR)/test_frame
|
|
SCHWARZSCHILD_TEST_TARGET := $(TEST_OUT_DIR)/test_schwarzschild
|
|
ALCUBIERRE_TEST_TARGET := $(TEST_OUT_DIR)/test_alcubierre
|
|
OBSERVER_TRACK_TEST_TARGET := $(TEST_OUT_DIR)/test_observer_track
|
|
CATALOG_PREFETCH_TEST_TARGET := $(TEST_OUT_DIR)/test_catalog_prefetch
|
|
HIP_PSF_TEST_TARGET := $(TEST_OUT_DIR)/test_hip_psf
|
|
HIP_PSF_BENCH_TARGET := $(TEST_OUT_DIR)/benchmark_hip_psf
|
|
CAMERA_TEST_TARGETS := $(TEST_OUT_DIR)/test_observer_minkowski $(TEST_OUT_DIR)/test_observer_schwarzschild
|
|
FAST_PSF_FFTW_TEST_TARGET := $(TEST_OUT_DIR)/test_fast_psf_fftw
|
|
FAST_PSF_FFTW_BENCH_TARGET := $(TEST_OUT_DIR)/benchmark_fast_psf_fftw
|
|
TONE_MAP_TEST_TARGET := $(TEST_OUT_DIR)/test_tone_map
|
|
MOVIE_OUTPUT_TEST_TARGET := $(TEST_OUT_DIR)/test_movie_output
|
|
SENSOR_BLOOM_TEST_TARGET := $(TEST_OUT_DIR)/test_sensor_bloom
|
|
SENSOR_BLOOM_BENCH_TARGET := $(TEST_OUT_DIR)/benchmark_sensor_bloom
|
|
|
|
ifeq ($(PSF_BACKEND),hip)
|
|
TARGET := $(BUILD_DIR)/$(TARGET_BASENAME)_hip
|
|
else ifeq ($(PSF_BACKEND),dummy)
|
|
TARGET := $(BUILD_DIR)/$(TARGET_BASENAME)_dummy
|
|
else
|
|
TARGET := $(BUILD_DIR)/$(TARGET_BASENAME)
|
|
endif
|
|
RENDER_SOURCES := $(COMMON_SOURCES) $(PROVIDER_SOURCE) src/main.c
|
|
RENDER_SOURCES += $(CPU_FFTW_SOURCES)
|
|
ifeq ($(PSF_BACKEND),dummy)
|
|
RENDER_SOURCES += src/dummy_psf.c
|
|
endif
|
|
RENDER_OBJECTS := $(patsubst %.c,$(OBJECT_DIR)/$(HDR_BUILD_TAG)/%.o,$(RENDER_SOURCES))
|
|
ifeq ($(PSF_BACKEND),hip)
|
|
HIP_PSF_OBJECT := $(OBJECT_DIR)/$(HDR_BUILD_TAG)/src/hip_psf.o
|
|
RENDER_OBJECTS += $(HIP_PSF_OBJECT)
|
|
endif
|
|
RENDER_DEPS := $(RENDER_OBJECTS:.o=.d)
|
|
|
|
# With no explicit backend choice, all means every currently supported
|
|
# production spacetime backend. An explicit SPACETIME selects that backend,
|
|
# so `make SPACETIME=schwarzschild` remains the direct build command.
|
|
ifneq ($(filter command\ line environment environment\ override,$(origin SPACETIME)),)
|
|
all: backend
|
|
else
|
|
all: minkowski schwarzschild alcubierre
|
|
endif
|
|
|
|
minkowski:
|
|
$(MAKE) SPACETIME=minkowski ENABLE_HDR=$(ENABLE_HDR) backend
|
|
|
|
schwarzschild:
|
|
$(MAKE) SPACETIME=schwarzschild ENABLE_HDR=$(ENABLE_HDR) backend
|
|
|
|
alcubierre:
|
|
$(MAKE) SPACETIME=alcubierre ENABLE_HDR=$(ENABLE_HDR) backend
|
|
|
|
# Build exactly the selected backend/configuration, e.g.
|
|
# make SPACETIME=schwarzschild ENABLE_HDR=1 backend
|
|
backend: $(TARGET)
|
|
|
|
$(TARGET): $(RENDER_OBJECTS) FORCE | $(BUILD_DIR)
|
|
$(RENDER_LINKER) $(BUILD_CFLAGS) $(OPENMP_FLAGS) $(RENDER_OBJECTS) $(LDLIBS) $(HDR_LDLIBS) -o $@
|
|
|
|
FORCE:
|
|
|
|
$(OBJECT_DIR)/$(HDR_BUILD_TAG)/%.o: %.c
|
|
@mkdir -p $(dir $@)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(BACKEND_CPPFLAGS) $(HDR_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc -MMD -MP -c $< -o $@
|
|
|
|
$(BUILD_DIR):
|
|
mkdir -p $@
|
|
|
|
$(OBJECT_DIR)/$(HDR_BUILD_TAG)/src/hip_psf.o: src/hip_psf.hip src/hip_psf.h src/optics.h
|
|
@mkdir -p $(dir $@)
|
|
$(HIPCC) $(HIP_CXXFLAGS) $(BUILD_CPPFLAGS) -Isrc -c $< -o $@
|
|
|
|
# This is a production-sink regression, not the removed float analytic spike.
|
|
# It requires PSF_BACKEND=hip and an actual HIP GPU agent at execution time.
|
|
ifeq ($(PSF_BACKEND),hip)
|
|
hip-psf-test: $(HIP_PSF_TEST_TARGET)
|
|
hip-psf-bench: $(HIP_PSF_BENCH_TARGET)
|
|
|
|
$(HIP_PSF_BENCH_TARGET): tests/benchmark_hip_psf.hip $(HIP_PSF_OBJECT) $(OBJECT_DIR)/$(HDR_BUILD_TAG)/src/optics.o | $(TEST_OUT_DIR)
|
|
$(HIPCC) $(HIP_CXXFLAGS) $(OPENMP_FLAGS) -Isrc -x hip $< -x none $(filter-out $<,$^) $(LDLIBS) $(HDR_LDLIBS) -o $@
|
|
|
|
$(HIP_PSF_TEST_TARGET): tests/test_hip_psf.hip $(HIP_PSF_OBJECT) $(OBJECT_DIR)/$(HDR_BUILD_TAG)/src/optics.o | $(TEST_OUT_DIR)
|
|
$(HIPCC) $(HIP_CXXFLAGS) $(OPENMP_FLAGS) -Isrc -x hip $< -x none $(filter-out $<,$^) $(LDLIBS) $(HDR_LDLIBS) -o $@
|
|
else
|
|
hip-psf-test hip-psf-bench:
|
|
$(error HIP PSF checks require PSF_BACKEND=hip)
|
|
endif
|
|
|
|
run: $(TARGET)
|
|
mkdir -p output/imgs
|
|
./$(TARGET) --catalog assets/sky_grid_5deg.csv --output output/imgs/$(SPACETIME)_sky.$(IMAGE_EXT)
|
|
|
|
$(TEST_OUT_DIR): | $(BUILD_DIR)
|
|
mkdir -p $@
|
|
|
|
$(TEST_TARGET): tests/test_geodesic.c $(CORE_MINKOWSKI_SOURCES) $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@
|
|
|
|
# Explicit adaptive DP5(4) core and RayPool regression. The test textually
|
|
# includes both analytic providers (renaming spacetime_create_default), so the
|
|
# link line deliberately omits src/spacetime_{minkowski,schwarzschild}.c.
|
|
$(ADAPTIVE_GEODESIC_TEST_TARGET): tests/test_geodesic_adaptive.c $(COMMON_SOURCES) $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -DGEODESIC_EVENT_TESTING -Isrc $^ $(LDLIBS) -o $@
|
|
|
|
$(ASYMPTOTIC_TEST_TARGET): tests/test_asymptotic.c $(CORE_MINKOWSKI_SOURCES) $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@
|
|
|
|
# The test includes asymptotic.c to cover its private floating-point kernel.
|
|
$(ASYMPTOTIC_QUADRATIC_TEST_TARGET): tests/test_asymptotic_quadratic.c $(CORE_MINKOWSKI_SOURCES) $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc $(filter-out src/asymptotic.c,$^) $(LDLIBS) -o $@
|
|
|
|
$(ASYMPTOTIC_SCHWARZSCHILD_TEST_TARGET): tests/test_asymptotic_schwarzschild.c $(COMMON_SOURCES) src/spacetime_schwarzschild.c $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -DSPACETIME_SCHWARZSCHILD -Isrc $^ $(LDLIBS) -o $@
|
|
|
|
# Independent core regression for the backend-free numerical entry localizer.
|
|
# It links only the new module and the shared spacetime dispatch wrapper: no
|
|
# analytic backend, no geodesic integrator and no asymptotic.c are required,
|
|
# so it stays exercisable independently of the route integration.
|
|
$(ASYMPTOTIC_ENTRY_TEST_TARGET): tests/test_asymptotic_entry.c src/asymptotic_entry.c src/spacetime_common.c src/asymptotic_entry.h src/asymptotic.h src/geodesic.h src/spacetime.h src/observer.h | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc tests/test_asymptotic_entry.c src/asymptotic_entry.c src/spacetime_common.c $(LDLIBS) -o $@
|
|
|
|
$(FRAME_TEST_TARGET): tests/test_frame.c $(CORE_MINKOWSKI_SOURCES) $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@
|
|
|
|
$(SCHWARZSCHILD_TEST_TARGET): tests/test_schwarzschild.c $(COMMON_SOURCES) src/spacetime_schwarzschild.c $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@
|
|
|
|
# Independent physics oracle for the termination policy (plan P0); links the
|
|
# analytic Schwarzschild backend and its exterior module.
|
|
$(TERMINATION_ORACLE_TEST_TARGET): tests/test_termination_oracle.c $(COMMON_SOURCES) src/spacetime_schwarzschild.c $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -DSPACETIME_SCHWARZSCHILD -Isrc $^ $(LDLIBS) -o $@
|
|
|
|
$(ALCUBIERRE_TEST_TARGET): tests/test_alcubierre.c $(COMMON_SOURCES) src/spacetime_alcubierre.c $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@
|
|
|
|
$(OBSERVER_TRACK_TEST_TARGET): tests/test_observer_track.c $(COMMON_SOURCES) $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@
|
|
|
|
$(CATALOG_PREFETCH_TEST_TARGET): tests/test_catalog_prefetch.c $(CORE_MINKOWSKI_SOURCES) $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@
|
|
|
|
$(TEST_OUT_DIR)/test_observer_minkowski: tests/test_observer.c $(CORE_MINKOWSKI_SOURCES) $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@
|
|
|
|
$(TEST_OUT_DIR)/test_observer_schwarzschild: tests/test_observer.c $(COMMON_SOURCES) src/spacetime_schwarzschild.c $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -DSPACETIME_SCHWARZSCHILD -Isrc $^ $(LDLIBS) -o $@
|
|
|
|
$(FAST_PSF_FFTW_TEST_TARGET): tests/test_fast_psf_fftw.c $(CORE_MINKOWSKI_SOURCES) $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@
|
|
|
|
# The tone-map regression links production optics.c only, so it neither needs a
|
|
# catalog nor touches ray tracing, the mesh, or any image writer at runtime.
|
|
$(TONE_MAP_TEST_TARGET): tests/test_tone_map.c src/optics.c src/optics.h $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc tests/test_tone_map.c src/optics.c $(CPU_FFTW_SOURCES) $(LDLIBS) -o $@
|
|
|
|
# The movie-output queue links production optics + fast_psf_fftw only, so it
|
|
# needs neither a catalog nor ray tracing.
|
|
$(MOVIE_OUTPUT_TEST_TARGET): tests/test_movie_output.c src/movie_output.c src/movie_output.h src/optics.c src/optics.h $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc tests/test_movie_output.c src/movie_output.c src/optics.c $(CPU_FFTW_SOURCES) $(LDLIBS) -o $@
|
|
|
|
$(FAST_PSF_FFTW_BENCH_TARGET): tests/benchmark_fast_psf_fftw.c $(CORE_MINKOWSKI_SOURCES) $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc $^ $(LDLIBS) -o $@
|
|
|
|
# The sensor-bloom checks link only the standalone model, so they need neither
|
|
# a catalog nor ray tracing, and build in every ENABLE_HDR/PSF_BACKEND
|
|
# configuration.
|
|
$(SENSOR_BLOOM_TEST_TARGET): tests/test_sensor_bloom.c src/sensor_bloom.c src/sensor_bloom.h | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc tests/test_sensor_bloom.c src/sensor_bloom.c $(LDLIBS) -o $@
|
|
|
|
$(SENSOR_BLOOM_BENCH_TARGET): tests/benchmark_sensor_bloom.c src/sensor_bloom.c src/sensor_bloom.h | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc tests/benchmark_sensor_bloom.c src/sensor_bloom.c $(LDLIBS) -o $@
|
|
|
|
# The FFTW-vs-spatial test is meaningful only in the CPU PSF build.
|
|
ifneq ($(CPU_FFTW_SOURCES),)
|
|
FAST_PSF_FFTW_TEST_DEP := $(FAST_PSF_FFTW_TEST_TARGET)
|
|
FAST_PSF_FFTW_TEST_RUN := $(FAST_PSF_FFTW_TEST_TARGET)
|
|
else
|
|
FAST_PSF_FFTW_TEST_DEP :=
|
|
FAST_PSF_FFTW_TEST_RUN :=
|
|
endif
|
|
|
|
test: $(CAMERA_TEST_TARGETS) $(TEST_TARGET) $(ADAPTIVE_GEODESIC_TEST_TARGET) $(ASYMPTOTIC_TEST_TARGET) $(ASYMPTOTIC_ENTRY_TEST_TARGET) $(ASYMPTOTIC_QUADRATIC_TEST_TARGET) $(ASYMPTOTIC_SCHWARZSCHILD_TEST_TARGET) $(TERMINATION_ORACLE_TEST_TARGET) $(FRAME_TEST_TARGET) $(SCHWARZSCHILD_TEST_TARGET) $(ALCUBIERRE_TEST_TARGET) $(OBSERVER_TRACK_TEST_TARGET) $(CATALOG_PREFETCH_TEST_TARGET) $(FAST_PSF_FFTW_TEST_DEP) $(TONE_MAP_TEST_TARGET) $(MOVIE_OUTPUT_TEST_TARGET) $(SENSOR_BLOOM_TEST_TARGET)
|
|
$(TEST_OUT_DIR)/test_observer_minkowski
|
|
$(TEST_OUT_DIR)/test_observer_schwarzschild
|
|
$(TEST_TARGET)
|
|
$(ADAPTIVE_GEODESIC_TEST_TARGET)
|
|
$(ASYMPTOTIC_TEST_TARGET)
|
|
$(ASYMPTOTIC_ENTRY_TEST_TARGET)
|
|
$(ASYMPTOTIC_QUADRATIC_TEST_TARGET)
|
|
$(ASYMPTOTIC_SCHWARZSCHILD_TEST_TARGET)
|
|
$(TERMINATION_ORACLE_TEST_TARGET)
|
|
$(FRAME_TEST_TARGET)
|
|
$(SCHWARZSCHILD_TEST_TARGET)
|
|
$(ALCUBIERRE_TEST_TARGET)
|
|
$(OBSERVER_TRACK_TEST_TARGET)
|
|
$(CATALOG_PREFETCH_TEST_TARGET)
|
|
$(FAST_PSF_FFTW_TEST_RUN)
|
|
$(TONE_MAP_TEST_TARGET)
|
|
$(MOVIE_OUTPUT_TEST_TARGET)
|
|
$(SENSOR_BLOOM_TEST_TARGET)
|
|
python3 tests/test_camera_cli.py $(BUILD_DIR) $(TEST_OUT_DIR)
|
|
python3 tests/test_adaptive_cli.py $(BUILD_DIR) $(TEST_OUT_DIR)
|
|
python3 tests/test_ray_diagnostics.py $(BUILD_DIR) $(TEST_OUT_DIR)
|
|
python3 tests/test_output_streams.py $(BUILD_DIR) $(TEST_OUT_DIR)
|
|
|
|
tone-map-test: $(TONE_MAP_TEST_TARGET)
|
|
$(TONE_MAP_TEST_TARGET)
|
|
|
|
sensor-bloom-test: $(SENSOR_BLOOM_TEST_TARGET)
|
|
$(SENSOR_BLOOM_TEST_TARGET)
|
|
|
|
sensor-bloom-bench: $(SENSOR_BLOOM_BENCH_TARGET)
|
|
|
|
fast-psf-fftw-bench: $(FAST_PSF_FFTW_BENCH_TARGET)
|
|
|
|
clean:
|
|
rm -rf build
|
|
|
|
-include $(RENDER_DEPS)
|
|
include mk/reference_images.mk
|
|
|
|
# Test-only producer consumer: never linked into a renderer.
|
|
.PHONY: psf-capture
|
|
psf-capture: $(TEST_OUT_DIR)/capture_psf
|
|
$(TEST_OUT_DIR)/capture_psf: tests/capture_psf.c $(CORE_MINKOWSKI_SOURCES) $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc $< $(filter-out src/frame.c,$(CORE_MINKOWSKI_SOURCES)) $(CPU_FFTW_SOURCES) $(LDLIBS) -o $@
|
|
|
|
.PHONY: hip-psf-replay
|
|
hip-psf-replay: $(TEST_OUT_DIR)/replay_psf
|
|
$(TEST_OUT_DIR)/replay_psf: tests/replay_psf.hip src/hip_psf.hip src/hip_psf.h src/optics.h $(OBJECT_DIR)/$(HDR_BUILD_TAG)/src/optics.o | $(TEST_OUT_DIR)
|
|
$(HIPCC) $(HIP_CXXFLAGS) $(OPENMP_FLAGS) -Isrc -x hip $< -x none $(filter %.o,$^) $(LDLIBS) $(HDR_LDLIBS) -o $@
|
|
|
|
$(TEST_OUT_DIR)/make_psf_fixture: tests/make_psf_fixture.c src/optics.c src/optics.h $(CPU_FFTW_SOURCES) | $(TEST_OUT_DIR)
|
|
$(CC) $(CPPFLAGS) $(BUILD_CPPFLAGS) $(CFLAGS) $(BUILD_CFLAGS) $(OPENMP_FLAGS) -Isrc $< src/optics.c $(CPU_FFTW_SOURCES) $(LDLIBS) -o $@
|