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