Make the addition of the local directory optional (include path).
In the past we automatically added the local directory to the beginning of the include search path. This was found to conflict with what other tools do so this functionality is now only available when the -grelative-include option is given to iverilog.
This commit is contained in:
parent
87541ce335
commit
0ea0bffd9a
|
|
@ -1,4 +1,4 @@
|
|||
.TH iverilog 1 "April 22nd, 2008" "" "Version 0.9.devel"
|
||||
.TH iverilog 1 "February 4th, 2009" "" "Version 0.9.devel"
|
||||
.SH NAME
|
||||
iverilog - Icarus Verilog compiler
|
||||
|
||||
|
|
@ -81,6 +81,13 @@ include directory after all other explicit include directories. This
|
|||
standard include directory is a convenient place to install standard
|
||||
header files that a Verilog program may include.
|
||||
.TP 8
|
||||
.B -grelative-include\fI|\fP-gno-relative-include
|
||||
Enable or disable (default) adding the local files directory to
|
||||
the beginning of the include file search path. This allows files
|
||||
to be included relative to the current file not the more common
|
||||
files are only found in the working directory or in the specified
|
||||
include file search path.
|
||||
.TP 8
|
||||
.B -gxtypes\fI|\fP-gno-xtypes
|
||||
Enable (default) or disable support for extended types. Enabling
|
||||
extended types allows for new types that are supported by Icarus
|
||||
|
|
|
|||
|
|
@ -120,6 +120,10 @@ const char*gen_system_verilog = "no-system-verilog";
|
|||
/* Boolean: true means use a default include dir, false means don't */
|
||||
int gen_std_include = 1;
|
||||
|
||||
/* Boolean: true means add the local file directory to the start
|
||||
of the include list. */
|
||||
int gen_relative_include = 0;
|
||||
|
||||
char warning_flags[16] = "";
|
||||
|
||||
unsigned integer_width = 32;
|
||||
|
|
@ -594,6 +598,12 @@ int process_generation(const char*name)
|
|||
|
||||
else if (strcmp(name,"no-std-include") == 0)
|
||||
gen_std_include = 0;
|
||||
|
||||
else if (strcmp(name,"relative-include") == 0)
|
||||
gen_relative_include = 1;
|
||||
|
||||
else if (strcmp(name,"no-relative-include") == 0)
|
||||
gen_relative_include = 0;
|
||||
|
||||
else if (strcmp(name,"io-range-error") == 0)
|
||||
gen_io_range_error = "io-range-error";
|
||||
|
|
@ -613,7 +623,7 @@ int process_generation(const char*name)
|
|||
else if (strcmp(name,"no-verilog-ams") == 0)
|
||||
gen_verilog_ams = "no-verilog-ams";
|
||||
|
||||
else if (strcmp(name,"system-verilog") == 0)
|
||||
else if (strcmp(name,"system-verilog") == 0)
|
||||
gen_system_verilog = "system-verilog";
|
||||
|
||||
else {
|
||||
|
|
@ -627,10 +637,11 @@ int process_generation(const char*name)
|
|||
" specify | no-specify\n"
|
||||
" verilog-ams | no-verilog-ams\n"
|
||||
" std-include | no-std-include\n"
|
||||
" relative-include | no-relative-include\n"
|
||||
" xtypes | no-xtypes\n"
|
||||
" icarus-misc | no-icarus-misc\n"
|
||||
" io-range-error | no-io-range-error\n"
|
||||
" strict-ca-eval | no-strict-ca-eval\n"
|
||||
" strict-ca-eval | no-strict-ca-eval\n"
|
||||
" system-verilog\n");
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -941,7 +952,13 @@ int main(int argc, char **argv)
|
|||
specifically disabled, then write that directory as the
|
||||
very last include directory to use... always. */
|
||||
if (gen_std_include) {
|
||||
fprintf(defines_file, "I:%s%cinclude", base, sep);
|
||||
fprintf(defines_file, "I:%s%cinclude\n", base, sep);
|
||||
}
|
||||
|
||||
if (gen_relative_include) {
|
||||
fprintf(defines_file, "relative include:true\n");
|
||||
} else {
|
||||
fprintf(defines_file, "relative include:false\n");
|
||||
}
|
||||
|
||||
fclose(source_file);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef __globals_H
|
||||
#define __globals_H
|
||||
/*
|
||||
* Copyright (c) 1999-2008 Stephen Williams (steve@icarus.com)
|
||||
* Copyright (c) 1999-2009 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* This source code is free software; you can redistribute it
|
||||
* and/or modify it in source code form under the terms of the GNU
|
||||
|
|
@ -34,6 +34,8 @@ extern void dump_precompiled_defines(FILE*out);
|
|||
extern char**include_dir;
|
||||
extern unsigned include_cnt;
|
||||
|
||||
extern int relative_include;
|
||||
|
||||
/* This flag is true if #line directives are to be generated. */
|
||||
extern int line_direct_flag;
|
||||
|
||||
|
|
|
|||
|
|
@ -1422,8 +1422,7 @@ static void output_init()
|
|||
|
||||
static void include_filename()
|
||||
{
|
||||
if(standby)
|
||||
{
|
||||
if(standby) {
|
||||
emit_pathline(istack);
|
||||
fprintf
|
||||
(
|
||||
|
|
@ -1443,14 +1442,11 @@ static void include_filename()
|
|||
static void do_include()
|
||||
{
|
||||
/* standby is defined by include_filename() */
|
||||
if (standby->path[0] == '/')
|
||||
{
|
||||
if (standby->path[0] == '/') {
|
||||
if ((standby->file = fopen(standby->path, "r")))
|
||||
goto code_that_switches_buffers;
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned idx, start = 0;
|
||||
} else {
|
||||
unsigned idx, start = 1;
|
||||
char path[4096];
|
||||
char *cp;
|
||||
|
||||
|
|
@ -1458,20 +1454,18 @@ static void do_include()
|
|||
strcpy(path, istack->path);
|
||||
cp = strrchr(path, '/');
|
||||
|
||||
if (cp == 0)
|
||||
start = 1; /* A base file so already in [1] */
|
||||
else
|
||||
{
|
||||
/* I may need the relative path for a planned warning even when
|
||||
* we are not in relative mode, so for now keep it around. */
|
||||
if (cp != 0) {
|
||||
*cp = '\0';
|
||||
include_dir[0] = strdup(path);
|
||||
if (relative_include) start = 0;
|
||||
}
|
||||
|
||||
for (idx = start ; idx < include_cnt ; idx += 1)
|
||||
{
|
||||
for (idx = start ; idx < include_cnt ; idx += 1) {
|
||||
sprintf(path, "%s/%s", include_dir[idx], standby->path);
|
||||
|
||||
if ((standby->file = fopen(path, "r")))
|
||||
{
|
||||
if ((standby->file = fopen(path, "r"))) {
|
||||
/* Free the original path before we overwrite it. */
|
||||
free(standby->path);
|
||||
standby->path = strdup(path);
|
||||
|
|
|
|||
|
|
@ -83,6 +83,8 @@ void add_source_file(const char*name)
|
|||
char**include_dir = 0;
|
||||
unsigned include_cnt = 0;
|
||||
|
||||
int relative_include = 0;
|
||||
|
||||
int line_direct_flag = 0;
|
||||
|
||||
unsigned error_count = 0;
|
||||
|
|
@ -151,6 +153,13 @@ static int flist_read_flags(const char*path)
|
|||
dep_path = strdup(arg);
|
||||
}
|
||||
|
||||
} else if (strcmp(cp,"relative include") == 0) {
|
||||
if (strcmp(arg, "true") == 0) {
|
||||
relative_include = 1;
|
||||
} else {
|
||||
relative_include = 0;
|
||||
}
|
||||
|
||||
} else {
|
||||
fprintf(stderr, "%s: Invalid keyword %s\n", path, cp);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue