From d6f92fe62b5e8828628de5f282c0b627335ccec1 Mon Sep 17 00:00:00 2001 From: cxgeorge <> Date: Tue, 17 Dec 2002 02:08:49 +0000 Subject: [PATCH] new installer build system --- dtool/Config.pp | 32 ++--- dtool/pptempl/Depends.pp | 9 +- dtool/pptempl/Global.gmsvc.pp | 28 +++-- dtool/pptempl/Global.pp | 42 ++++--- dtool/pptempl/Template.gmsvc.pp | 154 ++++++++++++++++------- dtool/pptempl/compilerSettings.pp | 199 ++++++++++++++++-------------- 6 files changed, 272 insertions(+), 192 deletions(-) diff --git a/dtool/Config.pp b/dtool/Config.pp index 5eee01c671..2de724c5b4 100644 --- a/dtool/Config.pp +++ b/dtool/Config.pp @@ -32,7 +32,7 @@ // syntax used in the various ppremake system configure files; it's // designed to be easy to use as a macro language to generate // makefiles and their ilk. -// +// // Some of the variables below are defined using the #define command, // and others are defined using #defer. The two are very similar in @@ -191,7 +191,7 @@ // necessary if the default include and link lines that come with the // compiler don't provide adequate STL support. At least some form of // STL is absolutely required in order to build Panda. -#define STL_IPATH +#define STL_IPATH #define STL_LPATH #define STL_CFLAGS #define STL_LIBS @@ -266,7 +266,7 @@ #if $[WINDOWS_PLATFORM] #defer GL_IPATH #defer GL_LPATH - #define GL_LIBS opengl32.lib glu32.lib + #define GL_LIBS opengl32.lib glu32.lib #else #defer GL_IPATH #defer GL_LPATH /usr/X11R6/lib @@ -356,9 +356,9 @@ #defer NOTIFY_DEBUG $[< $[OPTIMIZE], 4] // Do you want to build the audio interface? -#define HAVE_AUDIO 1 +#define HAVE_AUDIO 1 -// Info for the RAD game tools, Miles Sound System +// Info for the RAD game tools, Miles Sound System // note this may be overwritten in wintools Config.pp #define RAD_MSS_IPATH /usr/include/Miles6/include #define RAD_MSS_LPATH /usr/lib/Miles6/lib/win @@ -412,7 +412,7 @@ //#define LINK_IN_EGG yes //#define LINK_IN_PHYSICS yes -// Define USE_COMPILER to switch the particular compiler that should +// Define USE_COMPILER to switch the particular compiler that should // be used. A handful of tokens are recognized, depending on BUILD_TYPE. // This may also be further customized within Global.$[BUILD_TYPE].pp. @@ -429,7 +429,7 @@ #if $[WINDOWS_PLATFORM] #if $[eq $[USE_COMPILER],] #define USE_COMPILER MSVC7 - #endif + #endif #elif $[eq $[PLATFORM], Irix] #define USE_COMPILER MIPS #elif $[eq $[PLATFORM], Linux] @@ -443,7 +443,7 @@ // need to have these programs if you need to make changes to the // bison or flex sources (see the next point, below). #defer BISON bison -#defer FLEX flex +#defer FLEX flex // You may not even have bison and flex installed. If you don't, no // sweat; Panda ships with the pre-generated output of these programs, @@ -466,7 +466,9 @@ // However, don't define this to be '.', or you will be very sad the // next time you run 'make clean'. //#defer ODIR Opt$[OPTIMIZE]-$[PLATFORM]$[USE_COMPILER] -#defer ODIR Opt$[OPTIMIZE]-$[PLATFORM] +// ODIR_SUFFIX is optional, usually empty +#defer ODIR Opt$[OPTIMIZE]-$[PLATFORM]$[ODIR_SUFFIX] + // What is the normal extension of a compiled object file? #if $[WINDOWS_PLATFORM] @@ -568,7 +570,7 @@ #if $[eq $[USE_COMPILER], MIPS] #define CC cc -n32 -mips3 #define CXX CC -n32 -mips3 - + // Turn off a few annoying warning messages. // 1174 - function 'blah' was declared but never used // 1201 - trailing comma is nonstandard. @@ -585,20 +587,20 @@ // 85 - definition of SOMESYMBOL in SOMELIB preempts that of definition in // SOMEOTHERLIB. #define WOFF_LIST $[WOFF_LIST] -Wl,-LD_MSG:off=85 - + #defer OPTFLAGS -O2 -OPT:Olimit=2500 - + #defer CFLAGS_OPT1 $[CDEFINES_OPT1:%=-D%] $[WOFF_LIST] -g #defer CFLAGS_OPT2 $[CDEFINES_OPT2:%=-D%] $[WOFF_LIST] #defer CFLAGS_OPT3 $[CDEFINES_OPT3:%=-D%] $[WOFF_LIST] #defer CFLAGS_OPT4 $[CDEFINES_OPT4:%=-D%] $[WOFF_LIST] - + #defer CFLAGS_SHARED - + #defer STATIC_LIB_C $[CC] -ar -o $[target] $[sources] #defer STATIC_LIB_C++ $[CXX] -ar -o $[target] $[sources] #defer RANLIB - + #define SHARED_FLAGS -Wl,-none -Wl,-update_registry,$[TOPDIR]/so_locations #defer SHARED_LIB_C $[CC] -shared $[SHARED_FLAGS] -o $[target] $[sources] $[lpath:%=-L%] $[libs:%=-l%] #defer SHARED_LIB_C++ $[CXX] -shared $[SHARED_FLAGS] -o $[target] $[sources] $[lpath:%=-L%] $[libs:%=-l%] diff --git a/dtool/pptempl/Depends.pp b/dtool/pptempl/Depends.pp index 3fbc2fbff9..dced233b35 100644 --- a/dtool/pptempl/Depends.pp +++ b/dtool/pptempl/Depends.pp @@ -36,13 +36,12 @@ // various Template.*.pp files will be able to reliably access // $[compile_sources] from the different directories. #define composite_list - // Tag all the static libraries by defining the "lib_is_static" variable. #forscopes static_lib_target ss_lib_target #define lib_is_static 1 #end static_lib_target ss_lib_target - #forscopes metalib_target lib_target noinst_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target + #forscopes metalib_target lib_target noinst_lib_target test_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target // We can optimize quite a bit by evaluating now several of the key // deferred variables defined in Globals.pp. This way they won't need // to get repeatedly reevaluated as each directory examines each @@ -69,13 +68,13 @@ // Now compute the source files. #define c_sources $[filter %.c,$[get_sources]] - #define cxx_sources $[filter-out %_src.cxx,$[filter %.cxx,$[get_sources]]] + #define cxx_sources $[filter-out %_src.cxx,$[filter %.cxx %.cpp,$[get_sources]]] #define yxx_sources $[filter %.yxx,$[get_sources]] #define lxx_sources $[filter %.lxx,$[get_sources]] // Define what the object files are. #foreach file $[c_sources] $[cxx_sources] $[yxx_sources] $[lxx_sources] - #define $[file]_obj $[patsubst %.c %.cxx %.yxx %.lxx,$[ODIR]/$[TARGET]_%$[OBJ],$[file]] + #define $[file]_obj $[patsubst %.c %.cxx %.cpp %.yxx %.lxx,$[ODIR]/$[TARGET]_%$[OBJ],$[notdir $[file]]] #push 1 $[file]_obj #end file @@ -132,7 +131,7 @@ #define compile_sources $[c_sources] $[cxx_sources] - #end metalib_target lib_target noinst_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target + #end metalib_target lib_target noinst_lib_target test_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target // Allow the user to define additional EXTRA_DEPENDS targets in each // Sources.pp. diff --git a/dtool/pptempl/Global.gmsvc.pp b/dtool/pptempl/Global.gmsvc.pp index f4a3b7d18a..b89def5aad 100644 --- a/dtool/pptempl/Global.gmsvc.pp +++ b/dtool/pptempl/Global.gmsvc.pp @@ -11,7 +11,7 @@ // encapsulates each of the libraries we'd be linking with normally. // In the case where a particular library is not part of a metalib, // we include the library itself. - + #define actual_libs #foreach lib $[complete_libs] // Only consider libraries that we're actually building. @@ -57,12 +57,12 @@ #if $[ne $[LINK_ALL_STATIC],] #define dlink_all_static LINK_ALL_STATIC #define build_dlls - #define build_libs yes + #define build_libs yes #define dlllib lib #else #define dlink_all_static #define build_dlls yes - #define build_libs + #define build_libs #define dlllib dll #endif @@ -80,8 +80,8 @@ #defer CDEFINES_OPT4 NDEBUG $[dlink_all_static] $[EXTRA_CDEFS] $[CDEFINES_OPT4] // Opt1 /GZ disables OPT flags, so make sure its OPT1 only -#defer CFLAGS_OPT1 $[CDEFINES_OPT1:%=/D%] $[COMMONFLAGS] $[DEBUGFLAGS] $[OPT1FLAGS] -#defer CFLAGS_OPT2 $[CDEFINES_OPT2:%=/D%] $[COMMONFLAGS] $[DEBUGFLAGS] $[OPTFLAGS] +#defer CFLAGS_OPT1 $[CDEFINES_OPT1:%=/D%] $[COMMONFLAGS] $[DEBUGFLAGS] $[OPT1FLAGS] +#defer CFLAGS_OPT2 $[CDEFINES_OPT2:%=/D%] $[COMMONFLAGS] $[DEBUGFLAGS] $[OPTFLAGS] #defer CFLAGS_OPT3 $[CDEFINES_OPT3:%=/D%] $[COMMONFLAGS] $[RELEASEFLAGS] $[OPTFLAGS] $[DEBUGPDBFLAGS] #defer CFLAGS_OPT4 $[CDEFINES_OPT4:%=/D%] $[COMMONFLAGS] $[RELEASEFLAGS] $[OPTFLAGS] $[OPT4FLAGS] $[DEBUGPDBFLAGS] @@ -107,6 +107,11 @@ // distinction is so important in Windows). #define dllext $[if $[<= $[OPTIMIZE],2],_d] +// note: does NOT include .dll or .lib at end +#defun get_dllname dll_basename + $[if $[ne $[DONT_USE_PANDA_DLL_NAMING],], $[dll_basename], lib$[dll_basename]$[dllext]] +#end get_dllname + #defer interrogate_ipath $[decygwin %,-I"%",$[target_ipath]] #defer interrogate_spath $[decygwin %,-S"%",$[install_parser_inc_dir]] @@ -118,13 +123,16 @@ #defer COMPILE_C $[COMPILER] /Fo"$[osfilename $[target]]" $[MAIN_C_COMPILE_ARGS] #defer COMPILE_C++ $[COMPILE_C] -#defer STATIC_LIB_C $[LIBBER] /nologo $[sources] /OUT:"$[osfilename $[target]]" +#defer STATIC_LIB_C $[LIBBER] /nologo $[sources] /OUT:"$[osfilename $[target]]" #defer STATIC_LIB_C++ $[STATIC_LIB_C] +#defer COMPILE_IDL midl /nologo /env win32 /Oicf $[DECYGWINED_INC_PATHLIST_ARGS] +#defer COMPILE_RC rc /R /D "NDEBUG" /L 0x409 $[DECYGWINED_INC_PATHLIST_ARGS] + // if we're attached, use dllbase.txt. otherwise let OS loader resolve dll addrspace collisions #if $[ne $[DTOOL],] // use predefined bases to speed dll loading and simplify debugging -#defer DLLNAMEBASE lib$[TARGET]$[dllext] +#defer DLLNAMEBASE $[get_dllname $[TARGET]] #defer DLLBASEADDRFILENAME dllbase.txt #defer DLLBASEARG "/BASE:@$[dtool_ver_dir]\$[DLLBASEADDRFILENAME],$[DLLNAMEBASE]" #else @@ -132,9 +140,11 @@ #define GENERATE_BUILDDATE #endif +#defer LINKER_DEF_FILE_ARG $[if $[LINKER_DEF_FILE],/DEF:"$[LINKER_DEF_FILE]",] + //#defer ver_resource $[directory]\ver.res -//#defer SHARED_LIB_C link /nologo /dll /VERBOSE:LIB $[LDFLAGS_OPT$[OPTIMIZE]] /OUT:"$[osfilename $[target]]" $[sources] $[decygwin %,/LIBPATH:"%",$[lpath]] $[patsubst %.lib,%.lib,%,lib%.lib,$[libs]] -#defer SHARED_LIB_C $[LINKER] /nologo /dll $[LDFLAGS_OPT$[OPTIMIZE]] $[DLLBASEARG] /OUT:"$[osfilename $[target]]" $[sources] $[decygwin %,/LIBPATH:"%",$[lpath] $[EXTRA_LIBPATH]] $[patsubst %.lib,%.lib,%,lib%.lib,$[libs]] +//#defer SHARED_LIB_C link /nologo /dll /VERBOSE:LIB $[LDFLAGS_OPT$[OPTIMIZE]] /OUT:"$[osfilename $[target]]" $[sources] $[decygwin %,/LIBPATH:"%",$[lpath]] $[patsubst %.lib,%.lib,%,lib%.lib,$[libs]] +#defer SHARED_LIB_C $[LINKER] /nologo /DLL $[LINKER_DEF_FILE_ARG] $[LDFLAGS_OPT$[OPTIMIZE]] $[DLLBASEARG] /OUT:"$[osfilename $[target]]" $[sources] $[decygwin %,/LIBPATH:"%",$[lpath] $[EXTRA_LIBPATH]] $[patsubst %.lib,%.lib,%,lib%.lib,$[libs]] #defer SHARED_LIB_C++ $[SHARED_LIB_C] #defer LINK_BIN_C $[LINKER] /nologo $[LDFLAGS_OPT$[OPTIMIZE]] $[sources] $[decygwin %,/LIBPATH:"%",$[lpath] $[EXTRA_LIBPATH]] $[patsubst %.lib,%.lib,%,lib%.lib,$[libs]] /OUT:"$[osfilename $[target]]" diff --git a/dtool/pptempl/Global.pp b/dtool/pptempl/Global.pp index 51f787568c..01680d5c7f 100644 --- a/dtool/pptempl/Global.pp +++ b/dtool/pptempl/Global.pp @@ -35,7 +35,7 @@ // variable as set for the dconfig library (that is, the expression // $[SOURCES] is evaluated within the named scope whose key is // "dconfig"--whose variable $[TARGET] was defined to be "dconfig"). -#map all_libs TARGET(*/static_lib_target */ss_lib_target */lib_target */noinst_lib_target */metalib_target) +#map all_libs TARGET(*/static_lib_target */ss_lib_target */lib_target */noinst_lib_target */test_lib_target */metalib_target) // This map variable allows us to look up global variables that might // be defined in a particular Sources.pp, e.g. in the "toplevel" file. @@ -51,10 +51,10 @@ // Windows). #if $[WINDOWS_PLATFORM] #map static_libs TARGET(*/static_lib_target */ss_lib_target) - #map dynamic_libs TARGET(*/lib_target */noinst_lib_target */metalib_target) + #map dynamic_libs TARGET(*/lib_target */noinst_lib_target */test_lib_target */metalib_target) #else #map static_libs TARGET(*/static_lib_target) - #map dynamic_libs TARGET(*/lib_target */ss_lib_target */noinst_lib_target */metalib_target) + #map dynamic_libs TARGET(*/lib_target */ss_lib_target */noinst_lib_target */test_lib_target */metalib_target) #endif // This lets us identify which metalib, if any, is including each @@ -63,7 +63,7 @@ #map module COMPONENT_LIBS(*/metalib_target) // This lets up look up components of a particular metalib. -#map components TARGET(*/lib_target */noinst_lib_target) +#map components TARGET(*/lib_target */noinst_lib_target */test_lib_target) // And this lets us look up source directories by dirname. #map dirnames DIRNAME(*/) @@ -114,7 +114,7 @@ #if $[HAVE_SOXST] #define soxst_ipath $[wildcard $[SOXST_IPATH]] - #define soxst_lpath $[wildcard $[SOXST_LPATH]] + #define soxst_lpath $[wildcard $[SOXST_LPATH]] #define soxst_cflags $[SOXST_CFLAGS] #define soxst_libs $[SOXST_LIBS] #endif @@ -293,7 +293,7 @@ $[if $[ne $[NO_COMBINED_SOURCES],], $[INCLUDED_SOURCES], $[get_combined_sources]] #defer included_sources $[INCLUDED_SOURCES] - + // This variable returns the set of sources that are to be // interrogated for the current target. #defer get_igatescan \ @@ -326,12 +326,13 @@ // This variable returns the set of external packages used by this // target, and by all the components shared by this target. #defer use_packages $[sort $[USE_PACKAGES] $[components $[USE_PACKAGES],$[active_component_libs]]] - + // This function returns the appropriate cflags for the target, based // on the various external packages this particular target claims to // require. #defun get_cflags - #define alt_cflags $[stl_cflags] $[nspr_cflags] $[python_cflags] + // hack to add stl,nspr,python. should be removed + #define alt_cflags $[if $[IGNORE_LIB_DEFAULTS_HACK],,$[stl_cflags] $[nspr_cflags] $[python_cflags]] #foreach package $[use_packages] #set alt_cflags $[alt_cflags] $[$[package]_cflags] @@ -345,8 +346,9 @@ // claims to require. This returns a space-separated set of directory // names only; the -I switch is not included here. #defun get_ipath - #define alt_ipath $[stl_ipath] $[nspr_ipath] $[python_ipath] - + // hack to add stl,nspr,python. should be removed + #define alt_ipath $[if $[IGNORE_LIB_DEFAULTS_HACK],,$[stl_ipath] $[nspr_ipath] $[python_ipath]] + #foreach package $[use_packages] #set alt_ipath $[alt_ipath] $[$[package]_ipath] #end package @@ -359,11 +361,11 @@ // target claims to require. This returns a space-separated set of // directory names only; the -L switch is not included here. #defun get_lpath - #define alt_lpath $[stl_lpath] $[nspr_lpath] $[python_lpath] - - #if $[WINDOWS_PLATFORM] - #set alt_lpath $[WIN32_PLATFORMSDK_LIBPATH] $[alt_lpath] - #endif + #define alt_lpath $[if $[IGNORE_LIB_DEFAULTS_HACK],,$[stl_lpath] $[nspr_lpath] $[python_lpath]] + + #if $[WINDOWS_PLATFORM] + #set alt_lpath $[WIN32_PLATFORMSDK_LIBPATH] $[alt_lpath] + #endif #foreach package $[use_packages] #set alt_lpath $[alt_lpath] $[$[package]_lpath] @@ -378,7 +380,7 @@ // space-separated set of library names only; the -l switch is not // included here. #defun get_libs - #define alt_libs $[stl_libs] $[nspr_libs] $[python_libs] $[TARGET_LIBS] + #define alt_libs $[if $[IGNORE_LIB_DEFAULTS_HACK],,$[stl_libs] $[nspr_libs] $[python_libs]] #if $[WINDOWS_PLATFORM] #set alt_libs $[alt_libs] $[WIN_SYS_LIBS] $[components $[WIN_SYS_LIBS],$[active_component_libs] $[transitive_link]] @@ -412,7 +414,7 @@ $[dependencies $[source]] #endif #end get_depends - + // This function determines the set of libraries our various targets // depend on. This is a complicated definition. It is the union of @@ -425,7 +427,7 @@ // the same as case (b) above. #defun get_depend_libs #define depend_libs - #forscopes lib_target noinst_lib_target + #forscopes lib_target noinst_lib_target test_lib_target #define metalib $[module $[TARGET],$[TARGET]] #if $[ne $[metalib],] // This library is included on a metalib. @@ -455,8 +457,8 @@ #endif #end depend #endif - #end lib_target noinst_lib_target - + #end lib_target noinst_lib_target test_lib_target + // These will never be part of a metalib. #forscopes static_lib_target ss_lib_target bin_target noinst_bin_target metalib_target #foreach depend $[LOCAL_LIBS] diff --git a/dtool/pptempl/Template.gmsvc.pp b/dtool/pptempl/Template.gmsvc.pp index 60aa8decc8..3a66ef16bc 100644 --- a/dtool/pptempl/Template.gmsvc.pp +++ b/dtool/pptempl/Template.gmsvc.pp @@ -55,15 +55,25 @@ // $[lib_targets] will be the list of dynamic libraries, // $[static_lib_targets] the list of static libraries, and // $[bin_targets] the list of binaries. $[test_bin_targets] is the - // list of binaries that are to be built only when specifically asked - // for. - #define lib_targets $[patsubst %,$[ODIR]/lib%$[dllext].$[dlllib],$[active_target(metalib_target noinst_lib_target)] $[real_lib_targets]] - #define static_lib_targets $[active_target(static_lib_target ss_lib_target):%=$[ODIR]/lib%$[dllext].lib] + // list of binaries that are to be built only when specifically asked for. + + // #set requires pre-existing vars + #define lib_targets + #define static_lib_targets + + #forscopes lib_target noinst_lib_target test_lib_target + // get_dllname() needs to be evaluated in its lib's scope, but we need to build a global list, so use #set + #set lib_targets $[patsubst %,$[ODIR]/$[get_dllname %].$[dlllib],$[active_target(metalib_target noinst_lib_target test_lib_target)] $[real_lib_targets]] + #set static_lib_targets $[active_target(static_lib_target ss_lib_target):%=$[ODIR]/$[get_dllname %].lib] + #end lib_target noinst_lib_target test_lib_target + #define bin_targets \ $[active_target(bin_target noinst_bin_target):%=$[ODIR]/%.exe] \ $[active_target(sed_bin_target):%=$[ODIR]/%] #define test_bin_targets $[active_target(test_bin_target):%=$[ODIR]/%.exe] + #defer test_lib_targets $[active_target(test_lib_target):%=$[if $[TEST_ODIR],$[TEST_ODIR],$[ODIR]]/%.$[dlllib]] + // And these variables will define the various things we need to // install. #define install_lib $[active_target(metalib_target static_lib_target ss_lib_target)] $[real_lib_targets] @@ -77,15 +87,15 @@ // These are the various sources collected from all targets within the // directory. - #define st_sources $[sort $[compile_sources(metalib_target lib_target noinst_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target)]] - #define yxx_st_sources $[sort $[yxx_sources(metalib_target lib_target noinst_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target)]] - #define lxx_st_sources $[sort $[lxx_sources(metalib_target lib_target noinst_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target)]] - #define dep_sources_1 $[sort $[get_sources(metalib_target lib_target noinst_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target)]] + #define st_sources $[sort $[compile_sources(metalib_target lib_target noinst_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target test_lib_target)]] + #define yxx_st_sources $[sort $[yxx_sources(metalib_target lib_target noinst_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target test_lib_target)]] + #define lxx_st_sources $[sort $[lxx_sources(metalib_target lib_target noinst_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target test_lib_target)]] + #define dep_sources_1 $[sort $[get_sources(metalib_target lib_target noinst_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target test_lib_target)]] // These are the source files that our dependency cache file will // depend on. If it's an empty list, we won't bother writing rules to // freshen the cache file. - #define dep_sources $[sort $[filter %.c %.cxx %.yxx %.lxx %.h %.I %.T,$[dep_sources_1]]] + #define dep_sources $[sort $[filter %.c %.cxx %.cpp %.yxx %.lxx %.h %.I %.T,$[dep_sources_1]]] #endif // $[build_directory] @@ -107,8 +117,10 @@ // tree) we should add to our -I list. It's basically just one for // each directory named in the $[complete_local_libs], above, plus // whatever else the user might have explicitly named in -// $[LOCAL_INCS]. -#defer complete_ipath $[all_libs $[RELDIR],$[complete_local_libs]] $[RELDIR($[LOCAL_INCS:%=%/])] +// $[LOCAL_INCS]. LOCAL_INCS MUST be a ppremake src dir! (RELDIR only checks those) +// To add an arbitrary extra include dir, define EXTRA_IPATH in the Sources.pp + +#defer complete_ipath $[all_libs $[RELDIR],$[complete_local_libs]] $[RELDIR($[LOCAL_INCS:%=%/])] $[EXTRA_IPATH] // $[target_ipath] is the proper ipath to put on the command line, // from the context of a particular target. @@ -150,7 +162,7 @@ // Similarly, we need to ensure that $[ODIR] exists. Trying to make // the makefiles do this automatically just causes problems with // multiprocess builds. -#mkdir $[ODIR] +#mkdir $[ODIR] $[TEST_ODIR] // Pre-compiled headers are one way to speed the compilation of many // C++ source files that include similar headers, but it turns out a @@ -198,7 +210,7 @@ MAKEFLAGS := -j$[NUMBER_OF_PROCESSORS] all : $[all_targets] // The 'test' rule makes all the test_bin_targets. -test : $[test_bin_targets] +test : $[test_bin_targets] $[test_lib_targets] clean : clean-igate #if $[st_sources] @@ -343,7 +355,7 @@ igate : $[get_igatedb(metalib_target lib_target ss_lib_target)] #define varname $[subst -,_,lib$[TARGET]_so] $[varname] = $[sources] - #define target $[ODIR]/lib$[TARGET]$[dllext].$[dlllib] + #define target $[ODIR]/$[get_dllname $[TARGET]].$[dlllib] #define sources $($[varname]) #define flags $[get_cflags] $[C++FLAGS] $[CFLAGS_OPT$[OPTIMIZE]] $[CFLAGS_SHARED] $[building_var:%=/D%] #define mybasename $[basename $[notdir $[target]]] @@ -358,14 +370,14 @@ $[TAB] mkdir -p $[tmpdirname_cyg] // this dir-creation-stuff is leftover from #define VER_RESOURCE "$[tmpdirname_win]\$[mybasename].res" $[TAB] cl /nologo /EP "$[dtool_ver_dir]\verdate.cpp" > "$[tmpdirname_win]\verdate.h" $[TAB] rc /n /I"$[tmpdirname_win]" $[DECYGWINED_INC_PATHLIST_ARGS] /fo$[VER_RESOURCE] $[filter /D%, $[flags]] "$[dtool_ver_dir]\version.rc" - #if $[filter %.cxx %.yxx %.lxx,$[get_sources]] + #if $[filter %.cxx %.cpp %.yxx %.lxx,$[get_sources]] $[TAB] $[SHARED_LIB_C++] $[VER_RESOURCE] #else $[TAB] $[SHARED_LIB_C] $[VER_RESOURCE] #endif #else .NOTPARALLEL $[target] : $[sources] $[dtool_ver_dir_cyg]/$[DLLBASEADDRFILENAME] - #if $[filter %.cxx %.yxx %.lxx,$[get_sources]] + #if $[filter %.cxx %.cpp %.yxx %.lxx,$[get_sources]] $[TAB] $[SHARED_LIB_C++] #else $[TAB] $[SHARED_LIB_C] @@ -373,10 +385,10 @@ $[TAB] $[SHARED_LIB_C] #endif #if $[build_dlls] -$[ODIR]/lib$[TARGET]$[dllext].lib : $[ODIR]/lib$[TARGET]$[dllext].dll +$[ODIR]/$[get_dllname $[TARGET]].lib : $[ODIR]/$[get_dllname $[TARGET]].dll #endif #if $[build_pdbs] -$[ODIR]/lib$[TARGET]$[dllext].pdb : $[ODIR]/lib$[TARGET]$[dllext].dll +$[ODIR]/$[get_dllname $[TARGET]].pdb : $[ODIR]/$[get_dllname $[TARGET]].dll #endif #endif @@ -385,9 +397,9 @@ $[ODIR]/lib$[TARGET]$[dllext].pdb : $[ODIR]/lib$[TARGET]$[dllext].dll // everything that goes along with it. #define installed_files \ $[if $[build_it], \ - $[if $[build_dlls],$[install_lib_dir]/lib$[TARGET]$[dllext].dll] \ - $[install_lib_dir]/lib$[TARGET]$[dllext].lib \ - $[if $[and $[build_dlls],$[build_pdbs]],$[install_lib_dir]/lib$[TARGET]$[dllext].pdb] \ + $[if $[build_dlls],$[install_lib_dir]/$[get_dllname $[TARGET]].dll] \ + $[install_lib_dir]/$[get_dllname $[TARGET]].lib \ + $[if $[and $[build_dlls],$[build_pdbs]],$[install_lib_dir]/$[get_dllname $[TARGET]].pdb] \ ] \ $[INSTALL_SCRIPTS:%=$[install_bin_dir]/%] \ $[INSTALL_HEADERS:%=$[install_headers_dir]/%] \ @@ -403,20 +415,20 @@ $[TAB] rm -f $[sort $[installed_files]] #endif #if $[build_dlls] -$[install_lib_dir]/lib$[TARGET]$[dllext].dll : $[ODIR]/lib$[TARGET]$[dllext].dll -#define local lib$[TARGET]$[dllext].dll +$[install_lib_dir]/$[get_dllname $[TARGET]].dll : $[ODIR]/$[get_dllname $[TARGET]].dll +#define local $[get_dllname $[TARGET]].dll #define dest $[install_lib_dir] $[TAB] cp -f $[ODIR]/$[local] $[dest] #endif -$[install_lib_dir]/lib$[TARGET]$[dllext].lib : $[ODIR]/lib$[TARGET]$[dllext].lib -#define local lib$[TARGET]$[dllext].lib +$[install_lib_dir]/$[get_dllname $[TARGET]].lib : $[ODIR]/$[get_dllname $[TARGET]].lib +#define local $[get_dllname $[TARGET]].lib #define dest $[install_lib_dir] $[TAB] cp -f $[ODIR]/$[local] $[dest] #if $[and $[build_dlls],$[build_pdbs]] -$[install_lib_dir]/lib$[TARGET]$[dllext].pdb : $[ODIR]/lib$[TARGET]$[dllext].pdb -#define local lib$[TARGET]$[dllext].pdb +$[install_lib_dir]/$[get_dllname $[TARGET]].pdb : $[ODIR]/$[get_dllname $[TARGET]].pdb +#define local $[get_dllname $[TARGET]].pdb #define dest $[install_lib_dir] $[TAB] cp -f $[ODIR]/$[local] $[dest] #endif @@ -470,8 +482,6 @@ $[TAB] $[INTERROGATE_MODULE] -oc $[target] -module "$[igatemod]" -library "$[iga #end metalib_target lib_target - - ///////////////////////////////////////////////////////////////////// // Now, the noninstalled dynamic libraries. These are presumably used // only within this directory, or at the most within this tree, and @@ -480,27 +490,72 @@ $[TAB] $[INTERROGATE_MODULE] -oc $[target] -module "$[igatemod]" -library "$[iga // lot simpler. ///////////////////////////////////////////////////////////////////// -#forscopes noinst_lib_target +#forscopes noinst_lib_target test_lib_target #define varname $[subst -,_,lib$[TARGET]_so] $[varname] = $[patsubst %,$[%_obj],$[compile_sources]] -#define target $[ODIR]/lib$[TARGET]$[dllext].$[dlllib] +#define target $[ODIR]/$[get_dllname $[TARGET]].$[dlllib] #define sources $($[varname]) $[target] : $[sources] $[static_lib_dependencies] -#if $[filter %.cxx %.yxx %.lxx,$[get_sources]] +#if $[filter %.cxx %.cpp %.yxx %.lxx,$[get_sources]] $[TAB] $[SHARED_LIB_C++] #else -$[TAB] $[SHARED_LIB_C] +$[TAB] $[SHARED_LIB_C] $[COMPILED_RESOURCES] #endif #if $[build_dlls] -$[ODIR]/lib$[TARGET]$[dllext].lib : $[ODIR]/lib$[TARGET]$[dllext].dll +$[ODIR]/$[get_dllname $[TARGET]].lib : $[ODIR]/$[get_dllname $[TARGET]].dll #endif #if $[build_pdbs] -$[ODIR]/lib$[TARGET]$[dllext].pdb : $[ODIR]/lib$[TARGET]$[dllext].dll +$[ODIR]/$[get_dllname $[TARGET]].pdb : $[ODIR]/$[get_dllname $[TARGET]].dll #endif -#end noinst_lib_target +// this section is all very clunky and not generalized enough +// assuming tgt dirs and such +#define rc_to_gen $[filter %.rc, $[GENERATED_SOURCES]] +#if $[rc_to_gen] +$[rc_to_gen] : $[GENERATED_RC_DEPENDENCIES] +$[TAB] $[RC_GENERATOR_RULE] + +$[ODIR]/$[RC_BASENAME].res : $[rc_to_gen] +$[TAB] $[COMPILE_RC] /I"$[ODIR]" /Fo"$[ODIR]/$[RC_BASENAME].res" $[ODIR]/$[RC_BASENAME].rc +#endif + +#define inf_to_gen $[filter %.inf, $[GENERATED_SOURCES]] +#if $[inf_to_gen] +$[inf_to_gen] : $[GENERATED_INF_DEPENDENCIES] +$[TAB] $[INF_GENERATOR_RULE] +#endif + +#define rgs_to_gen $[filter %.rgs, $[GENERATED_SOURCES]] +#if $[rgs_to_gen] +$[rgs_to_gen] : $[GENERATED_RGS_DEPENDENCIES] +$[TAB] $[RGS_GENERATOR_RULE] +#endif + +#define MIDL_COMMAND $[COMPILE_IDL] /cstub $[ODIR]/$[IDL_BASENAME].cpp /tlb $[ODIR]/$[IDL_BASENAME].tlb /h $[ODIR]/$[IDL_BASENAME].h /proxy $[ODIR]/$[IDL_BASENAME]_p.c /dlldata $[ODIR]/dlldata.c /iid $[ODIR]/$[IDL_BASENAME]_i.c $[ODIR]/$[IDL_BASENAME].idl + +#define idl_to_gen $[filter %.idl, $[GENERATED_SOURCES]] +#if $[idl_to_gen] +$[idl_to_gen] : $[GENERATED_IDL_DEPENDENCIES] +$[TAB] $[IDL_GENERATOR_RULE] + +.NOTPARALLEL $[ODIR]/$[IDL_BASENAME].h : $[idl_to_gen] +$[TAB] $[MIDL_COMMAND] + +// this is a complete hack. I dont know how add a generated .h to the dependency list of $[IDL_BASENAME].cpp. +// it is already there, but in the wrong directory. should really add this to official dependency list +#foreach file $[GENERATED_IDL_H_DEPENDENTS] +$[file] : $[ODIR]/$[IDL_BASENAME].h +$[TAB] // empty, dependency-only 'rule' + +#end file + +$[ODIR]/$[IDL_BASENAME].tlb : $[idl_to_gen] +$[TAB] $[MIDL_COMMAND] +#endif + +#end noinst_lib_target test_lib_target ///////////////////////////////////////////////////////////////////// @@ -512,17 +567,17 @@ $[ODIR]/lib$[TARGET]$[dllext].pdb : $[ODIR]/lib$[TARGET]$[dllext].dll #forscopes static_lib_target ss_lib_target #define varname $[subst -,_,lib$[TARGET]_a] $[varname] = $[patsubst %,$[%_obj],$[compile_sources]] -#define target $[ODIR]/lib$[TARGET]$[dllext].lib +#define target $[ODIR]/$[get_dllname $[TARGET]].lib #define sources $($[varname]) $[target] : $[sources] -#if $[filter %.cxx %.yxx %.lxx,$[get_sources]] +#if $[filter %.cxx %.cpp %.yxx %.lxx,$[get_sources]] $[TAB] $[STATIC_LIB_C++] #else $[TAB] $[STATIC_LIB_C] #endif #define installed_files \ - $[install_lib_dir]/lib$[TARGET]$[dllext].lib \ + $[install_lib_dir]/$[get_dllname $[TARGET]].lib \ $[INSTALL_SCRIPTS:%=$[install_bin_dir]/%] \ $[INSTALL_HEADERS:%=$[install_headers_dir]/%] \ $[INSTALL_DATA:%=$[install_data_dir]/%] \ @@ -535,8 +590,8 @@ uninstall-lib$[TARGET] : $[TAB] rm -f $[sort $[installed_files]] #endif -$[install_lib_dir]/lib$[TARGET]$[dllext].lib : $[ODIR]/lib$[TARGET]$[dllext].lib -#define local lib$[TARGET]$[dllext].lib +$[install_lib_dir]/$[get_dllname $[TARGET]].lib : $[ODIR]/$[get_dllname $[TARGET]].lib +#define local $[get_dllname $[TARGET]].lib #define dest $[install_lib_dir] $[TAB] cp -f $[ODIR]/$[local] $[dest] @@ -597,7 +652,7 @@ $[target] : $[sources] $[static_lib_dependencies] $[TAB] $[ld] -o $[target] $[sources] $[lpath:%=-L%] $[libs:%=-l%] #else // Otherwise, we can use the normal linker. - #if $[filter %.cxx %.yxx %.lxx,$[get_sources]] + #if $[filter %.cxx %.cpp %.yxx %.lxx,$[get_sources]] $[TAB] $[LINK_BIN_C++] #else $[TAB] $[LINK_BIN_C] @@ -655,7 +710,7 @@ $[TAB] cp -f $[output_exe] $[install_bin_dir] // of being built (when requested), but having no install rules. ///////////////////////////////////////////////////////////////////// -#forscopes noinst_bin_target test_bin_target +#forscopes noinst_bin_target test_bin_target test_lib_target $[TARGET] : $[ODIR]/$[TARGET].exe #define varname $[subst -,_,bin_$[TARGET]] @@ -663,13 +718,13 @@ $[varname] = $[patsubst %,$[%_obj],$[compile_sources]] #define target $[ODIR]/$[TARGET].exe #define sources $($[varname]) $[target] : $[sources] $[static_lib_dependencies] -#if $[filter %.cxx %.yxx %.lxx,$[get_sources]] +#if $[filter %.cxx %.cpp %.yxx %.lxx,$[get_sources]] $[TAB] $[LINK_BIN_C++] #else $[TAB] $[LINK_BIN_C] #endif -#end noinst_bin_target test_bin_target +#end noinst_bin_target test_bin_target test_lib_target ///////////////////////////////////////////////////////////////////// // Rules to run bison and/or flex as needed. @@ -727,7 +782,11 @@ $[TAB] cp $[target_prebuilt] $[target] // file. ///////////////////////////////////////////////////////////////////// -#forscopes metalib_target lib_target noinst_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target +#forscopes metalib_target lib_target noinst_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target test_lib_target +// need to use #print to avoid printing to Makefile +// printvar prints the unevaluated defn of the var +// #print TARGET=$[TARGET] +// #printvar TARGET // Rules to compile ordinary C files. #foreach file $[sort $[c_sources]] @@ -766,7 +825,7 @@ $[TAB] $[COMPILE_C++] #end file -#end metalib_target lib_target noinst_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target +#end metalib_target lib_target noinst_lib_target static_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target test_lib_target // And now the rules to install the auxiliary files, like headers and // data files. @@ -969,3 +1028,4 @@ $[TAB] cp -f $[local] $[dest] ////////////////////////////////////////////////////////////////////// #endif // DIR_TYPE + diff --git a/dtool/pptempl/compilerSettings.pp b/dtool/pptempl/compilerSettings.pp index ded93ef1ab..6622d65cf4 100644 --- a/dtool/pptempl/compilerSettings.pp +++ b/dtool/pptempl/compilerSettings.pp @@ -4,199 +4,206 @@ #define LINKER link #define LIBBER lib #define COMMONFLAGS /Gi- - + // use "unsafe" QIfist flt->int rounding only if FAST_FLT_TO_INT is defined - #define OPTFLAGS /O2 /Ob1 /G6 $[if $[ne $[FAST_FLT_TO_INT],], /QIfist,] - #define OPT1FLAGS /GZ + #define OPTFLAGS /O2 /Ob1 /G6 $[if $[ne $[FAST_FLT_TO_INT],], /QIfist,] + #define OPT1FLAGS /GZ // Note: Zi cannot be used on multiproc builds with precomp hdrs, Z7 must be used instead - #defer DEBUGPDBFLAGS /Zi /Fd"$[osfilename $[patsubst %.obj,%.pdb,$[target]]]" + #defer DEBUGPDBFLAGS /Zi /Fd"$[osfilename $[patsubst %.obj,%.pdb,$[target]]]" #defer DEBUGFLAGS /MDd $[BROWSEINFO_FLAG] $[DEBUGINFOFLAGS] $[DEBUGPDBFLAGS] #define RELEASEFLAGS /MD - #define WARNING_LEVEL_FLAG /W3 - - // NODEFAULTLIB ensures static libs linked in will connect to the correct msvcrt, so no debug/release mixing occurs - #define LDFLAGS_OPT1 /NODEFAULTLIB:MSVCRT.LIB - #define LDFLAGS_OPT2 /NODEFAULTLIB:MSVCRT.LIB + #define WARNING_LEVEL_FLAG /W3 + + // NODEFAULTLIB ensures static libs linked in will connect to the correct msvcrt, so no debug/release mixing occurs + #define LDFLAGS_OPT1 /NODEFAULTLIB:MSVCRT.LIB + #define LDFLAGS_OPT2 /NODEFAULTLIB:MSVCRT.LIB #define LDFLAGS_OPT3 /NODEFAULTLIB:MSVCRTD.LIB /OPT:REF #define LDFLAGS_OPT4 /NODEFAULTLIB:MSVCRTD.LIB /OPT:REF $[LDFLAGS_OPT4] - + #define MAPINFOFLAGS /MAPINFO:EXPORTS /MAPINFO:FIXUPS /MAPINFO:LINES - + #if $[ENABLE_PROFILING] // note according to docs, this should force /PDB:none /DEBUGTYPE:cv, so no pdb file is generated for debug?? (doesnt seem to be true) - #define PROFILE_FLAG /PROFILE + #define PROFILE_FLAG /PROFILE #else - #define PROFILE_FLAG + #define PROFILE_FLAG #endif - - // Note: all Opts will link w/debug info now - #define LINKER_FLAGS /DEBUG /DEBUGTYPE:CV $[PROFILE_FLAG] /MAP $[MAPINFOFLAGS] /fixed:no /incremental:no /WARN:3 - -// in case we have mixed intel/msvc build - #define EXTRA_LIBPATH /ia32/lib - #define EXTRA_INCPATH /ia32/include + + // Note: all Opts will link w/debug info now + #define LINKER_FLAGS /DEBUG /DEBUGTYPE:CV $[PROFILE_FLAG] /MAP $[MAPINFOFLAGS] /fixed:no /incremental:no /WARN:3 + +// for mixed intel/msvc build, add these +// #define EXTRA_LIBPATH /ia32/lib +// #define EXTRA_INCPATH /ia32/include #if $[or $[ne $[FORCE_INLINING],],$[>= $[OPTIMIZE],2]] #define EXTRA_CDEFS FORCE_INLINING $[EXTRA_CDEFS] - #endif - + #endif + // ensure pdbs are copied to install dir - #define build_pdbs yes - + #define build_pdbs yes + #define STL_ALLOCATOR VC6 - + #elif $[or $[eq $[USE_COMPILER], MSVC7], $[eq $[USE_COMPILER], MSVC7_1]] #define COMPILER cl #define LINKER link #define LIBBER lib - #if $[eq $[USE_COMPILER], MSVC7] + #if $[eq $[USE_COMPILER], MSVC7] // What is the syntax of the STL allocator declaration? See // LocalSetup.pp for allowable values. #define STL_ALLOCATOR MODERN #else // until I figure out how to get rid of 'rebind' vc7.1 C4346 build errors #define STL_ALLOCATOR UNKNOWN - #endif + #endif #if $[eq $[NO_CROSSOBJ_OPT],] #define DO_CROSSOBJ_OPT 1 - #endif - + #endif + #if $[DO_CROSSOBJ_OPT] #define OPT4FLAGS /GL #define LDFLAGS_OPT4 /LTCG - #if $[>= $[OPTIMIZE],4] + #if $[>= $[OPTIMIZE],4] #define LIBBER $[LIBBER] /LTCG - #endif - #endif - + #endif + #endif + #define CDEFINES_OPT1 #define CDEFINES_OPT2 #define CDEFINES_OPT3 #define CDEFINES_OPT4 - // NODEFAULTLIB ensures static libs linked in will connect to the correct msvcrt, so no debug/release mixing occurs - #define LDFLAGS_OPT1 /NODEFAULTLIB:MSVCRT.LIB - #define LDFLAGS_OPT2 /NODEFAULTLIB:MSVCRT.LIB + // NODEFAULTLIB ensures static libs linked in will connect to the correct msvcrt, so no debug/release mixing occurs + + #define LDFLAGS_OPT1 /NODEFAULTLIB:MSVCRT.LIB + #define LDFLAGS_OPT2 /NODEFAULTLIB:MSVCRT.LIB #define LDFLAGS_OPT3 /NODEFAULTLIB:MSVCRTD.LIB /OPT:REF #define LDFLAGS_OPT4 /NODEFAULTLIB:MSVCRTD.LIB /OPT:REF $[LDFLAGS_OPT4] #define COMMONFLAGS /DHAVE_DINKUM /Zc:forScope // use "unsafe" QIfist flt->int rounding only if FAST_FLT_TO_INT is defined - #define OPTFLAGS /O2 /Ob2 /G6 $[if $[ne $[FAST_FLT_TO_INT],], /QIfist,] - -// #define OPT1FLAGS /RTCsu /GS removing /RTCu because it crashes in dxgsg with internal compiler bug + #define REGULAR_OPTFLAGS /O2 /Ob2 /G6 $[if $[ne $[FAST_FLT_TO_INT],], /QIfist,] + + #defer OPTFLAGS $[if $[OPT_MINSIZE],/O1 /Og /Ob1 /Oi /Os /G6,$[REGULAR_OPTFLAGS]] + + // #define OPT1FLAGS /RTCsu /GS removing /RTCu because it crashes in dxgsg with internal compiler bug #define OPT1FLAGS /RTCs /GS - -// #define WARNING_LEVEL_FLAG /Wall //this is scary + + // #define WARNING_LEVEL_FLAG /Wall //this is scary #define WARNING_LEVEL_FLAG /W3 // WL // Note: Zi cannot be used on multiproc builds with precomp hdrs, Z7 must be used instead - #defer DEBUGPDBFLAGS /Zi /Fd"$[osfilename $[patsubst %.obj,%.pdb,$[target]]]" - #defer DEBUGFLAGS /MDd $[BROWSEINFO_FLAG] $[DEBUGINFOFLAGS] $[DEBUGPDBFLAGS] - #define RELEASEFLAGS /MD - + #defer DEBUGPDBFLAGS /Zi /Fd"$[osfilename $[patsubst %.obj,%.pdb, $[target]]]" + + // if LINK_FORCE_STATIC_C_RUNTIME is defined, it always links with static c runtime (release version + // for both Opt1 and Opt4!) instead of the msvcrt dlls + + #defer DEBUGFLAGS $[if $[ne $[LINK_FORCE_STATIC_RELEASE_C_RUNTIME],],/MT, /MDd] $[BROWSEINFO_FLAG] $[DEBUGINFOFLAGS] $[DEBUGPDBFLAGS] + #defer RELEASEFLAGS $[if $[ne $[LINK_FORCE_STATIC_RELEASE_C_RUNTIME],],/MT, /MD] + #define MAPINFOFLAGS /MAPINFO:EXPORTS /MAPINFO:LINES - + #if $[ENABLE_PROFILING] #define PROFILE_FLAG /FIXED:NO #else - #define PROFILE_FLAG + #define PROFILE_FLAG #endif - + #if $[or $[ne $[FORCE_INLINING],],$[>= $[OPTIMIZE],2]] - #define EXTRA_CDEFS FORCE_INLINING $[EXTRA_CDEFS] - #endif - - // Note: all Opts will link w/debug info now - #define LINKER_FLAGS /DEBUG $[PROFILE_FLAG] /MAP $[MAPINFOFLAGS] /fixed:no /incremental:no - + #defer EXTRA_CDEFS $[EXTRA_CDEFS] $[if $[OPT_MINSIZE],,FORCE_INLINING] + #endif + + // Note: all Opts will link w/debug info now + #define LINKER_FLAGS /DEBUG $[PROFILE_FLAG] /MAP $[MAPINFOFLAGS] /fixed:no /incremental:no + // in case we have mixed intel/msvc build // #define EXTRA_LIBPATH /ia32/lib -// #define EXTRA_INCPATH /ia32/include +// #define EXTRA_INCPATH /ia32/include // ensure pdbs are copied to install dir - #define build_pdbs yes - + #define build_pdbs yes + #elif $[eq $[USE_COMPILER], INTEL] #define COMPILER icl #define LINKER xilink #define LIBBER xilib - #define COMMONFLAGS /DHAVE_DINKUM /Gi- /Qwd985 /Qvc7 /G6 - + #define COMMONFLAGS /DHAVE_DINKUM /Gi- /Qwd985 /Qvc7 /G6 + // Note: Zi cannot be used on multiproc builds with precomp hdrs, Z7 must be used instead - #defer DEBUGPDBFLAGS /Zi /Qinline_debug_info /Fd"$[osfilename $[patsubst %.obj,%.pdb,$[target]]]" + #defer DEBUGPDBFLAGS /Zi /Qinline_debug_info /Fd"$[osfilename $[patsubst %.obj,%.pdb,$[target]]]" // Oy- needed for MS debugger - #defer DEBUGFLAGS /Oy- /MDd $[BROWSEINFO_FLAG] $[DEBUGINFOFLAGS] $[DEBUGPDBFLAGS] + #defer DEBUGFLAGS /Oy- /MDd $[BROWSEINFO_FLAG] $[DEBUGINFOFLAGS] $[DEBUGPDBFLAGS] #define RELEASEFLAGS /MD - #define WARNING_LEVEL_FLAG /W3 - + #define WARNING_LEVEL_FLAG /W3 + #if $[DO_CROSSOBJ_OPT] #define OPT4FLAGS /Qipo #define LDFLAGS_OPT4 /Qipo - #endif - + #endif + // NODEFAULTLIB ensures static libs linked in will connect to the correct msvcrt, so no debug/release mixing occurs - #define LDFLAGS_OPT1 /NODEFAULTLIB:MSVCRT.LIB - #define LDFLAGS_OPT2 /NODEFAULTLIB:MSVCRT.LIB + #define LDFLAGS_OPT1 /NODEFAULTLIB:MSVCRT.LIB + #define LDFLAGS_OPT2 /NODEFAULTLIB:MSVCRT.LIB #define LDFLAGS_OPT3 /NODEFAULTLIB:MSVCRTD.LIB /OPT:REF #define LDFLAGS_OPT4 /NODEFAULTLIB:MSVCRTD.LIB /OPT:REF $[LDFLAGS_OPT4] - -// #define OPTFLAGS /O3 /Qipo /QaxW /Qvec_report1 + +// #define OPTFLAGS /O3 /Qipo /QaxW /Qvec_report1 #define OPTFLAGS /O3 /Qip - + // use "unsafe" QIfist flt->int rounding only if FAST_FLT_TO_INT is defined - #define OPTFLAGS $[OPTFLAGS] $[if $[ne $[FAST_FLT_TO_INT],], /QIfist,] - + #define OPTFLAGS $[OPTFLAGS] $[if $[ne $[FAST_FLT_TO_INT],], /QIfist,] + #define OPT1FLAGS /GZ /Od // We assume the Intel compiler installation dir is mounted as /ia32. #define EXTRA_LIBPATH /ia32/lib - #define EXTRA_INCPATH /ia32/include - + #define EXTRA_INCPATH /ia32/include + #if $[or $[ne $[FORCE_INLINING],],$[>= $[OPTIMIZE],2]] #define EXTRA_CDEFS FORCE_INLINING $[EXTRA_CDEFS] - #endif - - // Note: all Opts will link w/debug info now + #endif + + // Note: all Opts will link w/debug info now #define LINKER_FLAGS /DEBUG /DEBUGTYPE:CV $[PROFILE_FLAG] /MAP $[MAPINFOFLAGS] /fixed:no /incremental:no - + // ensure pdbs are copied to install dir - #define build_pdbs yes - + #define build_pdbs yes + #elif $[eq $[USE_COMPILER], BOUNDS] // NuMega BoundsChecker #define COMPILER nmcl #define LINKER nmlink #define LIBBER lib #define COMMONFLAGS #define OPTFLAGS /O2 /Ogity /G6 - #define OPT1FLAGS /GZ - #defer DEBUGPDBFLAGS /MDd /Zi $[BROWSEINFO_FLAG] /Fd"$[osfilename $[patsubst %.obj,%.pdb,$[target]]]" + #define OPT1FLAGS /GZ + #defer DEBUGPDBFLAGS /MDd /Zi $[BROWSEINFO_FLAG] /Fd"$[osfilename $[patsubst %.obj,%.pdb,$[target]]]" #define RELEASEFLAGS /MD #define EXTRA_LIBPATH #define EXTRA_INCPATH #if $[BOUNDS_TRUETIME] // NuMega BoundsChecker TrueTime Profiler - // This may look like a bad thing (to extend the compiler - // and linker with a switch), but I think it's the right + // This may look like a bad thing (to extend the compiler + // and linker with a switch), but I think it's the right // thing to do in this case -- skyler. #define COMPILER $[COMPILER] /NMttOn #define LINKER $[LINKER] /NMttOn - #endif - + #endif + #elif $[eq $[USE_COMPILER], TRUETIME] // NuMega TrueTime Profiler - // This may look like a bad thing (to extend the compiler - // and linker with a switch), but I think it's the right + // This may look like a bad thing (to extend the compiler + // and linker with a switch), but I think it's the right // thing to do in this case -- skyler. #define COMPILER nmcl /NMttOn #define LINKER nmlink /NMttOn #define LIBBER lib #define COMMONFLAGS #define OPTFLAGS /O2 /Ogity /G6 - #define OPT1FLAGS /GZ - #defer DEBUGPDBFLAGS /MDd /Zi $[BROWSEINFO_FLAG] /Fd"$[osfilename $[patsubst %.obj,%.pdb,$[target]]]" + #define OPT1FLAGS /GZ + #defer DEBUGPDBFLAGS /MDd /Zi $[BROWSEINFO_FLAG] /Fd"$[osfilename $[patsubst %.obj,%.pdb,$[target]]]" #define RELEASEFLAGS /MD #define EXTRA_LIBPATH #define EXTRA_INCPATH @@ -205,14 +212,14 @@ #endif #if $[CHECK_SYNTAX_ONLY] -#define END_CFLAGS $[END_CFLAGS] /Zs -#endif - +#define END_CFLAGS $[END_CFLAGS] /Zs +#endif + #if $[GEN_ASSEMBLY] #define END_CFLAGS $[END_CFLAGS] /FAs -#endif +#endif #if $[PREPROCESSOR_OUTPUT] -#define END_CFLAGS $[END_CFLAGS] /E -#endif +#define END_CFLAGS $[END_CFLAGS] /E +#endif