mirror of https://github.com/cc65/cc65.git
Compare commits
22 Commits
0faf13c98f
...
2b1aea79fc
Author | SHA1 | Date |
---|---|---|
Colin Leroy-Mira | 2b1aea79fc | |
Colin Leroy-Mira | 793aa48a49 | |
Colin Leroy-Mira | a823d90082 | |
mrdudz | b993d88339 | |
Bob Andrews | 25967e65b5 | |
Bob Andrews | a372ead4de | |
Bob Andrews | 081d18f7d7 | |
Bob Andrews | a293920fb3 | |
Bob Andrews | 60c75bdb54 | |
Sven Michael Klose | 1fe12f112e | |
Sven Michael Klose | a887b29ffb | |
acqn | 731f349b24 | |
acqn | 98767741ce | |
acqn | 9b2d27d1e1 | |
acqn | 23aa562094 | |
Bob Andrews | 5c3ff714ae | |
Sven Michael Klose | 294b034920 | |
Stefan | ab0eb4fe58 | |
Stefan | 8d4946b3f4 | |
Sven Michael Klose | 3a7bd53956 | |
Sven Michael Klose | 8173c850fd | |
Carlo Bramini | b04d79b1da |
|
@ -15,7 +15,7 @@ CPU_ISET_4510 = $0400
|
||||||
CPU_NONE = CPU_ISET_NONE
|
CPU_NONE = CPU_ISET_NONE
|
||||||
CPU_6502 = CPU_ISET_6502
|
CPU_6502 = CPU_ISET_6502
|
||||||
CPU_6502X = CPU_ISET_6502|CPU_ISET_6502X
|
CPU_6502X = CPU_ISET_6502|CPU_ISET_6502X
|
||||||
CPU_6502DTV = CPU_ISET_6502|CPU_ISET_6502X|CPU_ISET_6502DTV
|
CPU_6502DTV = CPU_ISET_6502|CPU_ISET_6502DTV
|
||||||
CPU_65SC02 = CPU_ISET_6502|CPU_ISET_65SC02
|
CPU_65SC02 = CPU_ISET_6502|CPU_ISET_65SC02
|
||||||
CPU_65C02 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02
|
CPU_65C02 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02
|
||||||
CPU_65816 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65816
|
CPU_65816 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65816
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
# Assembly program configuration for expanded VICs (>= +8K).
|
||||||
|
|
||||||
|
FEATURES {
|
||||||
|
STARTADDRESS: default = $1201;
|
||||||
|
}
|
||||||
|
SYMBOLS {
|
||||||
|
__LOADADDR__: type = import;
|
||||||
|
}
|
||||||
|
MEMORY {
|
||||||
|
ZP: file = "", start = $0002, size = $001A, define = yes;
|
||||||
|
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
||||||
|
MAIN: file = %O, start = %S, size = $8000 - %S;
|
||||||
|
}
|
||||||
|
SEGMENTS {
|
||||||
|
ZEROPAGE: load = ZP, type = zp, optional = yes;
|
||||||
|
LOADADDR: load = LOADADDR, type = ro;
|
||||||
|
CODE: load = MAIN, type = ro;
|
||||||
|
RODATA: load = MAIN, type = ro;
|
||||||
|
DATA: load = MAIN, type = rw;
|
||||||
|
BSS: load = MAIN, type = bss, optional = yes, define = yes;
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
# Assembly program configuration for expanded VICs (+3K only).
|
||||||
|
|
||||||
|
FEATURES {
|
||||||
|
STARTADDRESS: default = $0401;
|
||||||
|
}
|
||||||
|
SYMBOLS {
|
||||||
|
__LOADADDR__: type = import;
|
||||||
|
}
|
||||||
|
MEMORY {
|
||||||
|
ZP: file = "", start = $0002, size = $001A, define = yes;
|
||||||
|
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
||||||
|
MAIN: file = %O, start = %S, size = $1E00 - %S;
|
||||||
|
}
|
||||||
|
SEGMENTS {
|
||||||
|
ZEROPAGE: load = ZP, type = zp, optional = yes;
|
||||||
|
LOADADDR: load = LOADADDR, type = ro;
|
||||||
|
CODE: load = MAIN, type = ro;
|
||||||
|
RODATA: load = MAIN, type = ro;
|
||||||
|
DATA: load = MAIN, type = rw;
|
||||||
|
BSS: load = MAIN, type = bss, optional = yes, define = yes;
|
||||||
|
}
|
|
@ -1,3 +1,5 @@
|
||||||
|
# Assembly program configuration for unexpanded VICs.
|
||||||
|
|
||||||
FEATURES {
|
FEATURES {
|
||||||
STARTADDRESS: default = $1001;
|
STARTADDRESS: default = $1001;
|
||||||
}
|
}
|
||||||
|
@ -7,7 +9,7 @@ SYMBOLS {
|
||||||
MEMORY {
|
MEMORY {
|
||||||
ZP: file = "", start = $0002, size = $001A, define = yes;
|
ZP: file = "", start = $0002, size = $001A, define = yes;
|
||||||
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
||||||
MAIN: file = %O, start = %S, size = $0DF3 - %S;
|
MAIN: file = %O, start = %S, size = $1E00 - %S;
|
||||||
}
|
}
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp, optional = yes;
|
ZEROPAGE: load = ZP, type = zp, optional = yes;
|
||||||
|
|
|
@ -780,6 +780,7 @@ communication, see also <tt>testcode/lib/ser-test.c</tt>.
|
||||||
<item><ref id="strqtok" name="strqtok">
|
<item><ref id="strqtok" name="strqtok">
|
||||||
<item><ref id="strrchr" name="strrchr">
|
<item><ref id="strrchr" name="strrchr">
|
||||||
<item><ref id="strspn" name="strspn">
|
<item><ref id="strspn" name="strspn">
|
||||||
|
<item><ref id="strcasestr" name="strcasestr">
|
||||||
<item><ref id="strstr" name="strstr">
|
<item><ref id="strstr" name="strstr">
|
||||||
<item><ref id="strtok" name="strtok">
|
<item><ref id="strtok" name="strtok">
|
||||||
<item><ref id="strxfrm" name="strxfrm">
|
<item><ref id="strxfrm" name="strxfrm">
|
||||||
|
@ -7899,22 +7900,47 @@ be used in presence of a prototype.
|
||||||
</quote>
|
</quote>
|
||||||
|
|
||||||
|
|
||||||
<sect1>strstr<label id="strstr"><p>
|
<sect1>strcasestr<label id="strcasestr"><p>
|
||||||
|
|
||||||
<quote>
|
<quote>
|
||||||
<descrip>
|
<descrip>
|
||||||
<tag/Function/Find a substring.
|
<tag/Function/Find a substring, case-insensitive.
|
||||||
<tag/Header/<tt/<ref id="string.h" name="string.h">/
|
<tag/Header/<tt/<ref id="string.h" name="string.h">/
|
||||||
<tag/Declaration/<tt/char* __fastcall__ strstr (const char* str, const char* substr);/
|
<tag/Declaration/<tt/char* __fastcall__ strcasestr (const char* str, const char* substr);/
|
||||||
<tag/Description/<tt/strstr/ searches for the first occurrence of the string
|
<tag/Description/<tt/strcasestr/ searches for the first occurrence of the string
|
||||||
<tt/substr/ within <tt/str/. If found, it returns a pointer to the copy,
|
<tt/substr/ within <tt/str/. If found, it returns a pointer to the start of the
|
||||||
otherwise it returns <tt/NULL/.
|
match in <tt/str/, otherwise it returns <tt/NULL/.
|
||||||
<tag/Notes/<itemize>
|
<tag/Notes/<itemize>
|
||||||
<item>The function is only available as fastcall function, so it may only
|
<item>The function is only available as fastcall function, so it may only
|
||||||
be used in presence of a prototype.
|
be used in presence of a prototype.
|
||||||
</itemize>
|
</itemize>
|
||||||
<tag/Availability/ISO 9899
|
<tag/Availability/ISO 9899
|
||||||
<tag/See also/
|
<tag/See also/
|
||||||
|
<ref id="strstr" name="strstr">,
|
||||||
|
<ref id="strcspn" name="strcspn">,
|
||||||
|
<ref id="strspn" name="strspn">
|
||||||
|
<tag/Example/None.
|
||||||
|
</descrip>
|
||||||
|
</quote>
|
||||||
|
|
||||||
|
|
||||||
|
<sect1>strstr<label id="strstr"><p>
|
||||||
|
|
||||||
|
<quote>
|
||||||
|
<descrip>
|
||||||
|
<tag/Function/Find a substring, case-sensitive.
|
||||||
|
<tag/Header/<tt/<ref id="string.h" name="string.h">/
|
||||||
|
<tag/Declaration/<tt/char* __fastcall__ strstr (const char* str, const char* substr);/
|
||||||
|
<tag/Description/<tt/strstr/ searches for the first occurrence of the string
|
||||||
|
<tt/substr/ within <tt/str/. If found, it returns a pointer to the start of the
|
||||||
|
match in <tt/str/, otherwise it returns <tt/NULL/.
|
||||||
|
<tag/Notes/<itemize>
|
||||||
|
<item>The function is only available as fastcall function, so it may only
|
||||||
|
be used in presence of a prototype.
|
||||||
|
</itemize>
|
||||||
|
<tag/Availability/ISO 9899
|
||||||
|
<tag/See also/
|
||||||
|
<ref id="strcasestr" name="strcasestr">,
|
||||||
<ref id="strcspn" name="strcspn">,
|
<ref id="strcspn" name="strcspn">,
|
||||||
<ref id="strspn" name="strspn">
|
<ref id="strspn" name="strspn">
|
||||||
<tag/Example/None.
|
<tag/Example/None.
|
||||||
|
|
|
@ -0,0 +1,95 @@
|
||||||
|
;
|
||||||
|
; Ullrich von Bassewitz, 11.12.1998
|
||||||
|
;
|
||||||
|
; char* strcasestr (const char* haystack, const char* needle);
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _strcasestr
|
||||||
|
.import popptr1, return0, tolowerdirect
|
||||||
|
.importzp ptr1, ptr2, ptr3, ptr4, tmp1, tmp2, tmp3, tmp4
|
||||||
|
.include "ctype.inc"
|
||||||
|
|
||||||
|
.segment "LOWCODE"
|
||||||
|
|
||||||
|
_strcasestr:
|
||||||
|
sta ptr2 ; Save needle
|
||||||
|
stx ptr2+1
|
||||||
|
sta ptr4 ; Setup temp copy for later
|
||||||
|
|
||||||
|
jsr popptr1 ; Get haystack to ptr1
|
||||||
|
|
||||||
|
; If needle is empty, return haystack
|
||||||
|
|
||||||
|
; ldy #$00 Y=0 guaranteed by popptr1
|
||||||
|
lda (ptr2),y ; Get first byte of needle
|
||||||
|
beq @Found ; Needle is empty --> we're done
|
||||||
|
|
||||||
|
; Search for the beginning of the string (this is not an optimal search
|
||||||
|
; strategy [in fact, it's pretty dumb], but it's simple to implement).
|
||||||
|
|
||||||
|
jsr tolowerdirect ; Lowercase
|
||||||
|
sta tmp1 ; Save start of needle
|
||||||
|
@L1: lda (ptr1),y ; Get next char from haystack
|
||||||
|
beq @NotFound ; Jump if end
|
||||||
|
|
||||||
|
jsr tolowerdirect ; Lowercase
|
||||||
|
cmp tmp1 ; Start of needle found?
|
||||||
|
beq @L2 ; Jump if so
|
||||||
|
iny ; Next char
|
||||||
|
bne @L1
|
||||||
|
inc ptr1+1 ; Bump high byte
|
||||||
|
bne @L1 ; Branch always
|
||||||
|
|
||||||
|
; We found the start of needle in haystack
|
||||||
|
|
||||||
|
@L2: tya ; Get offset
|
||||||
|
clc
|
||||||
|
adc ptr1
|
||||||
|
sta ptr1 ; Make ptr1 point to start
|
||||||
|
bcc @L3
|
||||||
|
inc ptr1+1
|
||||||
|
|
||||||
|
; ptr1 points to the start of needle in haystack now. Setup temporary pointers for the
|
||||||
|
; search. The low byte of ptr4 is already set.
|
||||||
|
|
||||||
|
@L3: sta ptr3
|
||||||
|
lda ptr1+1
|
||||||
|
sta ptr3+1
|
||||||
|
lda ptr2+1
|
||||||
|
sta ptr4+1
|
||||||
|
ldy #1 ; First char is identical, so start on second
|
||||||
|
|
||||||
|
; Do the compare
|
||||||
|
|
||||||
|
@L4: lda (ptr4),y ; Get char from needle
|
||||||
|
beq @Found ; Jump if end of needle (-> found)
|
||||||
|
|
||||||
|
jsr tolowerdirect ; Lowercase
|
||||||
|
sta tmp2
|
||||||
|
|
||||||
|
lda (ptr3),y ; Compare with haystack
|
||||||
|
|
||||||
|
jsr tolowerdirect ; Lowercase
|
||||||
|
cmp tmp2
|
||||||
|
bne @L5 ; Jump if not equal
|
||||||
|
iny ; Next char
|
||||||
|
bne @L4
|
||||||
|
inc ptr3+1
|
||||||
|
inc ptr4+1 ; Bump hi byte of pointers
|
||||||
|
bne @L4 ; Next char (branch always)
|
||||||
|
|
||||||
|
; The strings did not compare equal, search next start of needle
|
||||||
|
|
||||||
|
@L5: ldy #1 ; Start after this char
|
||||||
|
bne @L1 ; Branch always
|
||||||
|
|
||||||
|
; We found the start of needle
|
||||||
|
|
||||||
|
@Found: lda ptr1
|
||||||
|
ldx ptr1+1
|
||||||
|
rts
|
||||||
|
|
||||||
|
; We reached end of haystack without finding needle
|
||||||
|
|
||||||
|
@NotFound:
|
||||||
|
jmp return0 ; return NULL
|
|
@ -4,20 +4,11 @@
|
||||||
; char* strstr (const char* haystack, const char* needle);
|
; char* strstr (const char* haystack, const char* needle);
|
||||||
;
|
;
|
||||||
|
|
||||||
.export _strstr, _strcasestr
|
.export _strstr
|
||||||
.import popptr1, return0, tolowerdirect
|
.import popptr1
|
||||||
.importzp ptr1, ptr2, ptr3, ptr4, tmp1, tmp2
|
.importzp ptr1, ptr2, ptr3, ptr4, tmp1
|
||||||
|
|
||||||
maybe_lower: ; Lowercase char in A if needed
|
|
||||||
jmp tolowerdirect ; patched on entry with either JMP or RTS
|
|
||||||
|
|
||||||
_strstr:
|
_strstr:
|
||||||
ldy #$60 ; RTS
|
|
||||||
bne :+
|
|
||||||
_strcasestr:
|
|
||||||
ldy #$4C ; JMP absolute
|
|
||||||
: sty maybe_lower
|
|
||||||
|
|
||||||
sta ptr2 ; Save needle
|
sta ptr2 ; Save needle
|
||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
sta ptr4 ; Setup temp copy for later
|
sta ptr4 ; Setup temp copy for later
|
||||||
|
@ -33,12 +24,9 @@ _strcasestr:
|
||||||
; Search for the beginning of the string (this is not an optimal search
|
; Search for the beginning of the string (this is not an optimal search
|
||||||
; strategy [in fact, it's pretty dumb], but it's simple to implement).
|
; strategy [in fact, it's pretty dumb], but it's simple to implement).
|
||||||
|
|
||||||
jsr maybe_lower ; Lowercase if needed
|
|
||||||
sta tmp1 ; Save start of needle
|
sta tmp1 ; Save start of needle
|
||||||
@L1: lda (ptr1),y ; Get next char from haystack
|
@L1: lda (ptr1),y ; Get next char from haystack
|
||||||
beq @NotFound ; Jump if end
|
beq @NotFound ; Jump if end
|
||||||
|
|
||||||
jsr maybe_lower ; Lowercase if needed
|
|
||||||
cmp tmp1 ; Start of needle found?
|
cmp tmp1 ; Start of needle found?
|
||||||
beq @L2 ; Jump if so
|
beq @L2 ; Jump if so
|
||||||
iny ; Next char
|
iny ; Next char
|
||||||
|
@ -55,7 +43,7 @@ _strcasestr:
|
||||||
bcc @L3
|
bcc @L3
|
||||||
inc ptr1+1
|
inc ptr1+1
|
||||||
|
|
||||||
; ptr1 points to the start of needle in haystack now. Setup temporary pointers for the
|
; ptr1 points to the start of needle now. Setup temporary pointers for the
|
||||||
; search. The low byte of ptr4 is already set.
|
; search. The low byte of ptr4 is already set.
|
||||||
|
|
||||||
@L3: sta ptr3
|
@L3: sta ptr3
|
||||||
|
@ -69,14 +57,7 @@ _strcasestr:
|
||||||
|
|
||||||
@L4: lda (ptr4),y ; Get char from needle
|
@L4: lda (ptr4),y ; Get char from needle
|
||||||
beq @Found ; Jump if end of needle (-> found)
|
beq @Found ; Jump if end of needle (-> found)
|
||||||
|
cmp (ptr3),y ; Compare with haystack
|
||||||
jsr maybe_lower ; Lowercase if needed
|
|
||||||
sta tmp2
|
|
||||||
|
|
||||||
lda (ptr3),y ; Compare with haystack
|
|
||||||
|
|
||||||
jsr maybe_lower ; Lowercase if needed
|
|
||||||
cmp tmp2
|
|
||||||
bne @L5 ; Jump if not equal
|
bne @L5 ; Jump if not equal
|
||||||
iny ; Next char
|
iny ; Next char
|
||||||
bne @L4
|
bne @L4
|
||||||
|
@ -98,4 +79,6 @@ _strcasestr:
|
||||||
; We reached end of haystack without finding needle
|
; We reached end of haystack without finding needle
|
||||||
|
|
||||||
@NotFound:
|
@NotFound:
|
||||||
jmp return0 ; return NULL
|
lda #$00 ; return NULL
|
||||||
|
tax
|
||||||
|
rts
|
||||||
|
|
|
@ -9,11 +9,21 @@
|
||||||
.import __MAIN_START__
|
.import __MAIN_START__
|
||||||
.import startup
|
.import startup
|
||||||
|
|
||||||
|
.macpack cpu
|
||||||
|
|
||||||
.segment "EXEHDR"
|
.segment "EXEHDR"
|
||||||
|
|
||||||
.byte $73, $69, $6D, $36, $35 ; 'sim65'
|
.byte $73, $69, $6D, $36, $35 ; 'sim65'
|
||||||
.byte 2 ; header version
|
.byte 2 ; header version
|
||||||
.byte .defined(__SIM65C02__) ; CPU type
|
.if (.cpu .bitand ::CPU_ISET_6502X)
|
||||||
|
.byte 2
|
||||||
|
.elseif (.cpu .bitand ::CPU_ISET_65C02)
|
||||||
|
.byte 1
|
||||||
|
.elseif (.cpu .bitand ::CPU_ISET_6502)
|
||||||
|
.byte 0
|
||||||
|
.else
|
||||||
|
.error Unknow CPU type.
|
||||||
|
.endif
|
||||||
.byte sp ; sp address
|
.byte sp ; sp address
|
||||||
.addr __MAIN_START__ ; load address
|
.addr __MAIN_START__ ; load address
|
||||||
.addr startup ; reset address
|
.addr startup ; reset address
|
||||||
|
|
1048
src/cc65/declare.c
1048
src/cc65/declare.c
File diff suppressed because it is too large
Load Diff
|
@ -3272,7 +3272,7 @@ static void parsesub (ExprDesc* Expr)
|
||||||
/* The right hand side is constant. Check left hand side. */
|
/* The right hand side is constant. Check left hand side. */
|
||||||
if (ED_IsQuasiConst (Expr)) {
|
if (ED_IsQuasiConst (Expr)) {
|
||||||
/* We can't do all 'ptr1 - ptr2' constantly at the moment */
|
/* We can't do all 'ptr1 - ptr2' constantly at the moment */
|
||||||
if (Expr->Sym == Expr2.Sym) {
|
if (ED_GetLoc (Expr) == ED_GetLoc (&Expr2) && Expr->Sym == Expr2.Sym) {
|
||||||
Expr->IVal = (Expr->IVal - Expr2.IVal) / rscale;
|
Expr->IVal = (Expr->IVal - Expr2.IVal) / rscale;
|
||||||
/* Get rid of unneeded flags etc. */
|
/* Get rid of unneeded flags etc. */
|
||||||
ED_MakeConstAbsInt (Expr, Expr->IVal);
|
ED_MakeConstAbsInt (Expr, Expr->IVal);
|
||||||
|
|
|
@ -231,9 +231,11 @@ static int findToken (const char * const *tokenTbl, const char *token)
|
||||||
/* takes as input table of tokens and token, returns position in table or -1 if not found */
|
/* takes as input table of tokens and token, returns position in table or -1 if not found */
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; tokenTbl[i][0]; i++) {
|
if (token != NULL) {
|
||||||
if (strcmp (tokenTbl[i], token) == 0) {
|
for (i = 0; tokenTbl[i][0]; i++) {
|
||||||
return i;
|
if (strcmp (tokenTbl[i], token) == 0) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2703
src/sim65/6502.c
2703
src/sim65/6502.c
File diff suppressed because it is too large
Load Diff
|
@ -47,7 +47,8 @@
|
||||||
/* Supported CPUs */
|
/* Supported CPUs */
|
||||||
typedef enum CPUType {
|
typedef enum CPUType {
|
||||||
CPU_6502,
|
CPU_6502,
|
||||||
CPU_65C02
|
CPU_65C02,
|
||||||
|
CPU_6502X
|
||||||
} CPUType;
|
} CPUType;
|
||||||
|
|
||||||
/* Current CPU */
|
/* Current CPU */
|
||||||
|
|
|
@ -177,10 +177,16 @@ static unsigned char ReadProgramFile (void)
|
||||||
|
|
||||||
/* Get the CPU type from the file header */
|
/* Get the CPU type from the file header */
|
||||||
if ((Val = fgetc(F)) != EOF) {
|
if ((Val = fgetc(F)) != EOF) {
|
||||||
if (Val != CPU_6502 && Val != CPU_65C02) {
|
switch (Val) {
|
||||||
|
case CPU_6502:
|
||||||
|
case CPU_65C02:
|
||||||
|
case CPU_6502X:
|
||||||
|
CPU = Val;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
Error ("'%s': Invalid CPU type", ProgramFile);
|
Error ("'%s': Invalid CPU type", ProgramFile);
|
||||||
}
|
}
|
||||||
CPU = Val;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the address of sp from the file header */
|
/* Get the address of sp from the file header */
|
||||||
|
|
|
@ -12,23 +12,25 @@ endif
|
||||||
|
|
||||||
WORKDIR = ../testwrk/asm
|
WORKDIR = ../testwrk/asm
|
||||||
|
|
||||||
SUBDIRS = cpudetect opcodes listing val err misc
|
|
||||||
|
|
||||||
.PHONY: all continue mostlyclean clean
|
.PHONY: all continue mostlyclean clean
|
||||||
|
|
||||||
all: mostlyclean continue
|
all: mostlyclean continue
|
||||||
|
|
||||||
define CALL_template
|
continue: mostlyclean
|
||||||
|
@$(MAKE) -C cpudetect all
|
||||||
|
@$(MAKE) -C opcodes all
|
||||||
|
@$(MAKE) -C listing all
|
||||||
|
@$(MAKE) -C val all
|
||||||
|
@$(MAKE) -C err all
|
||||||
|
@$(MAKE) -C misc all
|
||||||
|
|
||||||
continue::
|
mostlyclean:
|
||||||
@$(MAKE) -C $1 all
|
@$(MAKE) -C cpudetect clean
|
||||||
|
@$(MAKE) -C opcodes clean
|
||||||
mostlyclean::
|
@$(MAKE) -C listing clean
|
||||||
@$(MAKE) -C $1 clean
|
@$(MAKE) -C val clean
|
||||||
|
@$(MAKE) -C err clean
|
||||||
endef
|
@$(MAKE) -C misc clean
|
||||||
|
|
||||||
$(foreach subdir,$(SUBDIRS),$(eval $(call CALL_template,$(subdir))))
|
|
||||||
|
|
||||||
clean: mostlyclean
|
clean: mostlyclean
|
||||||
@$(call RMDIR,$(WORKDIR))
|
@$(call RMDIR,$(WORKDIR))
|
||||||
|
|
Loading…
Reference in New Issue