1: @echo off 2: SETLOCAL 3: SET RUNIT=1 4: SET DOFLXG=1 5: SET DOECHO=0 6: SET FID=%FLX_INSTALL_DIR% 7: SET STATIC=0 8: 9: :DOARGS 10: IF "-c" EQU "%1" ( 11: SET RUNIT=0 12: SHIFT 13: GOTO DOARGS 14: ) 15: 16: IF "--nofelix" EQU "%1" ( 17: SET DOFLXG=0 18: SHIFT 19: GOTO DOARGS 20: ) 21: 22: IF "--echo" EQU "%1" ( 23: echo on 24: SET DOECHO=1 25: SHIFT 26: GOTO DOARGS 27: ) 28: 29: IF "--test" EQU "%1" ( 30: SET FID=. 31: SHIFT 32: GOTO DOARGS 33: ) 34: 35: IF "--static" EQU "%1" ( 36: SET STATIC=1 37: SHIFT 38: GOTO DOARGS 39: ) 40: 41: "%FID%\BIN\FLXG" -I"%FID%\LIB" %1 >"%1.LOG" 42: if ERRORLEVEL 1 GOTO ERROR 43: if %STATIC% EQU 0 ( 44: %FID%\BIN\FLX_PKGCONFIG --path:%FID%\CONFIG --field:cflags @%1.resh >%1_cflags.txt 45: if ERRORLEVEL 1 GOTO ERROR 46: cl /nologo /MD /c /EHs /w /I"%FID%\RTL" @%1_cflags.txt %1.cpp /Fo%1.obj >"%1.LOG" 47: if ERRORLEVEL 1 GOTO ERROR 48: %FID%\BIN\FLX_PKGCONFIG --path:%FID%\CONFIG --field:provides_dlib --field:requires_dlibs @%1.resh >%1_linkflags.txt 49: if ERRORLEVEL 1 GOTO ERROR 50: link /dll %1.obj /OUT:%1.dll @%1_linkflags.txt /LIBPATH:"%FID%\BIN" /DEFAULTLIB:libflx_dynamic >"%1.LOG" 51: if ERRORLEVEL 1 GOTO ERROR 52: del %1.exp 53: del %1.lib 54: del %_cflags.txt 55: del %_linkflags.txt 56: IF %RUNIT% EQU 1 ( 57: "%FID%\bin\flx_run" %1 %2 %3 %4 %5 %6 %7 %8 %9 58: ) 59: ) else ( 60: %FID%\BIN\FLX_PKGCONFIG --path:%FID%\CONFIG --field:cflags @%1.resh >%1_cflags.txt 61: if ERRORLEVEL 1 GOTO ERROR 62: cl /nologo /MT /c /EHs /w /I"%FID%\RTL" /DFLX_STATIC_LINK @%1_cflags.txt %1.cpp /Fo%1.obj >"%1.LOG" 63: if ERRORLEVEL 1 GOTO ERROR 64: %FID%\BIN\FLX_PKGCONFIG --path:%FID%\CONFIG --field:provides_slib --field:requires_slibs @%1.resh >%1_linkflags.txt 65: link "%FID%\rtl\flx_run_static.obj" %1.obj /OUT:%1.exe @%1_linkflags.txt /LIBPATH:"%FID%\RTL" /DEFAULTLIB:libflx_async_static /DEFAULTLIB:libfaio_static /DEFAULTLIB:libdemux_static /DEFAULTLIB:libflx_pthread_static /DEFAULTLIB:libflx_static >"%1.LOG" 66: if ERRORLEVEL 1 GOTO ERROR 67: del %_cflags.txt 68: del %_linkflags.txt 69: %1 %2 %3 %4 %5 %6 %7 %8 %9 70: ) 71: GOTO FINISHED 72: :ERROR 73: ECHO SOME KIND OF ERROR OCCURED, rerun with --echo 74: type %1.LOG 75: EXIT /B 1 76: :FINISHED 77: ENDLOCAL 78:
1: #!/usr/bin/env bash 2: # flx - felix script harness 3: INSTALL_ROOT=/usr/lib/felix/felix-1.1.2/lib/felix-1.1.2 4: FLX_INSTALL_DIR=${FLX_INSTALL_DIR:-/usr/lib/felix/felix-1.1.2/lib/felix-1.1.2} 5: CYGWIN=0 6: WIN32=0 7: MACOSX=0 8: HAVE_GNU=1 9: HAVE_MSVC=0 10: CCOBJ_DLLIB="g++ -fPIC -c -Wall -Wno-invalid-offsetof -Wfatal-errors " 11: CCLINK_DLLIB="g++ -shared " 12: CCOBJ_STATIC_LIB="g++ -c -Wall -Wno-invalid-offsetof -Wfatal-errors " 13: CCLINK_STATIC="g++ " 14: VERSION="1.1.2" 15: EXT_LIB=".a" 16: EXT_STATIC_OBJ="_static.o" 17: EXT_SHARED_OBJ="_dynamic.o" 18: EXT_EXE="" 19: EXT_SHLIB=".so" 20: SPEC_OBJ_FILENAME="-o " 21: SPEC_EXE_FILENAME="-o " 22: OPTIMISE="-O3 -fomit-frame-pointer --inline " 23: DEBUG_FLAGS="-g " 24: PTHREAD_SWITCH="-lpthread " 25: # check for test mode: this argument must come first 26: 27: TESTMODE=0 28: RECOMPILE=0 29: DEBUG=0 30: INLINE=10 31: ECHO=0 32: TIME=0 33: STATIC=0 34: RUNIT=1 35: CCFLAGS="" 36: FELIX=1 37: LINKER_SWITCHES="" 38: MACROS="" 39: grab=1 40: 41: INCLUDE_DIRS="" 42: 43: while (( "$grab" == "1" )); 44: do 45: case x$1 in 46: x--test=*) 47: TESTMODE=1 48: FLX_INSTALL_DIR=${1:7} 49: shift 50: ;; 51: 52: x--test) 53: TESTMODE=1 54: FLX_INSTALL_DIR=. 55: shift 56: ;; 57: 58: x--force) 59: RECOMPILE=1 60: shift 61: ;; 62: 63: x--debug) 64: DEBUG=1 65: ECHO=1 66: shift 67: ;; 68: 69: x--time) 70: TIME=1 71: shift 72: ;; 73: 74: x--echo) 75: ECHO=1 76: shift 77: ;; 78: 79: x--static) 80: STATIC=1 81: shift 82: ;; 83: 84: x--inline=*) 85: INLINE=${1:9} 86: shift 87: ;; 88: 89: x--inline) 90: INLINE=50 91: shift 92: ;; 93: 94: x--noinline) 95: INLINE=0 96: shift 97: ;; 98: 99: x--opt=1) 100: INLINE=10 101: CCFLAGS="-O1 $CCFLAGS" 102: shift 103: ;; 104: 105: x--opt=2) 106: INLINE=20 107: CCFLAGS="$CCFLAGS$OPTIMISE" 108: shift 109: ;; 110: 111: x--opt=3) 112: INLINE=50 113: CCFLAGS="$CCFLAGS$OPTIMISE" 114: shift 115: ;; 116: 117: x--optimise) 118: INLINE=10 119: CCFLAGS="$CCFLAGS$OPTIMISE" 120: shift 121: ;; 122: 123: x--optimize) 124: INLINE=10 125: CCFLAGS="$CCFLAGS$OPTIMISE" 126: shift 127: ;; 128: 129: x--version) 130: echo $VERSION 131: exit 0 132: ;; 133: 134: x--help) 135: man flx 136: exit 0 137: ;; 138: 139: x-c) 140: RUNIT=0 141: shift 142: ;; 143: 144: x-I*) 145: INCLUDE_DIRS="$INCLUDE_DIRS $1" 146: shift 147: ;; 148: 149: x--nofelix) 150: FELIX=0 151: shift 152: ;; 153: 154: x-[lL]*) 155: LINKER_SWITCHES="$LINKER_SWITCHES $1" 156: shift 157: ;; 158: 159: x-D*) 160: MACROS="$MACROS $1" 161: shift 162: ;; 163: 164: x*) 165: grab=0 166: ;; 167: 168: esac 169: done 170: 171: DLINK_STRING="-L${FLX_INSTALL_DIR}/rtl " 172: SLINK_STRING="-L${FLX_INSTALL_DIR}/rtl " 173: PKGCONFIG=$FLX_INSTALL_DIR/bin/flx_pkgconfig 174: 175: if [ "$ECHO" = "1" ] 176: then 177: echo "#FLX_INSTALL_DIR=$FLX_INSTALL_DIR" 178: echo "#PKGCONFIG=$PKGCONFIG" 179: fi 180: 181: 182: # find external header files 183: PKGCONFIG_CFLAGS="$PKGCONFIG --path+=$FLX_INSTALL_DIR/config --field=cflags " 184: 185: # find external dynload libraries 186: PKGCONFIG_DLIBS="$PKGCONFIG -r --path+=$FLX_INSTALL_DIR/config --field=provides_dlib --field=requires_dlibs " 187: 188: # find external static libraries 189: PKGCONFIG_SLIBS="$PKGCONFIG -r --keeprightmost --path+=$FLX_INSTALL_DIR/config --field=provides_slib --field=requires_slibs " 190: 191: #find driver package required 192: PKGCONFIG_DRIVER="$PKGCONFIG --path+=$FLX_INSTALL_DIR/config --field=flx_requires_driver " 193: 194: # make a list of any *.cpp files (or other g++ options ..) 195: 196: if [ $STATIC = 0 ] 197: then 198: EXT_OBJ=$EXT_DYNAMIC_OBJ 199: else 200: EXT_OBJ=$EXT_STATIC_OBJ 201: fi 202: 203: cpps="" 204: cppos="" 205: grab=1 206: kgs="" 207: while (( "$grab" == "1" )); 208: do 209: case "$1" in 210: *.cpp) 211: cpps="$cpps $1" 212: cppos="$cppos `dirname $1`/`basename $1 .cpp`$EXT_OBJ" 213: shift 214: ;; 215: 216: *.cxx) 217: cpps="$cpps $1" 218: cppos="$cppos `dirname $1`/`basename $1 .cxx`$EXT_OBJ" 219: shift 220: ;; 221: 222: *.c) 223: cpps="$cpps $1" 224: cppos="$cppos `dirname $1`/`basename $1 .c`$EXT_OBJ" 225: shift 226: ;; 227: 228: *.o) 229: cppos="$cppos `dirname $1`/`basename $1 .o`$EXT_OBJ" 230: shift 231: ;; 232: 233: *.obj) 234: cppos="$cppos `dirname $1`/`basename $1 .obj`$EXT_OBJ" 235: shift 236: ;; 237: 238: *.a) 239: cppos="$cppos $1" 240: shift 241: ;; 242: 243: *.lib) 244: cppos="$cppos $1" 245: shift 246: ;; 247: 248: --pkg=*) 249: pkgs=" `echo \"$1\" | sed 's/--pkg=\(.*\)/\\1/'`" 250: shift 251: ;; 252: 253: # unknown flag .. pass to both compile and link 254: -*) 255: cpps="$cpps $1" 256: cppos="$cppos $1" 257: shift 258: ;; 259: 260: *) 261: grab=0 262: ;; 263: esac 264: done 265: 266: if [ "x$1" = "x" ] 267: then 268: echo "usage: flx filename" 269: exit 1 270: fi 271: 272: # Strip trailing .flx or .so 273: # users should type 'flx file' without extension, 274: # but #! interpreter always passes extension .. 275: 276: case "$1" in 277: *.flx) 278: arg="`echo $1 | sed 's/\.flx$//'`" 279: is_flx=1 280: ;; 281: 282: *.so) 283: arg="`echo $1 | sed 's/\.so$//'`" 284: is_so=1 285: ;; 286: 287: *) 288: arg="$1" 289: esac 290: 291: # Find absolute pathname 292: 293: base=$arg 294: 295: if [ "x$base" = "x" ] 296: then 297: echo "No such felix program: $arg" >&2 298: exit 1 299: fi 300: 301: shift 302: 303: function calpackages () { 304: # find all include directories 305: INCLUDE_DIRS="$INCLUDE_DIRS $($(echo $PKGCONFIG_CFLAGS @$base.resh))" 306: 307: # find the driver package 308: DRIVER_PKG=$($(echo $PKGCONFIG_DRIVER @$base.resh)) 309: if [ x$DRIVER_PKG = x ] 310: then 311: # default to flx_run if none specified 312: DRIVER_PKG=flx_run 313: fi 314: 315: # find the driver entity 316: if [ $STATIC = 0 ] 317: then 318: # dynamic linkage: the driver executable 319: DRIVER=$FLX_INSTALL_DIR/bin/$DRIVER_PKG$EXT_EXE 320: else 321: # static linkage: the driver object file 322: DRIVER=$FLX_INSTALL_DIR/rtl/$DRIVER_PKG$EXT_STATIC_OBJ 323: fi 324: 325: if [ $STATIC = 0 ] 326: then 327: # dynamic linkage: all the libraries required by the application 328: LINK_STRING="$DLINK_STRING$LINKER_SWITCHES $($(echo $PKGCONFIG_DLIBS @$base.resh))" 329: else 330: # static linkage: all the libraries required by the application and driver 331: LINK_STRING="$SLINK_STRING$LINKER_SWITCHES $($(echo $PKGCONFIG_SLIBS $DRIVER_PKG @$base.resh))" 332: fi 333: 334: if [ $ECHO = 1 ] 335: then 336: echo "#RESOURCE FILE=$base.resh" 337: echo "#INCLUDE_DIRS=$INCLUDE_DIRS" 338: echo "#DRIVER=$DRIVER" 339: echo "#LINK_STRING=$LINK_STRING" 340: fi 341: 342: } 343: 344: # grab arguments 345: grab=1 346: args="" 347: while (( "$grab" == "1" )); 348: do 349: case "x$1" in 350: x) 351: grab=0 352: ;; 353: 354: x*) 355: args="$args $1" 356: shift 357: ;; 358: esac 359: done 360: 361: INCLUDE_DIR="-I$FLX_INSTALL_DIR/rtl" 362: FLXLIB="-I$FLX_INSTALL_DIR/lib" 363: if [ "$CYGWIN" = "1" -o "$WIN32" = "1" ] 364: then 365: # bash is a heap of crap! The escaped quotes here are 366: # required in case the PATH has a filename with spaces 367: # However this actually fails on Linux! 368: FLXG="env \"PATH=$FLX_INSTALL_DIR/bin:\$PATH\" $FLX_INSTALL_DIR/bin/flxg" 369: FLXRUN="env \"PATH=$FLX_INSTALL_DIR/bin:\$PATH\" " 370: else 371: FLXG="env PATH=$FLX_INSTALL_DIR/bin:\$PATH $FLX_INSTALL_DIR/bin/flxg" 372: # the mac uses DYLD_LIBRARY_PATH instead of LD_LIBRARY_PATH 373: if [ "$MACOSX" = "1" ] 374: then 375: FLXRUN="env DYLD_LIBRARY_PATH=$FLX_INSTALL_DIR/rtl:\$DYLD_LIBRARY_PATH " 376: else 377: FLXRUN="env LD_LIBRARY_PATH=$FLX_INSTALL_DIR/rtl:\$LD_LIBRARY_PATH " 378: fi 379: fi 380: ELKHOUND="--elkhound=$FLX_INSTALL_DIR/bin/flx_elkhound" 381: 382: DEBUGSWITCH="" 383: if [ "$DEBUG" = "1" ]; then DEBUGSWITCH=" --debug"; fi 384: STATIC_ENV="" 385: if [ "$DEBUG" = "1" ]; then STATIC_ENV="env FLX_DEBUG=1 "; fi 386: 387: # No need to compile, just run it 388: if [ $STATIC = 0 ] 389: then 390: if [ $RECOMPILE = 0 -a -r "$base$EXT_SHLIB" -a "(" ! -r "$base.flx" -o "$base$EXT_SHLIB" -nt "$base.flx" ")" ] 391: then 392: if [ $RUNIT = 1 ] 393: then 394: calpackages 395: cmd="$FLXRUN$DRIVER$DEBUGSWITCH $base$EXT_SHLIB $args" 396: if [ $ECHO = 1 ]; then echo $cmd; fi 397: eval $cmd 398: exit $? 399: fi 400: fi 401: else 402: if [ $RECOMPILE = 0 -a -r "$base$EXT_EXE" -a "(" ! -r "$base.flx" -o "$base$EXT_EXE" -nt "$base.flx" ")" ] 403: then 404: if [ $RUNIT = 1 ] 405: then 406: cmd="$STATIC_ENV $base $args" 407: if [ $ECHO = 1 ]; then echo $cmd; fi 408: eval $cmd 409: exit $? 410: fi 411: fi 412: fi 413: 414: # Need Felix and c++ compile, then run it 415: 416: if [ $DEBUG = 1 ] 417: then 418: VERBOSE="-v" 419: CCFLAGS="$CCFLAGS$DEBUG_FLAGS" 420: else 421: VERBOSE="-q" 422: fi 423: 424: FLXFLAGS="--inline=$INLINE" 425: 426: if [ $STATIC = 0 ] 427: then 428: if [ $FELIX = 1 ] 429: then 430: FCMD="$FLXG $VERBOSE $FLXFLAGS $ELKHOUND $FLXLIB $INCLUDE_DIRS $base" 431: if [ $ECHO = 1 ]; then echo "$FCMD"; fi 432: eval $FCMD 433: fi 434: if [ $? = 0 ] 435: then 436: calpackages 437: CCMD="$CCOBJ_DLLIB $CCFLAGS -DTARGET_BUILD $INCLUDE_DIR $INCLUDE_DIRS $MACROS $cpps $base.cpp $SPEC_OBJ_FILENAME$base$EXT_OBJ" 438: #LCMD="$CCLINK_DLLIB $CCFLAGS $cppos $base$EXT_OBJ $SPEC_EXE_FILENAME$base$EXT_SHLIB $LINK_STRING $PTHREAD_SWITCH $LINKER_SWITCHES" 439: LCMD="$CCLINK_DLLIB $CCFLAGS $cppos $base$EXT_OBJ $SPEC_EXE_FILENAME$base$EXT_SHLIB $LINK_STRING $LINKER_SWITCHES" 440: if [ $ECHO = 1 ]; then echo "$CCMD"; fi 441: if `echo $CCMD` 442: then 443: if [ $ECHO = 1 ]; then echo "$LCMD"; fi 444: if `echo $LCMD` 445: then 446: if [ $RUNIT = 1 ] 447: then 448: if [ $TIME = 1 ] 449: then 450: cmd="time $FLXRUN$DRIVER$DEBUGSWITCH $base$EXT_SHLIB $args" 451: else 452: cmd="$FLXRUN$DRIVER$DEBUGSWITCH $base$EXT_SHLIB $args" 453: fi 454: if [ $ECHO = 1 ]; then echo $cmd; fi 455: eval $cmd 456: fi 457: fi 458: fi 459: fi 460: else 461: if [ $FELIX = 1 ] 462: then 463: FCMD="$FLXG $VERBOSE $FLXFLAGS $ELKHOUND $FLXLIB $INCLUDE_DIRS $base" 464: if [ $ECHO = 1 ]; then echo "$FCMD"; fi 465: eval $FCMD 466: fi 467: if [ $? = 0 ] 468: then 469: calpackages 470: CCMD="$CCOBJ_STATIC_LIB $CCFLAGS -DTARGET_BUILD -DFLX_STATIC_LINK $INCLUDE_DIR $INCLUDE_DIRS $MACROS $cpps $base.cpp $SPEC_OBJ_FILENAME$base$EXT_OBJ" 471: #LCMD="$CCLINK_STATIC $SPEC_EXE_FILENAME$base$EXT_EXE $base$EXT_OBJ ${DRIVER} $cppos $LINK_STRING $PTHREAD_SWITCH" 472: LCMD="$CCLINK_STATIC $SPEC_EXE_FILENAME$base$EXT_EXE $base$EXT_OBJ ${DRIVER} $cppos $LINK_STRING" 473: if [ $ECHO = 1 ]; then echo "$CCMD"; fi 474: if `echo $CCMD` 475: then 476: if [ $ECHO = 1 ]; then echo "$LCMD"; fi 477: if `echo $LCMD` 478: then 479: # rm -f "$base.cpp" 480: if [ $RUNIT = 1 ] 481: then 482: if [ $TIME = 1 ] 483: then 484: cmd="time $STATIC_ENV $base $args" 485: else 486: cmd="$STATIC_ENV $base $args" 487: fi 488: if [ $ECHO = 1 ]; then echo $cmd; fi 489: eval $cmd 490: fi 491: fi 492: fi 493: fi 494: fi 495: exit $? 496: