From bb072cb0d253b4e497ed6dbd7898e225ad038bd7 Mon Sep 17 00:00:00 2001 From: patacongo Date: Tue, 27 Feb 2007 23:59:20 +0000 Subject: [PATCH] Working toward successful link using aslink git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@21 42af7a65-404d-4744-a932-0658087f49c3 --- Makefile | 33 +++++------------------ arch/c5471/Make.defs | 2 ++ arch/c5471/src/Makefile | 56 +++++++++++++++++++++++++++++----------- arch/sim/Make.defs | 2 ++ arch/sim/src/Makefile | 48 ++++++++++++++++++++++------------ drivers/Makefile | 10 +++---- examples/ostest/Makefile | 10 +++---- fs/Makefile | 10 +++---- lib/Makefile | 10 +++---- sched/Makefile | 11 ++++---- 10 files changed, 109 insertions(+), 83 deletions(-) diff --git a/Makefile b/Makefile index af2121ab24..19ff2478a3 100644 --- a/Makefile +++ b/Makefile @@ -42,17 +42,13 @@ ARCH_SRC = $(ARCH_DIR)/src SUBDIRS = sched lib $(ARCH_SRC) mm fs drivers examples/$(CONFIG_EXAMPLE) -OBJS = $(ARCH_SRC)/up_head.o -LIBGCC = ${shell $(CC) -print-libgcc-file-name} -LIBS = sched/libsched$(LIBEXT) $(ARCH_SRC)/libarch$(LIBEXT) mm/libmm$(LIBEXT) \ +LINKOBJS = $(ARCH_SRC)/up_head$(OBJEXT) +LINKLIBS = sched/libsched$(LIBEXT) $(ARCH_SRC)/libarch$(LIBEXT) mm/libmm$(LIBEXT) \ fs/libfs$(LIBEXT) drivers/libdrivers$(LIBEXT) lib/liblib$(LIBEXT) \ examples/$(CONFIG_EXAMPLE)/lib$(CONFIG_EXAMPLE)$(LIBEXT) -LDLIBS = -lsched -larch -lmm -lfs -ldrivers -llib -l$(CONFIG_EXAMPLE) $(LIBGCC) $(EXTRA_LIBS) BIN = nuttx -LDFLAGS += -Lsched -Llib -L$(ARCH_SRC) -Lmm -Lfs -Ldrivers -Lexamples/$(CONFIG_EXAMPLE) - all: $(BIN) .PHONY: clean context clean_context distclean @@ -87,8 +83,8 @@ lib/liblib$(LIBEXT): context $(ARCH_SRC)/libarch$(LIBEXT): context $(MAKE) -C $(ARCH_SRC) TOPDIR=$(TOPDIR) libarch$(LIBEXT) -$(ARCH_SRC)/up_head.o: context - $(MAKE) -C $(ARCH_SRC) TOPDIR=$(TOPDIR) up_head.o +$(ARCH_SRC)/up_head$(OBJEXT): context + $(MAKE) -C $(ARCH_SRC) TOPDIR=$(TOPDIR) up_head$(OBJEXT) mm/libmm$(LIBEXT): context $(MAKE) -C mm TOPDIR=$(TOPDIR) libmm$(LIBEXT) @@ -102,25 +98,8 @@ drivers/libdrivers$(LIBEXT): context examples/$(CONFIG_EXAMPLE)/lib$(CONFIG_EXAMPLE)$(LIBEXT): context $(MAKE) -C examples/$(CONFIG_EXAMPLE) TOPDIR=$(TOPDIR) lib$(CONFIG_EXAMPLE)$(LIBEXT) -$(BIN): context depend $(OBJS) $(LIBS) -ifeq ($(CONFIG_ARCH),sim) - $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) $(LDLIBS) - @$(NM) $(BIN) | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map -else - $(LD) --entry=__start $(LDFLAGS) -o $@ $(OBJS) $(LIBS) $(LDLIBS) - @$(NM) $(BIN) | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map - @export vflashstart=`$(OBJDUMP) --all-headers $(BIN) | grep _vflashstart | cut -d' ' -f1`; \ - if [ ! -z "$$vflashstart" ]; then \ - $(OBJCOPY) --adjust-section-vma=.vector=0x$$vflashstart $(BIN) $(BIN).flashimage; \ - mv $(BIN).flashimage $(BIN); \ - fi -ifeq ($(CONFIG_RRLOAD_BINARY),y) - @tools/mkimage.sh nuttx nuttx.rr - @if [ -w /tftpboot ] ; then \ - cp -f nuttx.rr /tftpboot/nuttx.rr.${CONFIG_ARCH}; \ - fi -endif -endif +$(BIN): context depend $(LINKOBJS) $(LINKLIBS) + $(MAKE) -C $(ARCH_SRC) TOPDIR=$(TOPDIR) LINKOBJS="$(LINKOBJS)" LINKLIBS="$(LINKLIBS)" $(BIN) depend: @for dir in $(SUBDIRS) ; do \ diff --git a/arch/c5471/Make.defs b/arch/c5471/Make.defs index 8f00136708..f75abdad61 100644 --- a/arch/c5471/Make.defs +++ b/arch/c5471/Make.defs @@ -62,6 +62,8 @@ CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) \ LDFLAGS = $(ARCHSCRIPT) EXTRA_LIBS = + +OBJEXT = .o LIBEXT = .a ifeq ("${CONFIG_DEBUG}","y") diff --git a/arch/c5471/src/Makefile b/arch/c5471/src/Makefile index 57d741aaa5..e2a4dc4ba6 100644 --- a/arch/c5471/src/Makefile +++ b/arch/c5471/src/Makefile @@ -35,26 +35,33 @@ -include $(TOPDIR)/Make.defs -MKDEP = $(TOPDIR)/tools/mkdeps.sh -CFLAGS += -I$(TOPDIR)/sched +MKDEP = $(TOPDIR)/tools/mkdeps.sh +CFLAGS += -I$(TOPDIR)/sched -ASRCS = up_vectors.S up_saveusercontext.S up_fullcontextrestore.S +ASRCS = up_vectors.S up_saveusercontext.S up_fullcontextrestore.S ifeq ($(CONFIG_DEBUG),y) -ASRCS += up_lowputc.S +ASRCS += up_lowputc.S endif -AOBJS = $(ASRCS:.S=.o) +AOBJS = $(ASRCS:.S=.o) -CSRCS = up_initialize.c up_initialstate.c up_idle.c up_doirq.c \ - up_irq.c up_syscall.c up_dataabort.c up_prefetchabort.c \ - up_undefinedinsn.c up_interruptcontext.c up_timerisr.c \ - up_createstack.c up_usestack.c up_releasestack.c \ - up_exit.c up_assert.c up_blocktask.c up_unblocktask.c \ - up_releasepending.c up_reprioritizertr.c up_copystate.c \ - up_schedulesigaction.c up_sigdeliver.c up_serial.c -COBJS = $(CSRCS:.c=.o) +CSRCS = up_initialize.c up_initialstate.c up_idle.c up_doirq.c \ + up_irq.c up_syscall.c up_dataabort.c up_prefetchabort.c \ + up_undefinedinsn.c up_interruptcontext.c up_timerisr.c \ + up_createstack.c up_usestack.c up_releasestack.c \ + up_exit.c up_assert.c up_blocktask.c up_unblocktask.c \ + up_releasepending.c up_reprioritizertr.c up_copystate.c \ + up_schedulesigaction.c up_sigdeliver.c up_serial.c +COBJS = $(CSRCS:.c=.o) -SRCS = $(ASRCS) $(CSRCS) -OBJS = $(AOBJS) $(COBJS) +SRCS = $(ASRCS) $(CSRCS) +OBJS = $(AOBJS) $(COBJS) + +LINKOBJS = +LINKLIBS = +LDPATHES = $(addprefix -L$(TOPDIR)/,$(dir $(LINKLIBS))) +LDLIBS = $(patsubst lib%,-l%,$(basename $(notdir $(LINKLIBS)))) + +LIBGCC = ${shell $(CC) -print-libgcc-file-name} all: up_head.o libarch$(LIBEXT) @@ -70,6 +77,25 @@ libarch$(LIBEXT): $(OBJS) { echo "$(AR) $@ $obj FAILED!" ; exit 1 ; } ; \ done ; ) +nuttx: + $(LD) --entry=__start $(LDFLAGS) $(LDPATHES) -o $(TOPDIR)/$@ \ + $(addprefix $(TOPDIR)/,$(LINKOBJS)) \ + --start-group $(LDLIBS) $(EXTRA_LIBS) $(LIBGCC) --end-group + @$(NM) $(TOPDIR)/$@ | \ + grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \ + sort > $(TOPDIR)/System.map + @export vflashstart=`$(OBJDUMP) --all-headers $(TOPDIR)/$@ | grep _vflashstart | cut -d' ' -f1`; \ + if [ ! -z "$$vflashstart" ]; then \ + $(OBJCOPY) --adjust-section-vma=.vector=0x$$vflashstart $(TOPDIR)/$@ $(TOPDIR)/$@.flashimage; \ + mv $(TOPDIR)/$@.flashimage $(TOPDIR)/$@; \ + fi +ifeq ($(CONFIG_RRLOAD_BINARY),y) + @$(TOPDIR)/tools/mkimage.sh $(TOPDIR)/$@ $(TOPDIR)/$@.rr + @if [ -w /tftpboot ] ; then \ + cp -f $(TOPDIR)/$@.rr /tftpboot/$@.rr.${CONFIG_ARCH}; \ + fi +endif + .depend: Makefile $(SRCS) $(MKDEP) $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep touch $@ diff --git a/arch/sim/Make.defs b/arch/sim/Make.defs index 19c2b5db6b..da5b1ba480 100644 --- a/arch/sim/Make.defs +++ b/arch/sim/Make.defs @@ -61,6 +61,8 @@ CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) \ LDFLAGS = $(ARCHSCRIPT) EXTRA_LIBS = -lc + +OBJEXT = .o LIBEXT = .a ifeq ("${CONFIG_DEBUG}","y") diff --git a/arch/sim/src/Makefile b/arch/sim/src/Makefile index 53b4c6a7ea..cb3f96b73f 100644 --- a/arch/sim/src/Makefile +++ b/arch/sim/src/Makefile @@ -35,26 +35,33 @@ -include $(TOPDIR)/Make.defs -MKDEP = $(TOPDIR)/tools/mkdeps.sh -CFLAGS += -I$(TOPDIR)/sched +MKDEP = $(TOPDIR)/tools/mkdeps.sh +CFLAGS += -I$(TOPDIR)/sched -ASRCS = up_setjmp.S -AOBJS = $(ASRCS:.S=.o) -CSRCS = up_initialize.c up_idle.c up_interruptcontext.c up_initialstate.c \ - up_createstack.c up_usestack.c up_releasestack.c \ - up_unblocktask.c up_blocktask.c up_releasepending.c up_reprioritizertr.c \ - up_exit.c up_schedulesigaction.c up_allocateheap.c up_devconsole.c -COBJS = $(CSRCS:.c=.o) +ASRCS = up_setjmp.S +AOBJS = $(ASRCS:.S=$(OBJEXT)) +CSRCS = up_initialize.c up_idle.c up_interruptcontext.c \ + up_initialstate.c up_createstack.c up_usestack.c \ + up_releasestack.c up_unblocktask.c up_blocktask.c \ + up_releasepending.c up_reprioritizertr.c \ + up_exit.c up_schedulesigaction.c up_allocateheap.c \ + up_devconsole.c +COBJS = $(CSRCS:.c=$(OBJEXT)) -SRCS = $(ASRCS) $(CSRCS) -OBJS = $(AOBJS) $(COBJS) +SRCS = $(ASRCS) $(CSRCS) +OBJS = $(AOBJS) $(COBJS) -all: up_head.o libarch$(LIBEXT) +LINKOBJS = +LINKLIBS = +LDPATHES = $(addprefix -L$(TOPDIR)/,$(dir $(LINKLIBS))) +LDLIBS = $(patsubst lib%,-l%,$(basename $(notdir $(LINKLIBS)))) -$(AOBJS): %.o: %.S +all: up_head$(OBJEXT) libarch$(LIBEXT) + +$(AOBJS): %$(OBJEXT): %.S $(CC) -c $(CFLAGS) -D__ASSEMBLY__ $< -o $@ -$(COBJS) up_head.o: %.o: %.c +$(COBJS) up_head$(OBJEXT): %$(OBJEXT): %.c $(CC) -c $(CFLAGS) $< -o $@ libarch$(LIBEXT): $(OBJS) @@ -63,6 +70,15 @@ libarch$(LIBEXT): $(OBJS) { echo "$(AR) $@ $obj FAILED!" ; exit 1 ; } ; \ done ; ) +nuttx: + $(CC) $(LDFLAGS) $(LDPATHES) -o $(TOPDIR)/$@ \ + $(addprefix $(TOPDIR)/,$(LINKOBJS)) \ + -Wl,--start-group $(LDLIBS) $(EXTRA_LIBS) -Wl,--end-group + @$(NM) $(TOPDIR)/$@ | \ + grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \ + sort > $(TOPDIR)/System.map + + .depend: Makefile $(SRCS) $(MKDEP) $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep touch $@ @@ -70,10 +86,10 @@ libarch$(LIBEXT): $(OBJS) depend: .depend clean: - rm -f libarch$(LIBEXT) *.o *~ + rm -f libarch$(LIBEXT) *~ + if [ ! -z "$(OBJEXT)" ]; then rm -f *$(OBJEXT); fi distclean: clean rm -f Make.dep .depend - -include Make.dep diff --git a/drivers/Makefile b/drivers/Makefile index 711b0ca33c..dc07fcdc72 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -38,10 +38,10 @@ MKDEP = $(TOPDIR)/tools/mkdeps.sh ASRCS = -AOBJS = $(ASRCS:.S=.o) +AOBJS = $(ASRCS:.S=$(OBJEXT)) CSRCS = dev_null.c -COBJS = $(CSRCS:.c=.o) +COBJS = $(CSRCS:.c=$(OBJEXT)) SRCS = $(ASRCS) $(CSRCS) OBJS = $(AOBJS) $(COBJS) @@ -50,10 +50,10 @@ BIN = libdrivers$(LIBEXT) all: $(BIN) -$(AOBJS): %.o: %.S +$(AOBJS): %$(OBJEXT): %.S $(CC) -c $(CFLAGS) -D__ASSEMBLY__ $< -o $@ -$(cOBJS): %.o: %.c +$(cOBJS): %$(OBJEXT): %.c $(CC) -c $(CFLAGS) $< -o $@ $(BIN): $(OBJS) @@ -69,7 +69,7 @@ $(BIN): $(OBJS) depend: .depend clean: - rm -f $(BIN) *.o *.asm *.lst *.sym *.adb *~ + rm -f $(BIN) *.o *.rel *.asm *.lst *.sym *.adb *~ distclean: clean rm -f Make.dep .depend diff --git a/examples/ostest/Makefile b/examples/ostest/Makefile index 44c7f3f067..22fbb25011 100644 --- a/examples/ostest/Makefile +++ b/examples/ostest/Makefile @@ -39,10 +39,10 @@ MKDEP = $(TOPDIR)/tools/mkdeps.sh ASRCS = -AOBJS = $(ASRCS:.S=.o) +AOBJS = $(ASRCS:.S=$(OBJEXT)) CSRCS = main.c dev_null.c mutex.c cancel.c sem.c cond.c \ timedwait.c mqueue.c sighand.c -COBJS = $(CSRCS:.c=.o) +COBJS = $(CSRCS:.c=$(OBJEXT)) SRCS = $(ASRCS) $(CSRCS) OBJS = $(AOBJS) $(COBJS) @@ -51,10 +51,10 @@ BIN = lib$(CONFIG_EXAMPLE)$(LIBEXT) all: $(BIN) -$(AOBJS): %.o: %.S +$(AOBJS): %$(OBJEXT): %.S $(CC) -c $(CFLAGS) $< -o $@ -$(COBJS): %.o: %.c +$(COBJS): %$(OBJEXT): %.c $(CC) -c $(CFLAGS) $< -o $@ $(BIN): $(OBJS) @@ -70,7 +70,7 @@ $(BIN): $(OBJS) depend: .depend clean: - rm -f $(BIN) *.o *.asm *.lst *.sym *.adb *~ + rm -f $(BIN) *.o *.rel *.asm *.lst *.sym *.adb *~ distclean: clean rm -f Make.dep .depend diff --git a/fs/Makefile b/fs/Makefile index 6cce1face4..647739e32b 100644 --- a/fs/Makefile +++ b/fs/Makefile @@ -38,11 +38,11 @@ MKDEP = $(TOPDIR)/tools/mkdeps.sh ASRCS = -AOBJS = $(ASRCS:.S=.o) +AOBJS = $(ASRCS:.S=$(OBJEXT)) CSRCS = fs_open.c fs_close.c fs_read.c fs_write.c fs_ioctl.c fs_dup.c \ fs_files.c fs_inode.c -COBJS = $(CSRCS:.c=.o) +COBJS = $(CSRCS:.c=$(OBJEXT)) SRCS = $(ASRCS) $(CSRCS) OBJS = $(AOBJS) $(COBJS) @@ -51,10 +51,10 @@ BIN = libfs$(LIBEXT) all: $(BIN) -$(AOBJS): %.o: %.S +$(AOBJS): %$(OBJEXT): %.S $(CC) -c $(CFLAGS) -D__ASSEMBLY__ $< -o $@ -$(cOBJS): %.o: %.c +$(cOBJS): %$(OBJEXT): %.c $(CC) -c $(CFLAGS) $< -o $@ $(BIN): $(OBJS) @@ -70,7 +70,7 @@ $(BIN): $(OBJS) depend: .depend clean: - rm -f $(BIN) *.o *.asm *.lst *.sym *.adb *~ + rm -f $(BIN) *.o *.rel *.asm *.lst *.sym *.adb *~ distclean: clean rm -f Make.dep .depend diff --git a/lib/Makefile b/lib/Makefile index c05b9e96d6..5e1c564bbc 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -38,7 +38,7 @@ MKDEP = $(TOPDIR)/tools/mkdeps.sh ASRCS = -AOBJS = $(ASRCS:.S=.o) +AOBJS = $(ASRCS:.S=$(OBJEXT)) MISC_SRCS = lib_init.c lib_streamsem.c lib_filesem.c STRING_SRCS = lib_memset.c lib_memcpy.c lib_memcmp.c lib_memmove.c \ @@ -63,7 +63,7 @@ DQ_SRCS = dq_addlast.c dq_addfirst.c dq_addafter.c dq_addbefore.c \ CSRCS = $(MISC_SRCS) $(STRING_SRCS) $(CTYPE_SRCS) $(STDIO_SRCS) \ $(STDLIB_SRCS) $(MATH_SRCS) $(SQ_SRCS) $(DQ_SRCS) -COBJS = $(CSRCS:.c=.o) +COBJS = $(CSRCS:.c=$(OBJEXT)) SRCS = $(ASRCS) $(CSRCS) OBJS = $(AOBJS) $(COBJS) @@ -72,10 +72,10 @@ BIN = liblib$(LIBEXT) all: $(BIN) -$(AOBJS): %.o: %.S +$(AOBJS): %$(OBJEXT): %.S $(CC) -c $(CFLAGS) -D__ASSEMBLY__ $< -o $@ -$(COBJS): %.o: %.c +$(COBJS): %$(OBJEXT): %.c $(CC) -c $(CFLAGS) $< -o $@ $(BIN): $(OBJS) @@ -91,7 +91,7 @@ $(BIN): $(OBJS) depend: .depend clean: - rm -f $(BIN) *.o *.asm *.lst *.sym *.adb *~ + rm -f $(BIN) *.o *.rel *.asm *.lst *.sym *.adb *~ distclean: clean rm -f Make.dep .depend diff --git a/sched/Makefile b/sched/Makefile index e5dc3881dc..ea4eb4067c 100644 --- a/sched/Makefile +++ b/sched/Makefile @@ -38,7 +38,7 @@ MKDEP = $(TOPDIR)/tools/mkdeps.sh ASRCS = -AOBJS = $(ASRCS:.S=.o) +AOBJS = $(ASRCS:.S=$(OBJEXT)) MISC_SRCS = os_start.c get_errno_ptr.c \ sched_setupstreams.c sched_getfiles.c sched_getstreams.c \ @@ -96,7 +96,7 @@ SEM_SRCS = sem_initialize.c sem_init.c sem_destroy.c\ IRQ_SRCS = irq_initialize.c irq_attach.c irq_dispatch.c irq_unexpectedisr.c CSRCS = $(MISC_SRCS) $(TSK_SRCS) $(SCHED_SRCS) $(WDOG_SRCS) $(TIME_SRCS) \ $(SIGNAL_SRCS) $(MQUEUE_SRCS) $(PTHREAD_SRCS) $(SEM_SRCS) $(IRQ_SRCS) -COBJS = $(CSRCS:.c=.o) +COBJS = $(CSRCS:.c=$(OBJEXT)) SRCS = $(ASRCS) $(CSRCS) OBJS = $(AOBJS) $(COBJS) @@ -105,10 +105,10 @@ BIN = libsched$(LIBEXT) all: $(BIN) -$(AOBJS): %.o: %.S +$(AOBJS): %$(OBJEXT): %.S $(CC) -c $(CFLAGS) -D__ASSEMBLY__ $< -o $@ -$(COBJS): %.o: %.c +$(COBJS): %$(OBJEXT): %.c $(CC) -c $(CFLAGS) $< -o $@ $(BIN): $(OBJS) @@ -124,7 +124,8 @@ $(BIN): $(OBJS) depend: .depend clean: - rm -f $(BIN) *.o *.asm *.lst *.sym *.adb *~ + rm -f $(BIN) *.o *.rel *.asm *.lst *.sym *.adb *~ + if [ ! -z "$(OBJEXT)" ]; then rm -f *$(OBJEXT); fi distclean: clean rm -f Make.dep .depend