From 7ea7342c18590b945bd8064bb63c8030d74327cc Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Tue, 19 Nov 2013 22:48:48 +0100 Subject: [PATCH] Large improvements in yosys-config --- Makefile | 3 +- manual/FILES_Prog/Makefile | 3 +- yosys-config.in | 95 ++++++++++++++++++++++++++++++++------ 3 files changed, 84 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 6160e4c66..37e507fed 100644 --- a/Makefile +++ b/Makefile @@ -90,7 +90,8 @@ kernel/version_$(GIT_REV).cc: Makefile echo "extern const char *yosys_version_str; const char *yosys_version_str=\"Yosys $(YOSYS_VER) (git sha1 $(GIT_REV))\";" > kernel/version_$(GIT_REV).cc yosys-config: yosys-config.in - sed 's,@CXX@,$(CXX),; s,@CXXFLAGS@,$(CXXFLAGS),; s,@LDFLAGS@,$(LDFLAGS),; s,@LDLIBS@,$(LDLIBS),;' < yosys-config.in > yosys-config + sed -e 's,@CXX@,$(CXX),;' -e 's,@CXXFLAGS@,$(CXXFLAGS),;' -e 's,@LDFLAGS@,$(LDFLAGS),;' -e 's,@LDLIBS@,$(LDLIBS),;' \ + -e 's,@BINDIR@,$(DESTDIR)/bin,;' -e 's,@DATDIR@,$(DESTDIR)/share/yosys,;' < yosys-config.in > yosys-config chmod +x yosys-config yosys-svgviewer: libs/svgviewer/*.h libs/svgviewer/*.cpp diff --git a/manual/FILES_Prog/Makefile b/manual/FILES_Prog/Makefile index 1afde80fd..8e326bdc2 100644 --- a/manual/FILES_Prog/Makefile +++ b/manual/FILES_Prog/Makefile @@ -5,8 +5,7 @@ test: stubnets.so tail test1.log test2.log test3.log stubnets.so: stubnets.cc - $(shell yosys-config --cxx --cxxflags --ldflags -o stubnets.so \ - -shared stubnets.cc --ldlibs ) + yosys-config --exec --cxx --cxxflags --ldflags -o $@ -shared $^ --ldlibs clean: rm -f test1.log test2.log test3.log diff --git a/yosys-config.in b/yosys-config.in index d67d881c3..8f8dd06c6 100644 --- a/yosys-config.in +++ b/yosys-config.in @@ -1,7 +1,35 @@ -#!/bin/sh +#!/bin/bash help() { - { echo; echo "Usage: $0 { --cxx | --cxxflags | --ldflags | --ldlibs }"; } >&2 + { + echo "" + echo "Usage: $0 [-exec] [--prefix pf] args.." + 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 trhough 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 "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 } @@ -9,22 +37,61 @@ if [ $# -eq 0 ]; then help 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 - --cxx) - echo -n '@CXX@ ' ;; - --cxxflags) - echo -n '@CXXFLAGS@ ' ;; - --ldflags) - echo -n '@LDFLAGS@ ' ;; - --ldlibs) - echo -n '@LDLIBS@ ' ;; - --help|-\?) - help ;; + "$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 ;; *) - echo -n "$opt " + tokens=( "${tokens[@]}" "$opt" ) esac done -echo +if $exec_mode; then + exec "${tokens[@]}" +fi + +echo "${tokens[@]}" exit 0 + -- 2.30.2