#!/bin/bash

help() {
	{
		echo ""
		echo "Usage: $0 [--exec] [--prefix pf] args.."
		echo "       $0 --build modname.so cppsources.."
		echo ""
		echo "Replacement args:"
		echo "    --cxx         x86_64-conda_cos6-linux-gnu-gcc"
		echo "    --cxxflags    $( echo '-fvisibility-inlines-hidden -std=c++17 -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem /home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include -fdebug-prefix-map=/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/work=/usr/local/src/conda/yosys-0.9_5658_gb8624ad2 -fdebug-prefix-map=/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl=/usr/local/src/conda-prefix -Wall -Wextra -ggdb -I"/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/share/yosys/include" -MD -MP -D_YOSYS_ -fPIC -I/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include -std=c++11 -Os -fno-merge-constants -I/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include -DYOSYS_ENABLE_PLUGINS -DYOSYS_ENABLE_GLOB -DYOSYS_ENABLE_ZLIB -I/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include -DYOSYS_ENABLE_TCL -DYOSYS_ENABLE_ABC -DYOSYS_ENABLE_COVER' | fmt -w60 | sed ':a;N;$!ba;s/\n/ \\\n                      /g' )"
		echo "    --ldflags     -Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,--disable-new-dtags -Wl,--gc-sections -Wl,-rpath,/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/lib -Wl,-rpath-link,/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/lib -L/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/lib -rdynamic"
		echo "    --ldlibs      -lstdc++ -lm -lrt -L/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/lib -lffi -ldl -lz -L/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/lib -ltcl8.6 -ltclstub8.6"
		echo "    --bindir      /home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/bin"
		echo "    --datdir      /home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/share/yosys"
		echo ""
		echo "All other args are passed through as they are."
		echo ""
		echo "Use --exec to call a command instead of generating output. Example usage:"
		echo ""
		echo "  $0 --exec --cxx --cxxflags --ldflags -o plugin.so -shared plugin.cc --ldlibs"
		echo ""
		echo "The above command can be abbreviated as:"
		echo ""
		echo "  $0 --build plugin.so plugin.cc"
		echo ""
		echo "Use --prefix to change the prefix for the special args from '--' to"
		echo "something else. Example:"
		echo ""
		echo "  $0 --prefix @ bindir: @bindir"
		echo ""
		echo "The args --bindir and --datdir can be directly followed by a slash and"
		echo "additional text. Example:"
		echo ""
		echo "  $0 --datdir/simlib.v"
		echo ""
	} >&2
	exit 1
}

if [ $# -eq 0 ]; then
	help
fi

if [ "$1" == "--build" ]; then
	modname="$2"; shift 2
	set -- --exec --cxx --cxxflags --ldflags -o "$modname" -shared "$@" --ldlibs
fi

prefix="--"
get_prefix=false
exec_mode=false
declare -a tokens=()

for opt; do
	if $get_prefix; then
		prefix="$opt"
		get_prefix=false
		continue
	fi
	case "$opt" in
		"$prefix"cxx)
			tokens=( "${tokens[@]}"  x86_64-conda_cos6-linux-gnu-gcc       ) ;;
		"$prefix"cxxflags)
			tokens=( "${tokens[@]}"  -fvisibility-inlines-hidden -std=c++17 -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -ffunction-sections -pipe -isystem /home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include -fdebug-prefix-map=/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/work=/usr/local/src/conda/yosys-0.9_5658_gb8624ad2 -fdebug-prefix-map=/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl=/usr/local/src/conda-prefix -Wall -Wextra -ggdb -I"/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/share/yosys/include" -MD -MP -D_YOSYS_ -fPIC -I/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include -std=c++11 -Os -fno-merge-constants -I/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include -DYOSYS_ENABLE_PLUGINS -DYOSYS_ENABLE_GLOB -DYOSYS_ENABLE_ZLIB -I/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/include -DYOSYS_ENABLE_TCL -DYOSYS_ENABLE_ABC -DYOSYS_ENABLE_COVER  ) ;;
		"$prefix"ldflags)
			tokens=( "${tokens[@]}"  -Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,--disable-new-dtags -Wl,--gc-sections -Wl,-rpath,/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/lib -Wl,-rpath-link,/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/lib -L/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/lib -rdynamic   ) ;;
		"$prefix"ldlibs)
			tokens=( "${tokens[@]}"  -lstdc++ -lm -lrt -L/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/lib -lffi -ldl -lz -L/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/lib -ltcl8.6 -ltclstub8.6    ) ;;
		"$prefix"bindir)
			tokens=( "${tokens[@]}" '/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/bin'   ) ;;
		"$prefix"datdir)
			tokens=( "${tokens[@]}" '/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/share/yosys'   ) ;;
		"$prefix"bindir/*)
			tokens=( "${tokens[@]}" '/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/bin'"${opt#${prefix}bindir}" ) ;;
		"$prefix"datdir/*)
			tokens=( "${tokens[@]}" '/home/runner/work/conda-eda/conda-eda/workdir/conda-env/conda-bld/yosys_1635203425550/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl/share/yosys'"${opt#${prefix}datdir}" ) ;;
		--help|-\?|-h)
			if [ ${#tokens[@]} -eq 0 ]; then
				help
			else
				tokens=( "${tokens[@]}" "$opt" )
			fi ;;
		--exec)
			if [ ${#tokens[@]} -eq 0 ]; then
				exec_mode=true
			else
				tokens=( "${tokens[@]}" "$opt" )
			fi ;;
		--prefix)
			if [ ${#tokens[@]} -eq 0 ]; then
				get_prefix=true
			else
				tokens=( "${tokens[@]}" "$opt" )
			fi ;;
		*)
			tokens=( "${tokens[@]}" "$opt" )
	esac
done

if $exec_mode; then
	exec "${tokens[@]}"
fi

echo "${tokens[@]}"
exit 0

