Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ability to build without needing the original archive #58

Merged
merged 6 commits into from
Jan 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 31 additions & 13 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
NON_MATCHING ?= 0
COMPARE ?= 1
hensldm marked this conversation as resolved.
Show resolved Hide resolved

# One of:
# libgultra_rom, libgultra_d, libgultra
Expand Down Expand Up @@ -49,7 +49,7 @@ CPPFLAGS += -D_FINALROM
endif

SRC_DIRS := $(shell find src -type d)
ASM_DIRS := $(shell find asm -type d -not -path "asm/non_matchings*")
ASM_DIRS := $(shell find asm -type d)
C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c))
S_FILES := $(foreach dir,$(SRC_DIRS) $(ASM_DIRS),$(wildcard $(dir)/*.s))

Expand All @@ -71,7 +71,7 @@ S_MARKER_FILES := $(S_O_FILES:.o=.marker)
S_MARKER_FILES := $(filter-out $(MDEBUG_FILES),$(S_MARKER_FILES))
MARKER_FILES := $(C_MARKER_FILES) $(S_MARKER_FILES)

ifneq ($(NON_MATCHING),1)
ifneq ($(COMPARE),0)
COMPARE_OBJ = cmp $(BASE_DIR)/$(@F:.marker=.o) $(@:.marker=.o) && echo "$(@:.marker=.o): OK"
COMPARE_AR = cmp $(BASE_AR) $@ && echo "$@: OK"
ifeq ($(COMPILER),ido)
Expand All @@ -88,7 +88,7 @@ endif
BASE_OBJS := $(wildcard $(BASE_DIR)/*.o)

# Check to make sure the current version has been set up
ifneq ($(NON_MATCHING),1)
ifneq ($(COMPARE),0)
ifeq ($(BASE_OBJS),)
# Ignore this check if the user is currently running setup, clean or distclean
ifeq ($(filter $(MAKECMDGOALS),setup clean distclean),)
Expand All @@ -97,8 +97,15 @@ endif
endif
endif

AR_OBJECTS := $(shell cat base/$(VERSION)/$(TARGET).txt)
# If the version and target doesn't have a text file yet, resort back to using the base archive to get objects
ifeq ($(AR_OBJECTS),)
AR_OBJECTS := $(shell ar t $(BASE_AR))
endif


# Try to find a file corresponding to an archive file in any of src/ asm/ or the base directory, prioritizing src then asm then the original file
AR_ORDER = $(foreach f,$(shell $(AR) t $(BASE_AR)),$(shell find $(BUILD_DIR)/src $(BUILD_DIR)/asm $(BASE_DIR) -iname $f -type f -print -quit))
AR_ORDER = $(foreach f,$(AR_OBJECTS),$(shell find $(BUILD_DIR)/src $(BUILD_DIR)/asm $(BASE_DIR) -iname $f -type f -print -quit))
MATCHED_OBJS = $(filter-out $(BASE_DIR)/%,$(AR_ORDER))
UNMATCHED_OBJS = $(filter-out $(MATCHED_OBJS),$(AR_ORDER))
NUM_OBJS = $(words $(AR_ORDER))
Expand All @@ -112,7 +119,7 @@ all: $(BUILD_AR)

$(BUILD_AR): $(MARKER_FILES)
$(AR_OLD) rcs $@ $(AR_ORDER)
ifneq ($(NON_MATCHING),1)
ifneq ($(COMPARE),0)
# patch archive creation time and individual files' ownership & permissions
dd bs=1 skip=24 seek=24 count=12 conv=notrunc if=$(BASE_AR) of=$@ status=none
python3 tools/patch_ar_meta.py $@ $(BASE_AR) $(PATCH_AR_FLAGS)
Expand All @@ -129,15 +136,17 @@ distclean:

setup:
$(MAKE) -C tools
ifneq ($(COMPARE),0)
cd $(BASE_DIR) && $(AR) xo $(WORKING_DIR)/$(BASE_AR)
chmod -R +rw $(BASE_DIR)
ifeq ($(COMPILER),ido)
export CROSS=$(CROSS) && ./tools/strip_debug.sh $(BASE_DIR)
endif
endif

$(BUILD_DIR)/$(BASE_DIR)/%.marker: $(BASE_DIR)/%.o
cp $< $(@:.marker=.o)
ifneq ($(NON_MATCHING),1)
ifneq ($(COMPARE),0)
# change file timestamps to match original
@touch -r $(BASE_DIR)/$(@F:.marker=.o) $(@:.marker=.o)
@$(COMPARE_OBJ)
Expand All @@ -157,7 +166,7 @@ $(BUILD_DIR)/src/voice/%.marker: CC := tools/compile_sjis.py -D__CC=$(WORKING_DI

$(C_MARKER_FILES): $(BUILD_DIR)/%.marker: %.c
cd $(<D) && $(WORKING_DIR)/$(CC) $(CFLAGS) $(MIPS_VERSION) $(CPPFLAGS) $(OPTFLAGS) $(<F) $(IINC) -o $(WORKING_DIR)/$(@:.marker=.o)
ifneq ($(NON_MATCHING),1)
ifneq ($(COMPARE),0)
# check if this file is in the archive; patch corrupted bytes and change file timestamps to match original if so
@$(if $(findstring $(BASE_DIR)/$(@F:.marker=.o), $(BASE_OBJS)), \
python3 tools/fix_objfile.py $(@:.marker=.o) $(BASE_DIR)/$(@F:.marker=.o) $(STRIP) && \
Expand All @@ -166,12 +175,15 @@ ifneq ($(NON_MATCHING),1)
echo "Object file $(@F:.marker=.o) is not in the current archive" \
)
# create or update the marker file
@touch $@
else
tools/set_o32abi_bit.py $(WORKING_DIR)/$(@:.marker=.o)
$(CROSS)strip $(WORKING_DIR)/$(@:.marker=.o) -N asdasdasdasd
endif
@touch $@

$(S_MARKER_FILES): $(BUILD_DIR)/%.marker: %.s
cd $(<D) && $(WORKING_DIR)/$(CC) $(ASFLAGS) $(MIPS_VERSION) $(CPPFLAGS) $(ASOPTFLAGS) $(<F) $(IINC) -o $(WORKING_DIR)/$(@:.marker=.o)
ifneq ($(NON_MATCHING),1)
ifneq ($(COMPARE),0)
# check if this file is in the archive; patch corrupted bytes and change file timestamps to match original if so
@$(if $(findstring $(BASE_DIR)/$(@F:.marker=.o), $(BASE_OBJS)), \
python3 tools/fix_objfile.py $(@:.marker=.o) $(BASE_DIR)/$(@F:.marker=.o) $(STRIP) && \
Expand All @@ -180,16 +192,19 @@ ifneq ($(NON_MATCHING),1)
echo "Object file $(@F:.marker=.o) is not in the current archive" \
)
# create or update the marker file
@touch $@
else
tools/set_o32abi_bit.py $(WORKING_DIR)/$(@:.marker=.o)
$(CROSS)strip $(WORKING_DIR)/$(@:.marker=.o) -N asdasdasdasd
endif
@touch $@

# Rule for building files that require specific file paths in the mdebug section
$(MDEBUG_FILES): $(BUILD_DIR)/src/%.marker: src/%.s
cp $(<:.marker=.s) $(dir $@)
mkdir -p $(@:.marker=)
export USR_INCLUDE=$(WORKING_DIR)/include && cd $(@:.marker=) && $(WORKING_DIR)/$(CC) $(ASFLAGS) $(CPPFLAGS) ../$(<F) -I/usr/include -o $(notdir $(<:.s=.o))
mv $(@:.marker=)/$(<F:.s=.o) $(@:.marker=)/..
ifneq ($(NON_MATCHING),1)
ifneq ($(COMPARE),0)
# check if this file is in the archive; patch corrupted bytes and change file timestamps to match original if so
@$(if $(findstring $(BASE_DIR)/$(@F:.marker=.o), $(BASE_OBJS)), \
python3 tools/fix_objfile.py $(@:.marker=.o) $(BASE_DIR)/$(@F:.marker=.o) && \
Expand All @@ -198,8 +213,11 @@ ifneq ($(NON_MATCHING),1)
echo "Object file $(@F:.marker=.o) is not in the current archive" \
)
# create or update the marker file
@touch $@
else
tools/set_o32abi_bit.py $(WORKING_DIR)/$(@:.marker=.o)
$(CROSS)strip $(WORKING_DIR)/$(@:.marker=.o) -N asdasdasdasd
endif
@touch $@

# Disable built-in rules
.SUFFIXES:
Expand Down
10 changes: 8 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Currently this repo supports building the following versions:

After cloning the repo, put a copy of the target archive(s) in their correct version folder in `base/`.
For example, if your target archive is libgultra_rom.a 2.0L then you'd place it in `base/L/`.
If you will be building without a target archive by setting `NON_MATCHING` then you can skip this step.
If you will be building without a target archive by setting `COMPARE=0` then you can skip this step.

## Build dependencies

Expand Down Expand Up @@ -56,4 +56,10 @@ For example, if building the 2.0L PC archive you'd do the following:

Every target flag combination requires separate a setup command.

If building without a target archive using `NON_MATCHING` then you can skip the setup command.
If building without an target archive, than you can use `COMPARE=0` like the the following:

- `make VERSION=L TARGET=libgultra_rom COMPARE=0 setup`
- `make VERSION=L TARGET=libgultra_rom COMPARE=0`

note that running setup without `COMPARE=0` and no archive will result in an error,
and only needs to be run once instead of per target flag combination
Empty file removed base/I/.gitkeep
Empty file.
1 change: 1 addition & 0 deletions base/I/libgultra.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
gt.o dumpturbo.o sqrtf.o libm_vals.o align.o cosf.o coss.o frustum.o lookat.o lookatref.o lookathil.o lookatstereo.o mtxutil.o mtxcatf.o mtxcatl.o normalize.o ortho.o perspective.o rotate.o rotaterpy.o scale.o sinf.o sins.o translate.o loadtextureblockmipmap.o guloadtile_bug.o position.o poslight.o poslighthil.o random.o usprite.o us2dex.o us2dex_emu.o parse_rdp.o parse_gbi.o dump_gbi.o parse_string.o exceptasm.o getcause.o getcompare.o getconfig.o getcount.o getfpccsr.o getsr.o getintmask.o gettlbasid.o gettlbhi.o gettlblo0.o gettlblo1.o gettlbpagemask.o invaldcache.o invalicache.o interrupt.o maptlb.o parameters.o probetlb.o setintmask.o setcause.o setcompare.o setconfig.o setcount.o setfpccsr.o setsr.o settlbasid.o unmaptlb.o unmaptlball.o writebackdcache.o writebackdcacheall.o maptlbrdb.o errorasm.o assertbreak.o atomic.o createmesgqueue.o createthread.o destroythread.o getactivequeue.o getthreadid.o getthreadpri.o gettime.o initialize.o jammesg.o kdebugserver.o physicaltovirtual.o recvmesg.o resetglobalintmask.o sendmesg.o seteventmesg.o setglobalintmask.o sethwinterrupt.o setthreadpri.o settime.o settimer.o startthread.o stopthread.o stoptimer.o syncputchars.o thread.o timerintr.o virtualtophysical.o yieldthread.o getcurrfaultthread.o getnextfaultthread.o initrdb.o rdbsend.o getmemsize.o error.o seterrorhandler.o assert.o exit.o profile.o readhost.o testhost.o writehost.o ackramromread.o ackramromwrite.o host_ptn64.o drvrnew.o load.o auxbus.o bnkf.o env.o event.o filter.o mainbus.o resample.o reverb.o save.o seq.o sl.o heapcheck.o heapinit.o heapalloc.o copy.o seqpdelete.o seqpgetfxmix.o seqpgetpan.o seqpgetchlvol.o seqpgetpriority.o seqpgetprogram.o seqpgetseq.o seqpgettempo.o seqpgetvol.o seqpgetstate.o seqploop.o seqpplay.o seqpsendmidi.o seqpsetbank.o seqpsetfxmix.o seqpsetpan.o seqpsetchlvol.o seqpsetpriority.o seqpsetprogram.o seqpsetseq.o seqpsettempo.o seqpsetvol.o seqpstop.o seqplayer.o cseq.o cspdelete.o cspgetfxmix.o cspgetpan.o cspgetchlvol.o cspgetpriority.o cspgetprogram.o cspgetseq.o cspgettempo.o cspgetvol.o cspgetstate.o cspplay.o cspsendmidi.o cspsetbank.o cspsetfxmix.o cspsetpan.o cspsetchlvol.o cspsetpriority.o cspsetprogram.o cspsetseq.o cspsettempo.o cspsetvol.o cspstop.o csplayer.o sndplayer.o sndpdelete.o sndpallocate.o sndpdeallocate.o sndpsetsound.o sndpplay.o sndpplayat.o sndpgetsound.o sndpstop.o sndpgetstate.o sndpsetpitch.o sndpsetpriority.o sndpsetvol.o sndpsetpan.o sndpsetfxmix.o synthesizer.o syndelete.o synaddplayer.o synremoveplayer.o synfreevoice.o synallocvoice.o synstopvoice.o synstartvoice.o synstartvoiceparam.o synsetpitch.o synsetvol.o synsetfxmix.o synsetpan.o syngetpriority.o synsetpriority.o synallocfx.o synfreefx.o syngetfxref.o synsetfxparam.o cents2ratio.o parse_abi.o color.o clearattribute.o hide.o spscale.o setattribute.o show.o sprite.o ai.o aigetlen.o aigetstat.o aisetfreq.o aisetnextbuf.o dp.o dpgetstat.o dpsetstat.o dpsetnextbuf.o dpctr.o sp.o spgetstat.o spsetstat.o spsetpc.o sprawread.o sprawwrite.o sprawdma.o sptask.o sptaskyield.o sptaskyielded.o vi.o vigetcurrcontext.o vigetfield.o vigetcurrframebuf.o vigetnextframebuf.o vigetline.o vigetmode.o vigetnextcontext.o vigetstat.o vimgr.o visetevent.o visetmode.o visetspecial.o visetxscale.o visetyscale.o viswapbuf.o viswapcontext.o vitbl.o viblack.o virepeatline.o vifade.o si.o sigetstat.o sirawread.o sirawwrite.o sirawdma.o siacs.o contquery.o contreaddata.o contreset.o controller.o contsetch.o crc.o contramread.o contramwrite.o contpfs.o pfsreformat.o pfschecker.o pfsinit.o pfsallocatefile.o pfsdeletefile.o pfsreadwritefile.o pfsfilestate.o pfssearchfile.o pfssetlabel.o pfsgetlabel.o pfsisplug.o pfsfreeblocks.o pfsnumfiles.o conteepread.o conteepwrite.o conteepprobe.o conteeplongwrite.o conteeplongread.o pfsinitpak.o pfsrepairid.o pfsgetstatus.o motor.o vimodentsclpn1.o vimodentsclpf1.o vimodentsclan1.o vimodentsclaf1.o vimodentsclpn2.o vimodentsclpf2.o vimodentsclan2.o vimodentsclaf2.o vimodentschpn1.o vimodentschpf1.o vimodentschan1.o vimodentschaf1.o vimodentschpn2.o vimodentschpf2.o vimodepallpn1.o vimodepallpf1.o vimodepallan1.o vimodepallaf1.o vimodepallpn2.o vimodepallpf2.o vimodepallan2.o vimodepallaf2.o vimodepalhpn1.o vimodepalhpf1.o vimodepalhan1.o vimodepalhaf1.o vimodepalhpn2.o vimodepalhpf2.o vimodempallpn1.o vimodempallpf1.o vimodempallan1.o vimodempallaf1.o vimodempallpn2.o vimodempallpf2.o vimodempallan2.o vimodempallaf2.o vimodempalhpn1.o vimodempalhpf1.o vimodempalhan1.o vimodempalhaf1.o vimodempalhpn2.o vimodempalhpf2.o pi.o pigettype.o pigetstat.o pirawread.o pirawwrite.o pirawdma.o pigetcmdq.o pimgr.o epirawread.o epirawwrite.o epirawdma.o epiwrite.o epiread.o epidma.o epigettype.o epilinkhandle.o cartrominit.o leodiskinit.o leointerrupt.o driverominit.o devmgr.o piacs.o piwrite.o piread.o pidma.o giorawinterrupt.o giointerrupt.o region.o malloc.o free.o getbufcount.o getsize.o printregion.o rmonrcp.o rmonbrk.o rmoncmds.o rmonmem.o rmonmisc.o rmonprint.o rmonregs.o rmontask.o rmonmain.o rmonsio.o bcmp.o bcopy.o bzero.o ll.o llcvt.o string.o ldiv.o llbit.o xlitob.o xldtob.o xprintf.o sprintf.o syncprintf.o delay.o log.o logfloat.o sched.o
1 change: 1 addition & 0 deletions base/I/libgultra_d.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
gt.o dumpturbo.o sqrtf.o libm_vals.o align.o cosf.o coss.o frustum.o lookat.o lookatref.o lookathil.o lookatstereo.o mtxutil.o mtxcatf.o mtxcatl.o normalize.o ortho.o perspective.o rotate.o rotaterpy.o scale.o sinf.o sins.o translate.o loadtextureblockmipmap.o guloadtile_bug.o position.o poslight.o poslighthil.o random.o usprite.o us2dex.o us2dex_emu.o parse_rdp.o parse_gbi.o dump_gbi.o parse_string.o exceptasm.o getcause.o getcompare.o getconfig.o getcount.o getfpccsr.o getsr.o getintmask.o gettlbasid.o gettlbhi.o gettlblo0.o gettlblo1.o gettlbpagemask.o invaldcache.o invalicache.o interrupt.o maptlb.o parameters.o probetlb.o setintmask.o setcause.o setcompare.o setconfig.o setcount.o setfpccsr.o setsr.o settlbasid.o unmaptlb.o unmaptlball.o writebackdcache.o writebackdcacheall.o maptlbrdb.o errorasm.o assertbreak.o atomic.o createmesgqueue.o createthread.o destroythread.o getactivequeue.o getthreadid.o getthreadpri.o gettime.o initialize.o jammesg.o kdebugserver.o physicaltovirtual.o recvmesg.o resetglobalintmask.o sendmesg.o seteventmesg.o setglobalintmask.o sethwinterrupt.o setthreadpri.o settime.o settimer.o startthread.o stopthread.o stoptimer.o syncputchars.o thread.o timerintr.o virtualtophysical.o yieldthread.o getcurrfaultthread.o getnextfaultthread.o initrdb.o rdbsend.o getmemsize.o error.o seterrorhandler.o assert.o exit.o profile.o readhost.o testhost.o writehost.o ackramromread.o ackramromwrite.o host_ptn64.o drvrnew.o load.o auxbus.o bnkf.o env.o event.o filter.o mainbus.o resample.o reverb.o save.o seq.o sl.o heapcheck.o heapinit.o heapalloc.o copy.o seqpdelete.o seqpgetfxmix.o seqpgetpan.o seqpgetchlvol.o seqpgetpriority.o seqpgetprogram.o seqpgetseq.o seqpgettempo.o seqpgetvol.o seqpgetstate.o seqploop.o seqpplay.o seqpsendmidi.o seqpsetbank.o seqpsetfxmix.o seqpsetpan.o seqpsetchlvol.o seqpsetpriority.o seqpsetprogram.o seqpsetseq.o seqpsettempo.o seqpsetvol.o seqpstop.o seqplayer.o cseq.o cspdelete.o cspgetfxmix.o cspgetpan.o cspgetchlvol.o cspgetpriority.o cspgetprogram.o cspgetseq.o cspgettempo.o cspgetvol.o cspgetstate.o cspplay.o cspsendmidi.o cspsetbank.o cspsetfxmix.o cspsetpan.o cspsetchlvol.o cspsetpriority.o cspsetprogram.o cspsetseq.o cspsettempo.o cspsetvol.o cspstop.o csplayer.o sndplayer.o sndpdelete.o sndpallocate.o sndpdeallocate.o sndpsetsound.o sndpplay.o sndpplayat.o sndpgetsound.o sndpstop.o sndpgetstate.o sndpsetpitch.o sndpsetpriority.o sndpsetvol.o sndpsetpan.o sndpsetfxmix.o synthesizer.o syndelete.o synaddplayer.o synremoveplayer.o synfreevoice.o synallocvoice.o synstopvoice.o synstartvoice.o synstartvoiceparam.o synsetpitch.o synsetvol.o synsetfxmix.o synsetpan.o syngetpriority.o synsetpriority.o synallocfx.o synfreefx.o syngetfxref.o synsetfxparam.o cents2ratio.o parse_abi.o color.o clearattribute.o hide.o spscale.o setattribute.o show.o sprite.o ai.o aigetlen.o aigetstat.o aisetfreq.o aisetnextbuf.o dp.o dpgetstat.o dpsetstat.o dpsetnextbuf.o dpctr.o sp.o spgetstat.o spsetstat.o spsetpc.o sprawread.o sprawwrite.o sprawdma.o sptask.o sptaskyield.o sptaskyielded.o vi.o vigetcurrcontext.o vigetfield.o vigetcurrframebuf.o vigetnextframebuf.o vigetline.o vigetmode.o vigetnextcontext.o vigetstat.o vimgr.o visetevent.o visetmode.o visetspecial.o visetxscale.o visetyscale.o viswapbuf.o viswapcontext.o vitbl.o viblack.o virepeatline.o vifade.o si.o sigetstat.o sirawread.o sirawwrite.o sirawdma.o siacs.o contquery.o contreaddata.o contreset.o controller.o contsetch.o crc.o contramread.o contramwrite.o contpfs.o pfsreformat.o pfschecker.o pfsinit.o pfsallocatefile.o pfsdeletefile.o pfsreadwritefile.o pfsfilestate.o pfssearchfile.o pfssetlabel.o pfsgetlabel.o pfsisplug.o pfsfreeblocks.o pfsnumfiles.o conteepread.o conteepwrite.o conteepprobe.o conteeplongwrite.o conteeplongread.o pfsinitpak.o pfsrepairid.o pfsgetstatus.o motor.o vimodentsclpn1.o vimodentsclpf1.o vimodentsclan1.o vimodentsclaf1.o vimodentsclpn2.o vimodentsclpf2.o vimodentsclan2.o vimodentsclaf2.o vimodentschpn1.o vimodentschpf1.o vimodentschan1.o vimodentschaf1.o vimodentschpn2.o vimodentschpf2.o vimodepallpn1.o vimodepallpf1.o vimodepallan1.o vimodepallaf1.o vimodepallpn2.o vimodepallpf2.o vimodepallan2.o vimodepallaf2.o vimodepalhpn1.o vimodepalhpf1.o vimodepalhan1.o vimodepalhaf1.o vimodepalhpn2.o vimodepalhpf2.o vimodempallpn1.o vimodempallpf1.o vimodempallan1.o vimodempallaf1.o vimodempallpn2.o vimodempallpf2.o vimodempallan2.o vimodempallaf2.o vimodempalhpn1.o vimodempalhpf1.o vimodempalhan1.o vimodempalhaf1.o vimodempalhpn2.o vimodempalhpf2.o pi.o pigettype.o pigetstat.o pirawread.o pirawwrite.o pirawdma.o pigetcmdq.o pimgr.o epirawread.o epirawwrite.o epirawdma.o epiwrite.o epiread.o epidma.o epigettype.o epilinkhandle.o cartrominit.o leodiskinit.o leointerrupt.o driverominit.o devmgr.o piacs.o piwrite.o piread.o pidma.o giorawinterrupt.o giointerrupt.o region.o malloc.o free.o getbufcount.o getsize.o printregion.o rmonrcp.o rmonbrk.o rmoncmds.o rmonmem.o rmonmisc.o rmonprint.o rmonregs.o rmontask.o rmonmain.o rmonsio.o bcmp.o bcopy.o bzero.o ll.o llcvt.o string.o ldiv.o llbit.o xlitob.o xldtob.o xprintf.o sprintf.o syncprintf.o delay.o log.o logfloat.o sched.o
Loading