1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-01 13:41:34 +00:00

Added a separate include search path for binary includes. These aren't

searched any longer in the standard include path.


git-svn-id: svn://svn.cc65.org/cc65/trunk@4558 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
uz 2010-01-25 20:33:01 +00:00
parent 47a8b9191a
commit 79820fe4ec
6 changed files with 94 additions and 47 deletions

View File

@ -104,6 +104,7 @@ Short options:
Long options:
--auto-import Mark unresolved symbols as import
--bin-include-dir dir Set a search path for binary includes
--cpu type Set cpu type
--debug-info Add debug info to object file
--feature name Set an emulation feature
@ -123,13 +124,23 @@ Long options:
---------------------------------------------------------------------------
</verb></tscreen>
<sect1>Command line options in detail<p>
Here is a description of all the command line options:
<descrip>
<label id="option--bin-include-dir">
<tag><tt>--bin-include-dir dir</tt></tag>
Name a directory which is searched for binary include files. The option
may be used more than once to specify more than one directory to search. The
current directory is always searched first before considering any
additional directories. See also the section about <ref id="search-paths"
name="search paths">.
<label id="option--cpu">
<tag><tt>--cpu type</tt></tag>
@ -154,6 +165,7 @@ Here is a description of all the command line options:
command for a list of emulation features.
<label id="option--forget-inc-paths">
<tag><tt>--forget-inc-paths</tt></tag>
Forget the builtin include paths. This is most useful when building
@ -172,11 +184,13 @@ Here is a description of all the command line options:
monitor.
<label id="option-h">
<tag><tt>-h, --help</tt></tag>
Print the short option summary shown above.
<label id="option-i">
<tag><tt>-i, --ignore-case</tt></tag>
This option makes the assembler case insensitive on identifiers and labels.
@ -184,6 +198,7 @@ Here is a description of all the command line options:
<tt><ref id=".CASE" name=".CASE"></tt> control command.
<label id="option-l">
<tag><tt>-l, --listing</tt></tag>
Generate an assembler listing. The listing file will always have the
@ -191,6 +206,7 @@ Here is a description of all the command line options:
may change in future versions.
<label id="option--list-bytes">
<tag><tt>--list-bytes n</tt></tag>
Set the maximum number of bytes printed in the listing for one line of
@ -199,6 +215,7 @@ Here is a description of all the command line options:
number of printed bytes.
<label id="option--macpack-dir">
<tag><tt>--macpack-dir dir</tt></tag>
This options allows to specify a directory containing macro files that are
@ -209,12 +226,14 @@ Here is a description of all the command line options:
when debugging the builtin macro packages.
<label id="option-mm">
<tag><tt>-mm model, --memory-model model</tt></tag>
Define the default memory model. Possible model specifiers are near, far and
huge.
<label id="option-o">
<tag><tt>-o name</tt></tag>
The default output name is the name of the input file with the extension
@ -223,12 +242,14 @@ Here is a description of all the command line options:
the source file, or, if -o is given, the full path in this name is used.
<label id="option--pagelength">
<tag><tt>--pagelength n</tt></tag>
sets the length of a listing page in lines. See the <tt><ref
id=".PAGELENGTH" name=".PAGELENGTH"></tt> directive for more information.
<label id="option-s">
<tag><tt>-s, --smart-mode</tt></tag>
In smart mode (enabled by -s or the <tt><ref id=".SMART" name=".SMART"></tt>
@ -254,6 +275,7 @@ Here is a description of all the command line options:
compiler, see there for a list.
<label id="option-v">
<tag><tt>-v, --verbose</tt></tag>
Increase the assembler verbosity. Usually only needed for debugging
@ -261,6 +283,7 @@ Here is a description of all the command line options:
verbose output.
<label id="option-D">
<tag><tt>-D</tt></tag>
This option allows you to define symbols on the command line. Without a
@ -270,6 +293,7 @@ Here is a description of all the command line options:
you may have to quote the expression.
<label id="option-I">
<tag><tt>-I dir, --include-dir dir</tt></tag>
Name a directory which is searched for include files. The option may be
@ -279,6 +303,7 @@ Here is a description of all the command line options:
name="search paths">.
<label id="option-U">
<tag><tt>-U, --auto-import</tt></tag>
Mark symbols that are not defined in the sources as imported symbols. This
@ -290,6 +315,7 @@ Here is a description of all the command line options:
which is not always true for assembler programmers.
<label id="option-V">
<tag><tt>-V, --version</tt></tag>
Print the version number of the assembler. If you send any suggestions
@ -311,7 +337,7 @@ Here is a description of all the command line options:
<sect>Search paths<label id="search-paths"><p>
Include files are searched in the following places:
Normal include files are searched in the following places:
<enum>
<item>The current directory.
@ -320,7 +346,16 @@ Include files are searched in the following places:
<item>The value of the environment variable <tt/CA65_INC/ if it is defined.
<item>A subdirectory named <tt/asminc/ of the directory defined in the
environment variable <tt/CC65_HOME/, if it is defined.
<item>Any directory added with the <tt/-I/ option on the command line.
<item>Any directory added with the <tt/<ref id="option-I" name="-I">/ option
on the command line.
</enum>
Binary include files are searched in the following places:
<enum>
<item>The current directory.
<item>Any directory added with the <tt/<ref id="option--bin-include-dir"
name="--bin-include-dir">/ option on the command line.
</enum>

View File

@ -6,7 +6,7 @@
/* */
/* */
/* */
/* (C) 2000-2009, Ullrich von Bassewitz */
/* (C) 2000-2010, Ullrich von Bassewitz */
/* Roemerstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
@ -41,37 +41,27 @@
/*****************************************************************************/
/* Data */
/*****************************************************************************/
#define INC_STD 0x0001U
/*****************************************************************************/
/* Code */
/*****************************************************************************/
void AddIncludePath (const char* NewPath)
void AddIncludePath (const char* NewPath, unsigned Where)
/* Add a new include path to the existing one */
{
AddSearchPath (NewPath, INC_STD);
AddSearchPath (NewPath, Where);
}
char* FindInclude (const char* Name)
char* FindInclude (const char* Name, unsigned Where)
/* Find an include file. Return a pointer to a malloced area that contains
* the complete path, if found, return 0 otherwise.
*/
{
/* Search in the include directories */
return SearchFile (Name, INC_STD);
return SearchFile (Name, Where);
}
@ -79,7 +69,7 @@ char* FindInclude (const char* Name)
void ForgetAllIncludePaths (void)
/* Remove all include search paths. */
{
ForgetAllSearchPaths (INC_STD);
ForgetAllSearchPaths (INC_STD | INC_BIN);
}
@ -88,7 +78,8 @@ void InitIncludePaths (void)
/* Initialize the include path search list */
{
/* Add some standard paths to the include search path */
AddSearchPath ("", INC_STD); /* Current directory */
AddSearchPath ("", INC_STD); /* Current directory */
AddSearchPath ("", INC_BIN);
/* Add some compiled in search paths if defined at compile time */
#ifdef CA65_INC

View File

@ -6,7 +6,7 @@
/* */
/* */
/* */
/* (C) 2000-2009, Ullrich von Bassewitz */
/* (C) 2000-2010, Ullrich von Bassewitz */
/* Roemerstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
@ -38,16 +38,27 @@
/*****************************************************************************/
/* Data */
/*****************************************************************************/
#define INC_STD 0x0001U /* Add to standard include path */
#define INC_BIN 0x0002U /* Add to binary include path */
/*****************************************************************************/
/* Code */
/*****************************************************************************/
void AddIncludePath (const char* NewPath);
void AddIncludePath (const char* NewPath, unsigned Where);
/* Add a new include path to the existing one */
char* FindInclude (const char* Name);
char* FindInclude (const char* Name, unsigned Where);
/* Find an include file. Return a pointer to a malloced area that contains
* the complete path, if found, return 0 otherwise.
*/

View File

@ -6,7 +6,7 @@
/* */
/* */
/* */
/* (C) 1998-2009, Ullrich von Bassewitz */
/* (C) 1998-2010, Ullrich von Bassewitz */
/* Roemerstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
@ -106,6 +106,7 @@ static void Usage (void)
"\n"
"Long options:\n"
" --auto-import\t\tMark unresolved symbols as import\n"
" --bin-include-dir dir\tSet a search path for binary includes\n"
" --cpu type\t\tSet cpu type\n"
" --debug-info\t\tAdd debug info to object file\n"
" --feature name\tSet an emulation feature\n"
@ -341,6 +342,14 @@ static void OptAutoImport (const char* Opt attribute ((unused)),
static void OptBinIncludeDir (const char* Opt attribute ((unused)), const char* Arg)
/* Add an include search path for binaries */
{
AddIncludePath (Arg, INC_BIN);
}
static void OptCPU (const char* Opt attribute ((unused)), const char* Arg)
/* Handle the --cpu option */
{
@ -408,7 +417,7 @@ static void OptIgnoreCase (const char* Opt attribute ((unused)),
static void OptIncludeDir (const char* Opt attribute ((unused)), const char* Arg)
/* Add an include search path */
{
AddIncludePath (Arg);
AddIncludePath (Arg, INC_STD);
}
@ -785,6 +794,7 @@ int main (int argc, char* argv [])
/* Program long options */
static const LongOpt OptTab[] = {
{ "--auto-import", 0, OptAutoImport },
{ "--bin-include-dir", 1, OptBinIncludeDir },
{ "--cpu", 1, OptCPU },
{ "--debug-info", 0, OptDebugInfo },
{ "--feature", 1, OptFeature },

View File

@ -6,7 +6,7 @@
/* */
/* */
/* */
/* (C) 1998-2009, Ullrich von Bassewitz */
/* (C) 1998-2010, Ullrich von Bassewitz */
/* Roemerstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
@ -1113,8 +1113,8 @@ static void DoIncBin (void)
F = fopen (SB_GetConstBuf (&Name), "rb");
if (F == 0) {
/* Search for the file in the include directories. */
char* PathName = FindInclude (SB_GetConstBuf (&Name));
/* Search for the file in the binary include directory */
char* PathName = FindInclude (SB_GetConstBuf (&Name), INC_BIN);
if (PathName == 0 || (F = fopen (PathName, "r")) == 0) {
/* Not found or cannot open, print an error and bail out */
ErrorSkip ("Cannot open include file `%m%p': %s", &Name, strerror (errno));
@ -1135,18 +1135,18 @@ static void DoIncBin (void)
/* If a count was not given, calculate it now */
if (Count < 0) {
Count = Size - Start;
if (Count < 0) {
/* Nothing to read - flag this as a range error */
ErrorSkip ("Range error");
goto Done;
}
Count = Size - Start;
if (Count < 0) {
/* Nothing to read - flag this as a range error */
ErrorSkip ("Range error");
goto Done;
}
} else {
/* Count was given, check if it is valid */
if (Start + Count > Size) {
ErrorSkip ("Range error");
goto Done;
}
/* Count was given, check if it is valid */
if (Start + Count > Size) {
ErrorSkip ("Range error");
goto Done;
}
}
/* Seek to the start position */
@ -1155,12 +1155,12 @@ static void DoIncBin (void)
/* Read chunks and insert them into the output */
while (Count > 0) {
unsigned char Buf [1024];
unsigned char Buf [1024];
/* Calculate the number of bytes to read */
/* Calculate the number of bytes to read */
size_t BytesToRead = (Count > (long)sizeof(Buf))? sizeof(Buf) : (size_t) Count;
/* Read chunk */
/* Read chunk */
size_t BytesRead = fread (Buf, 1, BytesToRead, F);
if (BytesToRead != BytesRead) {
/* Some sort of error */

View File

@ -6,10 +6,10 @@
/* */
/* */
/* */
/* (C) 1998-2008 Ullrich von Bassewitz */
/* Roemerstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
/* (C) 1998-2010, Ullrich von Bassewitz */
/* Roemerstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
/* */
/* */
/* This software is provided 'as-is', without any expressed or implied */
@ -452,7 +452,7 @@ int NewInputFile (const char* Name)
/* We are on include level. Search for the file in the include
* directories.
*/
PathName = FindInclude (Name);
PathName = FindInclude (Name, INC_STD);
if (PathName == 0 || (F = fopen (PathName, "r")) == 0) {
/* Not found or cannot open, print an error and bail out */
Error ("Cannot open include file `%s': %s", Name, strerror (errno));