|
|
1.1 ! root 1: # $Header: /newbits/286_KERNEL/USRSRC/ldrv/RCS/Makefile,v 1.3 92/01/09 13:40:38 root Exp Locker: root $(USRSRC)/ldrv/RCS/Makefile,v 1.2 91/04/30 18:38:22 root Exp $ ! 2: ! 3: # Loadable Drivers - Makefile ! 4: # ! 5: ! 6: # Include directories ! 7: USRINC=/usr/include ! 8: SYSINC=/usr/include/sys ! 9: ! 10: CC=exec /bin/cc ! 11: CFLAGS= ! 12: ! 13: TARGETS=$(USRSYS)/lib/ldrts0.o \ ! 14: $(USRSYS)/lib/ldmain.o \ ! 15: $(USRSYS)/lib/ldswap.o \ ! 16: $(USRSYS)/lib/ldlib.a ! 17: ! 18: ld_support: $(TARGETS) ! 19: @sync ! 20: ! 21: $(USRSYS)/lib/ldrts0.o: ldrts0.s ! 22: as -xo $@ $< ! 23: ! 24: $(USRSYS)/lib/ldmain.o: ldmain.c ! 25: $(CC) $(CFLAGS) -c -o $@ $< ! 26: ! 27: $(USRSYS)/lib/ldswap.o: ldswap.c ! 28: $(CC) $(CFLAGS) -DNOMONITOR -c -o $@ $< ! 29: ! 30: # The following script extracts a module from a library. ! 31: X_LIB= OBJFIL=`basename $@ | sed 's/L//'` ;\ ! 32: ar x $< $$OBJFIL ;\ ! 33: mv $$OBJFIL $@ ! 34: ! 35: # The following modules are supported in loadable drivers. ! 36: # NOTE: Most of them are interface stubs to kernel code. ! 37: # Some of them are entirely driver resident. ! 38: LIBOBJ1=$(LOBJ)/absL.o \ ! 39: $(LOBJ)/allocL.o \ ! 40: $(LOBJ)/bclaimL.o \ ! 41: $(LOBJ)/bdoneL.o \ ! 42: $(LOBJ)/blkmvL.o \ ! 43: $(LOBJ)/bootL.o \ ! 44: $(LOBJ)/breadL.o \ ! 45: $(LOBJ)/breleaseL.o \ ! 46: $(LOBJ)/clockedfL.o \ ! 47: $(LOBJ)/clrqL.o \ ! 48: $(LOBJ)/cs_selfL.o \ ! 49: $(LOBJ)/dblockL.o \ ! 50: $(LOBJ)/dcloseL.o \ ! 51: $(LOBJ)/deferL.o \ ! 52: $(LOBJ)/devmsgL.o \ ! 53: $(LOBJ)/dioctlL.o \ ! 54: $(LOBJ)/dmagoL.o \ ! 55: $(LOBJ)/dmalockL.o \ ! 56: $(LOBJ)/dmaoffL.o \ ! 57: $(LOBJ)/dmaonL.o \ ! 58: $(LOBJ)/dmareqL.o \ ! 59: $(LOBJ)/dopenL.o \ ! 60: $(LOBJ)/dpollL.o \ ! 61: $(LOBJ)/dpowerL.o \ ! 62: $(LOBJ)/dreadL.o \ ! 63: $(LOBJ)/drvmapL.o \ ! 64: $(LOBJ)/dtimeL.o \ ! 65: $(LOBJ)/dwriteL.o \ ! 66: $(LOBJ)/fclearL.o \ ! 67: $(LOBJ)/fdiskL.o \ ! 68: $(LOBJ)/ffbyteL.o \ ! 69: $(LOBJ)/ffwordL.o \ ! 70: $(LOBJ)/ffmemL.o \ ! 71: $(LOBJ)/fkcopyL.o \ ! 72: $(LOBJ)/fpxcopyL.o \ ! 73: $(LOBJ)/freeL.o \ ! 74: $(LOBJ)/fucopyL.o \ ! 75: $(LOBJ)/getcsL.o \ ! 76: $(LOBJ)/getqL.o \ ! 77: $(LOBJ)/getubdL.o \ ! 78: $(LOBJ)/getuwdL.o \ ! 79: $(LOBJ)/inbL.o \ ! 80: $(LOBJ)/int11L.o \ ! 81: $(LOBJ)/iogetcL.o \ ! 82: $(LOBJ)/iomapvpL.o \ ! 83: $(LOBJ)/ioputcL.o \ ! 84: $(LOBJ)/ioreadL.o \ ! 85: $(LOBJ)/ioreqL.o \ ! 86: $(LOBJ)/iowriteL.o \ ! 87: $(LOBJ)/ipcaccessL.o \ ! 88: $(LOBJ)/kcallL.o \ ! 89: $(LOBJ)/kfcopyL.o \ ! 90: $(LOBJ)/kclearL.o \ ! 91: $(LOBJ)/kpcopyL.o \ ! 92: $(LOBJ)/kucopyL.o \ ! 93: $(LOBJ)/lockL.o \ ! 94: $(LOBJ)/lxdivL.o \ ! 95: $(LOBJ)/lxmulL.o \ ! 96: $(LOBJ)/lxremL.o \ ! 97: $(LOBJ)/lxsgnL.o \ ! 98: $(LOBJ)/memsetL.o \ ! 99: $(LOBJ)/memtestL.o \ ! 100: $(LOBJ)/nmidisableL.o \ ! 101: $(LOBJ)/nmienableL.o \ ! 102: $(LOBJ)/nondsigL.o \ ! 103: $(LOBJ)/nonedevL.o \ ! 104: $(LOBJ)/nulldevL.o \ ! 105: ! 106: LIBOBJ2=$(LOBJ)/outbL.o \ ! 107: $(LOBJ)/panicL.o \ ! 108: $(LOBJ)/pclearL.o \ ! 109: $(LOBJ)/pkcopyL.o \ ! 110: $(LOBJ)/plrcopyL.o \ ! 111: $(LOBJ)/pollopenL.o \ ! 112: $(LOBJ)/pollwakeL.o \ ! 113: $(LOBJ)/printfL.o \ ! 114: $(LOBJ)/prlcopyL.o \ ! 115: $(LOBJ)/ptovL.o \ ! 116: $(LOBJ)/pucopyL.o \ ! 117: $(LOBJ)/putcharL.o \ ! 118: $(LOBJ)/putqL.o \ ! 119: $(LOBJ)/putubdL.o \ ! 120: $(LOBJ)/putuwdL.o \ ! 121: $(LOBJ)/rucopyL.o \ ! 122: $(LOBJ)/s5_to_sgL.o \ ! 123: $(LOBJ)/s5_to_tcL.o \ ! 124: $(LOBJ)/sallocL.o \ ! 125: $(LOBJ)/sclearL.o \ ! 126: $(LOBJ)/sendsigL.o \ ! 127: $(LOBJ)/setivecL.o \ ! 128: $(LOBJ)/sfreeL.o \ ! 129: $(LOBJ)/sfbyteL.o \ ! 130: $(LOBJ)/sfwordL.o \ ! 131: $(LOBJ)/sfmemL.o \ ! 132: $(LOBJ)/sg_to_s5L.o \ ! 133: $(LOBJ)/sleepL.o \ ! 134: $(LOBJ)/slrcopyL.o \ ! 135: $(LOBJ)/sphiL.o \ ! 136: $(LOBJ)/splL.o \ ! 137: $(LOBJ)/sploL.o \ ! 138: $(LOBJ)/superL.o \ ! 139: $(LOBJ)/swapioL.o \ ! 140: $(LOBJ)/tc_to_s5L.o \ ! 141: $(LOBJ)/timeoutL.o \ ! 142: $(LOBJ)/ttcloseL.o \ ! 143: $(LOBJ)/tthupL.o \ ! 144: $(LOBJ)/ttflushL.o \ ! 145: $(LOBJ)/ttinL.o \ ! 146: $(LOBJ)/ttioctlL.o \ ! 147: $(LOBJ)/ttopenL.o \ ! 148: $(LOBJ)/ttoutL.o \ ! 149: $(LOBJ)/ttpollL.o \ ! 150: $(LOBJ)/ttreadL.o \ ! 151: $(LOBJ)/ttsetgrpL.o \ ! 152: $(LOBJ)/ttsignalL.o \ ! 153: $(LOBJ)/ttstartL.o \ ! 154: $(LOBJ)/ttwriteL.o \ ! 155: $(LOBJ)/uexitL.o \ ! 156: $(LOBJ)/ufcopyL.o \ ! 157: $(LOBJ)/ukcopyL.o \ ! 158: $(LOBJ)/unlockL.o \ ! 159: $(LOBJ)/upcopyL.o \ ! 160: $(LOBJ)/urcopyL.o \ ! 161: $(LOBJ)/vprintL.o \ ! 162: $(LOBJ)/vrelseL.o \ ! 163: $(LOBJ)/vremapL.o \ ! 164: $(LOBJ)/vtopL.o \ ! 165: $(LOBJ)/vxdivL.o \ ! 166: $(LOBJ)/vxmulL.o \ ! 167: $(LOBJ)/vxremL.o \ ! 168: $(LOBJ)/waitqL.o \ ! 169: $(LOBJ)/wakeupL.o \ ! 170: ! 171: LIBOBJ3=$(LOBJ)/fifo_closeL.o \ ! 172: $(LOBJ)/fifo_lenL.o \ ! 173: $(LOBJ)/fifo_openL.o \ ! 174: $(LOBJ)/fifo_readL.o \ ! 175: $(LOBJ)/fifo_rewindL.o \ ! 176: $(LOBJ)/fifo_writeL.o \ ! 177: ! 178: $(USRSYS)/lib/ldlib.a: mkstub.m4 $(LIBOBJ1) $(LIBOBJ2) $(LIBOBJ3) ! 179: rm -f $@ ! 180: ar rc $@ $(LIBOBJ1) ! 181: ar rc $@ $(LIBOBJ2) ! 182: ar rc $@ $(LIBOBJ3) ! 183: ranlib $@ ! 184: ! 185: # Here is mkstub.m4: ! 186: #define(sym, substr(basename, -2, ))dnl ! 187: # .globl sym`_' ! 188: #sym`_': mov ax,`$K'sym`_' ! 189: # .byte 0x9A ! 190: # .word xcalled ! 191: # .word 0x0060 ! 192: # ret ! 193: ! 194: MKSTUB= echo "define(basename, `basename $*`)dnl" | m4 - mkstub.m4 > $*.s ;\ ! 195: as -gxo $@ $*.s; rm $*.s ! 196: ! 197: $(LOBJ)/absL.o: ! 198: $(MKSTUB) ! 199: ! 200: $(LOBJ)/allocL.o: ! 201: $(MKSTUB) ! 202: ! 203: $(LOBJ)/bclaimL.o: ! 204: $(MKSTUB) ! 205: ! 206: $(LOBJ)/bdoneL.o: ! 207: $(MKSTUB) ! 208: ! 209: $(LOBJ)/blkmvL.o: /lib/libc.a ! 210: $(X_LIB) ! 211: ! 212: $(LOBJ)/bootL.o: ! 213: $(MKSTUB) ! 214: ! 215: $(LOBJ)/breadL.o: ! 216: $(MKSTUB) ! 217: ! 218: $(LOBJ)/breleaseL.o: ! 219: $(MKSTUB) ! 220: ! 221: $(LOBJ)/clockedfL.o: clockedf.c ! 222: $(CC) $(CFLAGS) -c -o $@ $< ! 223: ! 224: $(LOBJ)/clrivecL.o: ! 225: $(MKSTUB) ! 226: ! 227: $(LOBJ)/clrqL.o: ! 228: $(MKSTUB) ! 229: ! 230: $(LOBJ)/cs_selfL.o: cs_self.s ! 231: as -gxo $@ $< ! 232: ! 233: $(LOBJ)/dblockL.o: ! 234: $(MKSTUB) ! 235: ! 236: $(LOBJ)/dcloseL.o: ! 237: $(MKSTUB) ! 238: ! 239: $(LOBJ)/deferL.o: defer.s ! 240: as -gxo $@ $< ! 241: ! 242: $(LOBJ)/devmsgL.o: ! 243: $(MKSTUB) ! 244: ! 245: $(LOBJ)/dioctlL.o: ! 246: $(MKSTUB) ! 247: ! 248: $(LOBJ)/dmagoL.o: ! 249: $(MKSTUB) ! 250: ! 251: $(LOBJ)/dmalockL.o: dmalock.c ! 252: $(CC) $(CFLAGS) -c -o $@ $< ! 253: ! 254: $(LOBJ)/dmaoffL.o: ! 255: $(MKSTUB) ! 256: ! 257: $(LOBJ)/dmaonL.o: ! 258: $(MKSTUB) ! 259: ! 260: $(LOBJ)/dmareqL.o: ! 261: $(MKSTUB) ! 262: ! 263: $(LOBJ)/dopenL.o: ! 264: $(MKSTUB) ! 265: ! 266: $(LOBJ)/dpollL.o: ! 267: $(MKSTUB) ! 268: ! 269: $(LOBJ)/dpowerL.o: ! 270: $(MKSTUB) ! 271: ! 272: $(LOBJ)/dreadL.o: ! 273: $(MKSTUB) ! 274: ! 275: $(LOBJ)/drvmapL.o: ! 276: $(MKSTUB) ! 277: ! 278: $(LOBJ)/dtimeL.o: ! 279: $(MKSTUB) ! 280: ! 281: $(LOBJ)/dwriteL.o: ! 282: $(MKSTUB) ! 283: ! 284: $(LOBJ)/fclearL.o: ! 285: $(MKSTUB) ! 286: ! 287: $(LOBJ)/fdiskL.o: ! 288: $(MKSTUB) ! 289: ! 290: $(LOBJ)/ffbyteL.o: ffbyte.s ! 291: as -gxo $@ $< ! 292: ! 293: $(LOBJ)/ffwordL.o: ffword.s ! 294: as -gxo $@ $< ! 295: ! 296: $(LOBJ)/ffmemL.o: ffmem.s ! 297: as -gxo $@ $< ! 298: ! 299: $(LOBJ)/fkcopyL.o: ! 300: $(MKSTUB) ! 301: ! 302: $(LOBJ)/fpxcopyL.o: ! 303: $(MKSTUB) ! 304: ! 305: $(LOBJ)/freeL.o: ! 306: $(MKSTUB) ! 307: ! 308: $(LOBJ)/fucopyL.o: ! 309: $(MKSTUB) ! 310: ! 311: $(LOBJ)/getcsL.o: getcs.s ! 312: as -gxo $@ $< ! 313: ! 314: $(LOBJ)/getqL.o: ! 315: $(MKSTUB) ! 316: ! 317: $(LOBJ)/getubdL.o: ! 318: $(MKSTUB) ! 319: ! 320: $(LOBJ)/getuwdL.o: ! 321: $(MKSTUB) ! 322: ! 323: $(LOBJ)/inbL.o: inb.s ! 324: as -gxo $@ $< ! 325: ! 326: $(LOBJ)/int11L.o: ! 327: $(MKSTUB) ! 328: ! 329: $(LOBJ)/iogetcL.o: ! 330: $(MKSTUB) ! 331: ! 332: $(LOBJ)/iomapvpL.o: ! 333: $(MKSTUB) ! 334: ! 335: $(LOBJ)/ioputcL.o: ! 336: $(MKSTUB) ! 337: ! 338: $(LOBJ)/ioreadL.o: ! 339: $(MKSTUB) ! 340: ! 341: $(LOBJ)/ioreqL.o: ! 342: $(MKSTUB) ! 343: ! 344: $(LOBJ)/iowriteL.o: ! 345: $(MKSTUB) ! 346: ! 347: $(LOBJ)/ipcaccessL.o: ! 348: $(MKSTUB) ! 349: ! 350: $(LOBJ)/kcallL.o: kcall.s ! 351: as -gxo $@ $< ! 352: ! 353: $(LOBJ)/kclearL.o: ! 354: $(MKSTUB) ! 355: ! 356: $(LOBJ)/kfcopyL.o: ! 357: $(MKSTUB) ! 358: ! 359: $(LOBJ)/kpcopyL.o: ! 360: $(MKSTUB) ! 361: ! 362: $(LOBJ)/kucopyL.o: ! 363: $(MKSTUB) ! 364: ! 365: $(LOBJ)/lockL.o: ! 366: $(MKSTUB) ! 367: ! 368: $(LOBJ)/lxdivL.o: /lib/libc.a ! 369: $(X_LIB) ! 370: ! 371: $(LOBJ)/lxmulL.o: /lib/libc.a ! 372: $(X_LIB) ! 373: ! 374: $(LOBJ)/lxremL.o: /lib/libc.a ! 375: $(X_LIB) ! 376: ! 377: $(LOBJ)/lxsgnL.o: /lib/libc.a ! 378: $(X_LIB) ! 379: ! 380: $(LOBJ)/memsetL.o: /lib/libc.a ! 381: $(X_LIB) ! 382: ! 383: $(LOBJ)/memtestL.o: ! 384: $(MKSTUB) ! 385: ! 386: $(LOBJ)/nmidisableL.o: ! 387: $(MKSTUB) ! 388: ! 389: $(LOBJ)/nmienableL.o: ! 390: $(MKSTUB) ! 391: ! 392: $(LOBJ)/nondsigL.o: ! 393: $(MKSTUB) ! 394: ! 395: $(LOBJ)/nonedevL.o: nonedev.c ! 396: $(CC) $(CFLAGS) -c -o $@ $< ! 397: ! 398: $(LOBJ)/nulldevL.o: nulldev.c ! 399: $(CC) $(CFLAGS) -c -o $@ $< ! 400: ! 401: $(LOBJ)/outbL.o: outb.s ! 402: as -gxo $@ $< ! 403: ! 404: $(LOBJ)/panicL.o: ! 405: $(MKSTUB) ! 406: ! 407: $(LOBJ)/pclearL.o: ! 408: $(MKSTUB) ! 409: ! 410: $(LOBJ)/plrcopyL.o: ! 411: $(MKSTUB) ! 412: ! 413: $(LOBJ)/pkcopyL.o: ! 414: $(MKSTUB) ! 415: ! 416: $(LOBJ)/pollopenL.o: ! 417: $(MKSTUB) ! 418: ! 419: $(LOBJ)/pollwakeL.o: ! 420: $(MKSTUB) ! 421: ! 422: $(LOBJ)/printfL.o: ! 423: $(MKSTUB) ! 424: ! 425: $(LOBJ)/prlcopyL.o: ! 426: $(MKSTUB) ! 427: ! 428: $(LOBJ)/ptovL.o: ! 429: $(MKSTUB) ! 430: ! 431: $(LOBJ)/pucopyL.o: ! 432: $(MKSTUB) ! 433: ! 434: $(LOBJ)/putcharL.o: ! 435: $(MKSTUB) ! 436: ! 437: $(LOBJ)/putqL.o: ! 438: $(MKSTUB) ! 439: ! 440: $(LOBJ)/putubdL.o: ! 441: $(MKSTUB) ! 442: ! 443: $(LOBJ)/putuwdL.o: ! 444: $(MKSTUB) ! 445: ! 446: $(LOBJ)/rucopyL.o: ! 447: $(MKSTUB) ! 448: ! 449: $(LOBJ)/s5_to_sgL.o: ! 450: $(MKSTUB) ! 451: ! 452: $(LOBJ)/s5_to_tcL.o: ! 453: $(MKSTUB) ! 454: ! 455: $(LOBJ)/sallocL.o: ! 456: $(MKSTUB) ! 457: ! 458: $(LOBJ)/sclearL.o: ! 459: $(MKSTUB) ! 460: ! 461: $(LOBJ)/sendsigL.o: ! 462: $(MKSTUB) ! 463: ! 464: $(LOBJ)/setivecL.o: setivec.c ! 465: $(CC) $(CFLAGS) -c -o $@ $< ! 466: ! 467: $(LOBJ)/sfreeL.o: ! 468: $(MKSTUB) ! 469: ! 470: $(LOBJ)/sfbyteL.o: sfbyte.s ! 471: as -gxo $@ $< ! 472: ! 473: $(LOBJ)/sfwordL.o: sfword.s ! 474: as -gxo $@ $< ! 475: ! 476: $(LOBJ)/sfmemL.o: sfmem.s ! 477: as -gxo $@ $< ! 478: ! 479: $(LOBJ)/sg_to_s5L.o: ! 480: $(MKSTUB) ! 481: ! 482: $(LOBJ)/sleepL.o: ! 483: $(MKSTUB) ! 484: ! 485: $(LOBJ)/slrcopyL.o: ! 486: $(MKSTUB) ! 487: ! 488: $(LOBJ)/sphiL.o: sphi.s ! 489: as -gxo $@ $< ! 490: ! 491: $(LOBJ)/splL.o: spl.s ! 492: as -gxo $@ $< ! 493: ! 494: $(LOBJ)/sploL.o: splo.s ! 495: as -gxo $@ $< ! 496: ! 497: $(LOBJ)/superL.o: ! 498: $(MKSTUB) ! 499: ! 500: $(LOBJ)/swapioL.o: ! 501: $(MKSTUB) ! 502: ! 503: $(LOBJ)/tc_to_s5L.o: ! 504: $(MKSTUB) ! 505: ! 506: $(LOBJ)/timeoutL.o: timeout.c ! 507: $(CC) $(CFLAGS) -c -o $@ $< ! 508: ! 509: $(LOBJ)/ttcloseL.o: ! 510: $(MKSTUB) ! 511: ! 512: $(LOBJ)/ttflushL.o: ! 513: $(MKSTUB) ! 514: ! 515: $(LOBJ)/tthupL.o: ! 516: $(MKSTUB) ! 517: ! 518: $(LOBJ)/ttinL.o: ! 519: $(MKSTUB) ! 520: ! 521: $(LOBJ)/ttioctlL.o: ! 522: $(MKSTUB) ! 523: ! 524: $(LOBJ)/ttopenL.o: ! 525: $(MKSTUB) ! 526: ! 527: $(LOBJ)/ttoutL.o: ! 528: $(MKSTUB) ! 529: ! 530: $(LOBJ)/ttpollL.o: ! 531: $(MKSTUB) ! 532: ! 533: $(LOBJ)/ttreadL.o: ! 534: $(MKSTUB) ! 535: ! 536: $(LOBJ)/ttsetgrpL.o: ! 537: $(MKSTUB) ! 538: ! 539: $(LOBJ)/ttsignalL.o: ! 540: $(MKSTUB) ! 541: ! 542: $(LOBJ)/ttstartL.o: ! 543: $(MKSTUB) ! 544: ! 545: $(LOBJ)/ttwriteL.o: ! 546: $(MKSTUB) ! 547: ! 548: $(LOBJ)/uexitL.o: ! 549: $(MKSTUB) ! 550: ! 551: $(LOBJ)/ufcopyL.o: ! 552: $(MKSTUB) ! 553: ! 554: $(LOBJ)/ukcopyL.o: ! 555: $(MKSTUB) ! 556: ! 557: $(LOBJ)/unlockL.o: ! 558: $(MKSTUB) ! 559: ! 560: $(LOBJ)/upcopyL.o: ! 561: $(MKSTUB) ! 562: ! 563: $(LOBJ)/urcopyL.o: ! 564: $(MKSTUB) ! 565: ! 566: $(LOBJ)/vprintL.o: ! 567: $(MKSTUB) ! 568: ! 569: $(LOBJ)/vrelseL.o: ! 570: $(MKSTUB) ! 571: ! 572: $(LOBJ)/vremapL.o: ! 573: $(MKSTUB) ! 574: ! 575: $(LOBJ)/vtopL.o: ! 576: $(MKSTUB) ! 577: ! 578: $(LOBJ)/vxdivL.o: /lib/libc.a ! 579: $(X_LIB) ! 580: ! 581: $(LOBJ)/vxmulL.o: /lib/libc.a ! 582: $(X_LIB) ! 583: ! 584: $(LOBJ)/vxremL.o: /lib/libc.a ! 585: $(X_LIB) ! 586: ! 587: $(LOBJ)/waitqL.o: ! 588: $(MKSTUB) ! 589: ! 590: $(LOBJ)/wakeupL.o: ! 591: $(MKSTUB) ! 592: ! 593: $(LOBJ)/fifo_closeL.o: ! 594: $(MKSTUB) ! 595: ! 596: $(LOBJ)/fifo_lenL.o: ! 597: $(MKSTUB) ! 598: ! 599: $(LOBJ)/fifo_openL.o: ! 600: $(MKSTUB) ! 601: ! 602: $(LOBJ)/fifo_readL.o: ! 603: $(MKSTUB) ! 604: ! 605: $(LOBJ)/fifo_rewindL.o: ! 606: $(MKSTUB) ! 607: ! 608: $(LOBJ)/fifo_writeL.o: ! 609: $(MKSTUB)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.