| #!/bin/bash |
| |
| help() { |
| { |
| echo "" |
| echo "Usage: $0 [--exec] [--prefix pf] args.." |
| echo " $0 --build modname.so cppsources.." |
| echo "" |
| echo "Replecement args:" |
| echo " --cxx @CXX@" |
| echo " --cxxflags $( echo '@CXXFLAGS@' | fmt -w60 | sed ':a;N;$!ba;s/\n/ \\\n /g' )" |
| echo " --ldflags @LDFLAGS@" |
| echo " --ldlibs @LDLIBS@" |
| echo " --bindir @BINDIR@" |
| echo " --datdir @DATDIR@" |
| 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 " yosys-config --exec --cxx --cxxflags --ldflags -o plugin.so -shared plugin.cc --ldlibs" |
| echo "" |
| echo "The above command can be abbreviated as:" |
| echo "" |
| echo " yosys-config --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 " yosys-config --prefix @ bindir: @bindir" |
| echo "" |
| echo "The args --bindir and --datdir can be directly followed by a slash and" |
| echo "additional text. Example:" |
| echo "" |
| echo " yosys-config --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[@]}" @CXX@ ) ;; |
| "$prefix"cxxflags) |
| tokens=( "${tokens[@]}" @CXXFLAGS@ ) ;; |
| "$prefix"ldflags) |
| tokens=( "${tokens[@]}" @LDFLAGS@ ) ;; |
| "$prefix"ldlibs) |
| tokens=( "${tokens[@]}" @LDLIBS@ ) ;; |
| "$prefix"bindir) |
| tokens=( "${tokens[@]}" '@BINDIR@' ) ;; |
| "$prefix"datdir) |
| tokens=( "${tokens[@]}" '@DATDIR@' ) ;; |
| "$prefix"bindir/*) |
| tokens=( "${tokens[@]}" '@BINDIR@'"${opt#${prefix}bindir}" ) ;; |
| "$prefix"datdir/*) |
| tokens=( "${tokens[@]}" '@DATDIR@'"${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 |
| |