#!/usr/bin/make -f
# hipcc forces every translation unit it compiles to -x hip, even ones that
# never ask for it (unlike hip::device's INTERFACE_COMPILE_OPTIONS, which
# CMake only applies to targets that actually link against it). MIGraphX is
# a mixed codebase -- only src/targets/gpu links hip::device and needs HIP
# device compilation; host-only code (e.g. src/tf's protobuf bindings) must
# stay plain C++, or amdgcn-link fails on undefined device-side symbols for
# host-only libraries like libprotobuf. Use amdclang++ directly instead, so
# only targets that opt into hip::device get compiled as HIP.
export CXX=/usr/lib/rocm/llvm/bin/amdclang++
export CC=/usr/lib/rocm/llvm/bin/amdclang
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
export DPKG_GENSYMBOLS_CHECK_LEVEL = 4
export DH_VERBOSE = 1
export PATH:=$(PATH):/usr/lib/rocm/llvm/bin

GPU_TARGETS := "$(shell rocm-target-arch --sep ';')"

# filter incompatible options from affecting device code
CXXFLAGS := $(subst -fstack-protector-strong,-Xarch_host -fstack-protector-strong,$(CXXFLAGS))
CXXFLAGS := $(subst -fcf-protection,-Xarch_host -fcf-protection,$(CXXFLAGS))

%:
	dh $@

override_dh_auto_clean:
	dh_auto_clean
	rm -rf build
	rm -rf docs/doxygen/html
	rm -rf docs/doxygen/xml
	rm -rf docs/doxygen/DoxygenWarningLog.txt
	rm -rf docs/sphinx/_toc.yml
	rm -rf test/onnx/migraphx_api_load_save_argument.msgpack

# rocMLIR is not packaged for Debian/Ubuntu (upstream builds it from a
# pinned source commit via rbuild, not a system package), so it stays
# disabled here; MIOpen/rocBLAS/hipBLASLt/composable-kernel remain enabled.
override_dh_auto_configure:
	dh_auto_configure -- \
	      -DMIGRAPHX_ENABLE_GPU=ON \
	      -DBUILD_TESTING=ON \
	      -DGPU_TARGETS=$(GPU_TARGETS) \
	      -DROCM_PATH=/usr \
	      -DMIGRAPHX_ENABLE_MLIR=OFF \
	      -DCMAKE_INSTALL_RPATH=/usr/lib/${DEB_HOST_MULTIARCH}/migraphx/lib \
	      -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \

override_dh_auto_build:
	dh_auto_build
	dh_auto_build -- tests

# disable tests during build
override_dh_auto_test:
	:

# generate documentation
execute_after_dh_auto_build-indep: export http_proxy=127.0.0.1:9
execute_after_dh_auto_build-indep: export https_proxy=127.0.0.1:9
execute_after_dh_auto_build-indep:
ifeq (,$(filter nodoc,$(DEB_BUILD_OPTIONS)))
	rocm-docs-build
	# remove duplicate files/directories
	rm -rf build/html/.doctrees
	rm -rf build/html/_static/fonts
	rm -rf build/html/_static/vendor
	rm -rf build/html/_static/doctools.js
	rm -rf build/html/_static/language_data.js
	rm -rf build/html/_static/searchtools.js
	rm -rf build/html/_sphinx_design_static
	# Remove build path in some html files
	find build/html -type f -name '*.html' -exec sed -i 's|$(CURDIR)/||g' {} +
endif

execute_after_dh_install:
	# adjust target path to match installed location
	[ ! -d debian/migraphx-dev ] || find debian/migraphx-dev -type f -name 'migraphx-targets-none.cmake' -exec sed -i 's|\(/lib/[^/"]*\)/libmigraphx_py\.so|\1/migraphx/lib/libmigraphx_py.so|g' {} +

execute_before_dh_link:
ifeq (,$(filter nodoc,$(DEB_BUILD_OPTIONS)))
	# remove duplicate files/directories
	rm -rf debian/migraphx-doc/usr/share/doc/migraphx/examples/diffusion/python_controlnet_canny_sd_15/gradio_requirements.txt
	rm -rf debian/migraphx-doc/usr/share/doc/migraphx/examples/diffusion/python_stable_diffusion_21/gradio_requirements.txt
	rm -rf debian/migraphx-doc/usr/share/doc/migraphx/examples/onnxruntime/resnet50/images
	rm -rf debian/migraphx-doc/usr/share/doc/migraphx/examples/transformers/python_whisper/gradio_requirements.txt
endif

execute_after_dh_fixperms:
ifeq (,$(filter nodoc,$(DEB_BUILD_OPTIONS)))
	# remove exec bit from sh files installed as documentation
	[ ! -d debian/migraphx-doc ] || find debian/migraphx-doc -type f -name '*.sh' -exec chmod -x {} +
endif
	# remove exec bit from test files
	[ ! -d debian/migraphx-tests ] || find debian/migraphx-tests -type f -name '*.onnx' -exec chmod -x {} +
	[ ! -d debian/migraphx-tests ] || find debian/migraphx-tests -type f -name '*.weight' -exec chmod -x {} +

LIB=libmigraphx-c3
LIBV=$(shell head -1  debian/changelog | sed 's/.*(\(.*\)-.*).*$$/\1/')
REV=$(shell head -1  debian/changelog | sed 's/.*(.*-\(.*\)).*$$/\1/')
gensymbols:
	rm -rf /tmp/$(LIB)
	dpkg-deb -x ../$(LIB)_$(LIBV)-$(REV)_amd64.deb /tmp/$(LIB)
	dpkg-gensymbols -v$(LIBV) -p$(LIB) -P/tmp/$(LIB) -Odebian/$(LIB).symbols
	#Add "* Build-Depends-Package: libmigraphx-c-dev" on line 2
	#sed -i '2i * Build-Depends-Package: libmigraphx-c-dev' debian/$(LIB).symbols
