mirror of
https://github.com/apache/nuttx.git
synced 2026-06-08 01:42:58 +08:00
Add tools/mkdeps.bat and tools/mkdeps.c
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5342 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
+58
-15
@@ -33,43 +33,86 @@
|
||||
#
|
||||
############################################################################
|
||||
|
||||
all: mkconfig mkversion mksyscall bdf-converter
|
||||
default: mkconfig mksyscall
|
||||
TOPDIR ?= ${shell pwd}/..
|
||||
-include $(TOPDIR)/Make.defs
|
||||
include ${TOPDIR}/tools/Config.mk
|
||||
|
||||
all: mkconfig$(EXEEXT) mkversion$(EXEEXT) mksyscall$(EXEEXT) bdf-converter$(EXEEXT) mksymtab$(EXEEXT) mkdeps$(EXEEXT)
|
||||
default: mkconfig$(EXEEXT) mksyscall$(EXEEXT) mkdeps$(EXEEXT)
|
||||
|
||||
ifdef EXEEXT
|
||||
.PHONY: clean mkconfig mkversion mksyscall bdf-converter mksymtab mkdeps
|
||||
else
|
||||
.PHONY: clean
|
||||
endif
|
||||
|
||||
# Add CFLAGS=-g on the make command line build debug versions
|
||||
# Add HOSTCFLAGS=-g on the make command line build debug versions
|
||||
|
||||
CFLAGS = -O2 -Wall -I.
|
||||
HOSTCFLAGS ?= -O2 -Wall -I.
|
||||
HOSTCC ?= gcc
|
||||
|
||||
# mkconfig - Convert a .config file into a C config.h file
|
||||
|
||||
mkconfig: mkconfig.c cfgparser.c
|
||||
$(Q) gcc $(CFLAGS) -o mkconfig mkconfig.c cfgparser.c
|
||||
mkconfig$(EXEEXT): mkconfig.c cfgparser.c
|
||||
$(Q) $(HOSTCC) $(HOSTCFLAGS) -o mkconfig$(EXEEXT) mkconfig.c cfgparser.c
|
||||
|
||||
ifdef EXEEXT
|
||||
mkconfig: mkconfig$(EXEEXT)
|
||||
endif
|
||||
|
||||
# cmpconfig - Compare the contents of two configuration files
|
||||
|
||||
cmpconfig: cmpconfig.c
|
||||
$(Q) gcc $(CFLAGS) -o cmpconfig cmpconfig.c
|
||||
$(Q) $(HOSTCC) $(HOSTCFLAGS) -o cmpconfig cmpconfig.c
|
||||
|
||||
ifdef EXEEXT
|
||||
cmpconfig: cmpconfig$(EXEEXT)
|
||||
endif
|
||||
|
||||
# mkversion - Convert a .version file into a C version.h file
|
||||
|
||||
mkversion: mkconfig.c cfgparser.c
|
||||
$(Q) gcc $(CFLAGS) -o mkversion mkversion.c cfgparser.c
|
||||
mkversion$(EXEEXT): mkconfig.c cfgparser.c
|
||||
$(Q) $(HOSTCC) $(HOSTCFLAGS) -o mkversion$(EXEEXT) mkversion.c cfgparser.c
|
||||
|
||||
ifdef EXEEXT
|
||||
mkversion: mkversion$(EXEEXT)
|
||||
endif
|
||||
|
||||
# mksyscall - Convert a CSV file into syscall stubs and proxies
|
||||
|
||||
mksyscall: mksyscall.c csvparser.c
|
||||
$(Q) gcc $(CFLAGS) -o mksyscall mksyscall.c csvparser.c
|
||||
mksyscall$(EXEEXT): mksyscall.c csvparser.c
|
||||
$(Q) $(HOSTCC) $(HOSTCFLAGS) -o mksyscall$(EXEEXT) mksyscall.c csvparser.c
|
||||
|
||||
ifdef EXEEXT
|
||||
mksyscall: mksyscall$(EXEEXT)
|
||||
endif
|
||||
|
||||
# mksymtab - Convert a CSV file into a symbol table
|
||||
|
||||
mksymtab: mksymtab.c csvparser.c
|
||||
$(Q) gcc $(CFLAGS) -o mksymtab mksymtab.c csvparser.c
|
||||
mksymtab$(EXEEXT): mksymtab.c csvparser.c
|
||||
$(Q) $(HOSTCC) $(HOSTCFLAGS) -o mksymtab$(EXEEXT) mksymtab.c csvparser.c
|
||||
|
||||
ifdef EXEEXT
|
||||
mksymtab: mksymtab$(EXEEXT)
|
||||
endif
|
||||
|
||||
# bdf-converter - Converts a BDF font to the NuttX font format
|
||||
|
||||
bdf-converter: bdf-converter.c
|
||||
$(Q) gcc $(CFLAGS) -o bdf-converter bdf-converter.c
|
||||
bdf-converter$(EXEEXT): bdf-converter.c
|
||||
$(Q) $(HOSTCC) $(HOSTCFLAGS) -o bdf-converter$(EXEEXT) bdf-converter.c
|
||||
|
||||
ifdef EXEEXT
|
||||
bdf-converter: bdf-converter$(EXEEXT)
|
||||
endif
|
||||
|
||||
# Create dependencies for a list of files
|
||||
|
||||
mkdeps$(EXEEXT): mkdeps.c csvparser.c
|
||||
$(Q) $(HOSTCC) $(HOSTCFLAGS) -o mkdeps$(EXEEXT) mkdeps.c
|
||||
|
||||
ifdef EXEEXT
|
||||
mkdeps: mkdeps$(EXEEXT)
|
||||
endif
|
||||
|
||||
clean:
|
||||
$(Q) rm -f *.o *.a *~ .*.swp
|
||||
|
||||
+19
-1
@@ -271,6 +271,8 @@ mkromfsimg.sh
|
||||
may be mounted under /etc in the NuttX pseudo file system.
|
||||
|
||||
mkdeps.sh
|
||||
mkdeps.bat
|
||||
mkdeps.c
|
||||
mknulldeps.sh
|
||||
|
||||
NuttX uses the GCC compilers capabilities to create Makefile dependencies.
|
||||
@@ -278,7 +280,8 @@ mknulldeps.sh
|
||||
dependencies. If a NuttX configuration uses the GCC toolchain, its Make.defs
|
||||
file (see configs/README.txt) will include a line like:
|
||||
|
||||
MKDEP = $(TOPDIR)/tools/mkdeps.sh
|
||||
MKDEP = $(TOPDIR)/tools/mkdeps.sh, or
|
||||
MKDEP = $(TOPDIR)/tools/mkdeps[.exe] (See NOTE below)
|
||||
|
||||
If the NuttX configuration does not use a GCC compatible toolchain, then
|
||||
it cannot use the dependencies and instead it uses mknulldeps.sh:
|
||||
@@ -287,6 +290,21 @@ mknulldeps.sh
|
||||
|
||||
The mknulldeps.sh is a stub script that does essentially nothing.
|
||||
|
||||
NOTE: The mkdep.* files are undergoing change. mkdeps.sh is a bash
|
||||
script that produces dependencies well for POSIX style hosts (e..g.,
|
||||
Linux and Cygwin). It does not work well for mixed environments with
|
||||
a Windows toolchain running in a POSIX style environemnt (hence, the
|
||||
mknulldeps.sh script).
|
||||
|
||||
mkdeps.bat is a simple port of the bash script to run in a Windows
|
||||
command shell. However, it does not work well either because some
|
||||
of the common CFLAGS use characters like '=' which are transformed
|
||||
by the CMD.exe shell.
|
||||
|
||||
mkdeps.c generates mkdeps (on Linux) or mkdeps.exe (on Windows).
|
||||
This C version should solve all of the issues. However, this verison
|
||||
is still under-development.
|
||||
|
||||
define.sh
|
||||
|
||||
Different compilers have different conventions for specifying pre-
|
||||
|
||||
@@ -0,0 +1,173 @@
|
||||
@echo off
|
||||
|
||||
rem tools/mkdeps.sh
|
||||
rem
|
||||
rem Copyright (C) 2012 Gregory Nutt. All rights reserved.
|
||||
rem Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
rem
|
||||
rem Redistribution and use in source and binary forms, with or without
|
||||
rem modification, are permitted provided that the following conditions
|
||||
rem are met:
|
||||
rem
|
||||
rem 1. Redistributions of source code must retain the above copyright
|
||||
rem notice, this list of conditions and the following disclaimer.
|
||||
rem 2. Redistributions in binary form must reproduce the above copyright
|
||||
rem notice, this list of conditions and the following disclaimer in
|
||||
rem the documentation and/or other materials provided with the
|
||||
rem distribution.
|
||||
rem 3. Neither the name NuttX nor the names of its contributors may be
|
||||
rem used to endorse or promote products derived from this software
|
||||
rem without specific prior written permission.
|
||||
rem
|
||||
rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
rem FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
rem COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
rem INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
rem BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
rem OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
rem AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
rem LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
rem ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
rem POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
rem Accumulate CFLAGS up to "--"
|
||||
|
||||
set cc=
|
||||
set cflags=
|
||||
set altpath=
|
||||
set files=
|
||||
set args=
|
||||
set debug=n
|
||||
|
||||
:Loop
|
||||
if "%1"=="" goto Continue
|
||||
|
||||
if "%1"=="--" (
|
||||
set cc=%cflags%
|
||||
set cflags=%args%
|
||||
set args=
|
||||
goto NextParm
|
||||
)
|
||||
|
||||
if "%1"=="--dep-path" (
|
||||
if "%args%"=="" (
|
||||
set altpath=%altpath% %2
|
||||
) else (
|
||||
set args=%args% %2
|
||||
)
|
||||
shift
|
||||
goto NextParm
|
||||
)
|
||||
|
||||
if "%1"=="--dep-debug" (
|
||||
rem @echo on
|
||||
set debug=y
|
||||
goto NextParm
|
||||
)
|
||||
|
||||
if "%1"=="--help" goto Usage
|
||||
|
||||
if "%args%"=="" (
|
||||
set args=%1
|
||||
) else (
|
||||
set args=%args% %1
|
||||
)
|
||||
|
||||
:NextParm
|
||||
shift
|
||||
goto Loop
|
||||
:Continue
|
||||
|
||||
set files=%args%
|
||||
|
||||
if "%debug%"=="y" (
|
||||
echo cc=%cc%
|
||||
echo cflags=%cflags%
|
||||
echo files=%files%
|
||||
echo altpath=%altpath%
|
||||
)
|
||||
|
||||
rem Now check if we have everything
|
||||
|
||||
if "%cc%"=="" (
|
||||
echo ERROR: No compiler specified
|
||||
goto Usage
|
||||
)
|
||||
|
||||
if "%files%"=="" (
|
||||
rem Don't report an error -- this happens normally in some configurations
|
||||
echo # No files specified for dependency generataion
|
||||
goto End
|
||||
)
|
||||
|
||||
rem Then get the dependencies for each file
|
||||
|
||||
if "%altpath%"=="" goto NoPaths
|
||||
for %%G in (%files%) do (
|
||||
set fullpath=
|
||||
set file=%%G
|
||||
call :Checkpaths
|
||||
if "%debug%"=="y" echo %file%: fullpath=%fullpath%
|
||||
if "%fullpath%"=="" goto :NoFile
|
||||
if "%debug%"=="y" echo CMD: %cc% -M %cflags% %fullpath%
|
||||
%cc% -M %cflags% %fullpath% || goto DepFail
|
||||
)
|
||||
goto :End
|
||||
|
||||
:NoPaths
|
||||
for %%G in (%files%) do (
|
||||
set fullpath=
|
||||
set file=%%G
|
||||
call :CheckFile %%G
|
||||
)
|
||||
goto :End
|
||||
|
||||
:CheckFile
|
||||
if "%debug%"=="y" echo Checkfile: Checking %file%
|
||||
if not exist %file% goto :NoFile
|
||||
set fullpath=%file%
|
||||
if "%debug%"=="y" echo CMD: %cc% -M %cflags% %fullpath%
|
||||
%cc% -M %cflags% %fullpath% || goto DepFail
|
||||
goto :EOF
|
||||
|
||||
:CheckPaths
|
||||
for %%H in (%altpath%) do (
|
||||
set tmppath=%%H\%file%
|
||||
if "%debug%"=="y" echo Checkfile: Checking %tmppath%
|
||||
if exist %tmppath% (
|
||||
set fullpath=%tmppath%
|
||||
goto :EOF
|
||||
)
|
||||
)
|
||||
goto :EOF
|
||||
|
||||
:NoFile
|
||||
echo ERROR: No readable file at %file%
|
||||
goto Usage
|
||||
|
||||
:DepFail
|
||||
echo ERROR: Failed to created dependencies for %file%
|
||||
|
||||
:Usage
|
||||
echo Usage: mkdeps [OPTIONS] CC -- CFLAGS -- file [file [file...]]
|
||||
echo Where:
|
||||
echo CC
|
||||
echo A variable number of arguments that define how to execute the compiler
|
||||
echo CFLAGS
|
||||
echo The compiler compilation flags
|
||||
echo file
|
||||
echo One or more C files whose dependencies will be checked. Each file is expected
|
||||
echo to reside in the current directory unless --dep-path is provided on the command line
|
||||
echo And [OPTIONS] include:
|
||||
echo --dep-debug
|
||||
echo Enable script debug
|
||||
echo --dep-path ^<path^>
|
||||
echo Do not look in the current directory for the file. Instead, look in <path> to see
|
||||
echo if the file resides there. --dep-path may be used multiple times to specify
|
||||
echo multiple alternative location
|
||||
echo --help
|
||||
echo Shows this message and exits
|
||||
|
||||
:End
|
||||
+599
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -2,7 +2,7 @@
|
||||
############################################################################
|
||||
# tools/mkdeps.sh
|
||||
#
|
||||
# Copyright (C) 2007-2009, 2011 Gregory Nutt. All rights reserved.
|
||||
# Copyright (C) 2007-2009, 2011-2012 Gregory Nutt. All rights reserved.
|
||||
# Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
|
||||
Reference in New Issue
Block a user