Ported Ficl to NuttX apps/
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3584 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
1141cc4cc6
commit
704fd479f8
@ -33,6 +33,7 @@
|
||||
|
||||
6.3 2011-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
|
||||
* apps/interpreter: Add a directory to hold interpreters. The Pascal add-
|
||||
* apps/interpreter: Add a directory to hold interpreters. The Pascal add-
|
||||
on module now installs and builds under this directory.
|
||||
|
||||
* apps/interpreter/ficl: Added logic to build Ficl (the "Forth Inspired
|
||||
Command Language"). See http://ficl.sourceforge.net/.
|
||||
|
@ -37,7 +37,7 @@
|
||||
|
||||
# Sub-directories containing interpreter runtime
|
||||
|
||||
SUBDIRS = pcode
|
||||
SUBDIRS = pcode ficl
|
||||
|
||||
# Create the list of installed runtime modules (INSTALLED_DIRS)
|
||||
|
||||
|
118
interpreters/ficl/Makefile
Normal file
118
interpreters/ficl/Makefile
Normal file
@ -0,0 +1,118 @@
|
||||
############################################################################
|
||||
# apps/interpreters/ficl/Makefile
|
||||
#
|
||||
# Copyright (C) 2011 Gregory Nutt. All rights reserved.
|
||||
# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# 3. Neither the name NuttX nor the names of its contributors may be
|
||||
# used to endorse or promote products derived from this software
|
||||
# without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
BUILDDIR := ${shell pwd | sed -e 's/ /\\ /g'}
|
||||
|
||||
-include $(TOPDIR)/.config
|
||||
-include $(TOPDIR)/Make.defs
|
||||
include $(APPDIR)/Make.defs
|
||||
|
||||
# Tools
|
||||
|
||||
INCDIR = $(TOPDIR)/tools/incdir.sh
|
||||
|
||||
ifeq ($(WINTOOL),y)
|
||||
INCDIROPT = -w
|
||||
endif
|
||||
|
||||
# Include paths
|
||||
|
||||
CFLAGS += ${shell $(INCDIR) $(INCDIROPT) "$(CC)" $(BUILDDIR)/$(FICL_SUBDIR) $(BUILDDIR)/src}
|
||||
|
||||
# Source Files
|
||||
|
||||
ASRCS =
|
||||
CXXSRCS =
|
||||
CSRCS = nuttx.c
|
||||
|
||||
include Make.srcs
|
||||
|
||||
ASRCS += $(FICL_ASRCS)
|
||||
CXXSRCS += $(FICL_CXXSRCS)
|
||||
CSRCS += $(FICL_CSRCS)
|
||||
|
||||
AOBJS = $(ASRCS:.S=$(OBJEXT))
|
||||
COBJS = $(CSRCS:.c=$(OBJEXT))
|
||||
|
||||
SRCS = $(ASRCS) $(CSRCS)
|
||||
OBJS = $(AOBJS) $(COBJS)
|
||||
|
||||
ifeq ($(WINTOOL),y)
|
||||
BIN = "${shell cygpath -w $(APPDIR)/libapps$(LIBEXT)}"
|
||||
else
|
||||
BIN = "$(APPDIR)/libapps$(LIBEXT)"
|
||||
endif
|
||||
|
||||
ROOT_DEPPATH = --dep-path .
|
||||
SRC_DEPPATH = --dep-path src
|
||||
|
||||
VPATH = src:$(FICL_SUBDIR)
|
||||
|
||||
all: .built
|
||||
.PHONY: debug context depend clean distclean
|
||||
|
||||
$(AOBJS): %$(OBJEXT): %.S
|
||||
$(call ASSEMBLE, $<, $@)
|
||||
|
||||
$(COBJS): %$(OBJEXT): %.c
|
||||
$(call COMPILE, $<, $@)
|
||||
|
||||
debug:
|
||||
@#echo "FICL: $(FICL_SUBDIR)"
|
||||
@#echo "VPATH: $(VPATH)"
|
||||
@#echo "CFLAGS: $(CFLAGS)"
|
||||
|
||||
.built: debug $(OBJS)
|
||||
@( for obj in $(OBJS) ; do \
|
||||
$(call ARCHIVE, $(BIN), $${obj}); \
|
||||
done ; )
|
||||
@touch .built
|
||||
|
||||
context:
|
||||
|
||||
.depend: debug Makefile $(SRCS)
|
||||
@$(MKDEP) $(ROOT_DEPPATH) $(SRC_DEPPATH) $(FICL_DEPPATH) $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep
|
||||
@touch $@
|
||||
|
||||
depend: .depend
|
||||
|
||||
clean:
|
||||
@rm -f *.o *~ .*.swp .built
|
||||
$(call CLEAN)
|
||||
|
||||
distclean: clean
|
||||
@rm -f Make.dep .depend
|
||||
|
||||
-include Make.dep
|
42
interpreters/ficl/README.txt
Executable file
42
interpreters/ficl/README.txt
Executable file
@ -0,0 +1,42 @@
|
||||
apps/interpreter/README.txt
|
||||
===========================
|
||||
|
||||
Ficl is a programming language interpreter designed to be embedded into
|
||||
other systems as a command, macro, and development prototyping language.
|
||||
Ficl is an acronym for "Forth Inspired Command Language". See
|
||||
http://ficl.sourceforge.net/
|
||||
|
||||
Build Instructions
|
||||
------------------
|
||||
|
||||
Disclaimer: This installation steps have only been exercised using Ficl
|
||||
4.1.0. With new versions you will likely have to make some adjustments
|
||||
to this instructtions or to the files within this directory. This of this
|
||||
information as "recommendations" -- not necessarily proven instructions.
|
||||
|
||||
1. CD to apps/interpreters/ficl
|
||||
|
||||
2. Download Ficl: http://sourceforge.net/projects/ficl/files/
|
||||
|
||||
3. Uznip the Ficl compressed file.
|
||||
|
||||
For example, 'unzip ficl-4.1.0.zip' will leave the file
|
||||
apps/interpreters/ficl/ficl-4.1.0
|
||||
|
||||
4. Configure to build Ficl in the apps/interpreters/ficl directory using
|
||||
the configure.sh script.
|
||||
|
||||
For example, './configure.sh ficl-4.1.0' will leave the Makefile
|
||||
fragment 'Make.srcs' in the ficl build directory.
|
||||
|
||||
5. Create your NuttX configuration. The appconfig file should include
|
||||
(1) the path to your application code, and (2) the path to the Ficl
|
||||
build directory. That latter would appear as the following line in
|
||||
your appconfig file:
|
||||
|
||||
CONFIGURED_APPS += interpreters/ficl
|
||||
|
||||
6. Configure and build NuttX. On successful completion, the Ficl objects
|
||||
will be available in apps/libapps.a and that NuttX binary will be
|
||||
linked against that file. Of course, Ficl will do nothing unless
|
||||
you have written some application code that uses it!
|
47
interpreters/ficl/configure.sh
Executable file
47
interpreters/ficl/configure.sh
Executable file
@ -0,0 +1,47 @@
|
||||
#!/bin/bash
|
||||
|
||||
USAGE="$0 <Ficl-dir>"
|
||||
|
||||
FICLDIR=$1
|
||||
if [ -z "${FICLDIR}" ]; then
|
||||
echo "Missing command line argument"
|
||||
echo $USAGE
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "${FICLDIR}" ]; then
|
||||
echo "Sub-directory ${FICLDIR} does not exist"
|
||||
echo $USAGE
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -r "${FICLDIR}/Makefile" ]; then
|
||||
echo "Readable ${FICLDIR}/Makefile does not exist"
|
||||
echo $USAGE
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OBJECTS=`grep "^OBJECTS" ${FICLDIR}/Makefile`
|
||||
if [ -z "${OBJECTS}" ]; then
|
||||
echo "No OBJECTS found in ${FICLDIR}/Makefile"
|
||||
echo $USAGE
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OBJLIST=`echo ${OBJECTS} | cut -d'=' -f2 | sed -e "s/unix\.o//g"`
|
||||
|
||||
rm -f Make.srcs
|
||||
echo "# apps/interpreters/ficl/Make.obs" >> Make.srcs
|
||||
echo "# Auto-generated file.. Do not edit" >> Make.srcs
|
||||
echo "" >> Make.srcs
|
||||
echo "FICL_SUBDIR = ${1}" >> Make.srcs
|
||||
echo "FICL_DEPPATH = --dep-path ${1}" >> Make.srcs
|
||||
|
||||
unset CSRCS
|
||||
for OBJ in ${OBJLIST}; do
|
||||
SRC=`echo ${OBJ} | sed -e "s/\.o/\.c/g"`
|
||||
CSRCS=${CSRCS}" ${SRC}"
|
||||
done
|
||||
echo "FICL_ASRCS = " >> Make.srcs
|
||||
echo "FICL_CXXSRCS = " >> Make.srcs
|
||||
echo "FICL_CSRCS = ${CSRCS}" >> Make.srcs
|
65
interpreters/ficl/src/nuttx.c
Normal file
65
interpreters/ficl/src/nuttx.c
Normal file
@ -0,0 +1,65 @@
|
||||
#include <sys/stat.h>
|
||||
#include <sys/statfs.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "ficl.h"
|
||||
|
||||
void *ficlMalloc(size_t size)
|
||||
{
|
||||
return malloc(size);
|
||||
}
|
||||
|
||||
void *ficlRealloc(void *p, size_t size)
|
||||
{
|
||||
return realloc(p, size);
|
||||
}
|
||||
|
||||
void ficlFree(void *p)
|
||||
{
|
||||
free(p);
|
||||
}
|
||||
|
||||
void ficlCallbackDefaultTextOut(ficlCallback *callback, char *message)
|
||||
{
|
||||
FICL_IGNORE(callback);
|
||||
if (message != NULL)
|
||||
fputs(message, stdout);
|
||||
else
|
||||
fflush(stdout);
|
||||
return;
|
||||
}
|
||||
|
||||
int ficlFileStatus(char *filename, int *status)
|
||||
{
|
||||
struct stat statbuf;
|
||||
if (stat(filename, &statbuf) == 0)
|
||||
{
|
||||
*status = statbuf.st_mode;
|
||||
return 0;
|
||||
}
|
||||
*status = ENOENT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
long ficlFileSize(ficlFile *ff)
|
||||
{
|
||||
struct stat statbuf;
|
||||
if (ff == NULL)
|
||||
return -1;
|
||||
|
||||
statbuf.st_size = -1;
|
||||
if (fstat(fileno(ff->f), &statbuf) != 0)
|
||||
return -1;
|
||||
|
||||
return statbuf.st_size;
|
||||
}
|
||||
|
||||
void ficlSystemCompilePlatform(ficlSystem *system)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
19
interpreters/ficl/src/nuttx.h
Normal file
19
interpreters/ficl/src/nuttx.h
Normal file
@ -0,0 +1,19 @@
|
||||
#include <stdint.h>
|
||||
|
||||
typedef int8_t ficlInteger8;
|
||||
typedef uint8_t ficlUnsigned8;
|
||||
typedef int16_t ficlInteger16;
|
||||
typedef uint16_t ficlUnsigned16;
|
||||
typedef int32_t ficlInteger32;
|
||||
typedef uint32_t ficlUnsigned32;
|
||||
|
||||
typedef intptr_t ficlInteger;
|
||||
typedef uintptr_t ficlUnsigned;
|
||||
typedef float ficlFloat;
|
||||
|
||||
#define FICL_PLATFORM_BASIC_TYPES (1)
|
||||
#define FICL_PLATFORM_HAS_2INTEGER (0)
|
||||
#define FICL_PLATFORM_HAS_FTRUNCATE (0)
|
||||
|
||||
#define FICL_PLATFORM_OS "ansi"
|
||||
#define FICL_PLATFORM_ARCHITECTURE "unknown"
|
Loading…
x
Reference in New Issue
Block a user