| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- //
- // Global.msvc.pp
- //
- // This file is read in before any of the individual Sources.pp files
- // are read. It defines a few global variables to assist
- // Template.msvc.pp.
- //
- #define REQUIRED_PPREMAKE_VERSION 1.12
- #if $[< $[PPREMAKE_VERSION],$[REQUIRED_PPREMAKE_VERSION]]
- #error You need at least ppremake version $[REQUIRED_PPREMAKE_VERSION] to use BUILD_TYPE msvc.
- #endif
- #defun get_metalibs target,complete_libs
- // In Windows, we need to know the complete set of metalibs that
- // 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.
- #if $[all_libs $[and $[build_directory],$[build_target]],$[lib]]
- #define modmeta $[module $[TARGET],$[lib]]
- #if $[ne $[modmeta],]
- #if $[ne $[modmeta],$[target]] // We don't link with ourselves.
- #set actual_libs $[actual_libs] $[modmeta]
- #endif
- #else
- #set actual_libs $[actual_libs] $[lib]
- #endif
- #endif
- #end lib
- #set actual_libs $[unique $[actual_libs]] $[patsubst %:m,%,$[filter %:m,$[OTHER_LIBS]]]
- $[actual_libs]
- #end get_metalibs
- #defun decygwin frompat,topat,path
- #foreach file $[path]
- $[patsubstw $[frompat],$[topat],$[osfilename $[file]]]
- #end file
- #end decygwin
- #define install_lib_dir $[decygwin %,%,$[install_lib_dir]]
- #define install_bin_dir $[decygwin %,%,$[install_bin_dir]]
- #define install_headers_dir $[decygwin %,%,$[install_headers_dir]]
- #define install_data_dir $[decygwin %,%,$[install_data_dir]]
- #define install_igatedb_dir $[decygwin %,%,$[install_igatedb_dir]]
- #define install_config_dir $[decygwin %,%,$[install_config_dir]]
- #define install_parser_inc_dir $[decygwin %,%,$[install_parser_inc_dir]]
- // Define this if we want to make .sbr files.
- #if $[USE_BROWSEINFO]
- #defer BROWSEINFO_FLAG /Fr"$[osfilename $[target:%.obj=%.sbr]]"
- #else
- #define BROWSEINFO_FLAG
- #endif
- #define CFLAGS_SHARED
- // Define LINK_ALL_STATIC to generate static libs instead of DLL's.
- #if $[ne $[LINK_ALL_STATIC],]
- #define build_dlls
- #define build_libs yes
- #define dlllib lib
- #else
- #define build_dlls yes
- #define build_libs
- #define dlllib dll
- #endif
- #include $[THISDIRPREFIX]compilerSettings.pp
- #if $[TEST_INLINING]
- // /W4 will make MSVC spit out if it inlined a fn or not, but also cause a lot of other spam warnings
- #define WARNING_LEVEL_FLAG /W4
- #define EXTRA_CDEFS FORCE_INLINING $[EXTRA_CDEFS]
- #endif
- // do NOT try to do #defer #defer CDEFINES_OPT1 $[CDEFINES_OPT1] here! it wont let Sources.pp define their own CDEFINES_OPT1! they must use EXTRA_CDEFS!
- #defer CDEFINES_OPT1 $[EXTRA_CDEFS]
- #defer CDEFINES_OPT2 $[EXTRA_CDEFS]
- #defer CDEFINES_OPT3 $[EXTRA_CDEFS]
- #defer CDEFINES_OPT4 $[EXTRA_CDEFS]
- // 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_OPT3 $[CDEFINES_OPT3:%=/D%] $[COMMONFLAGS] $[RELEASEFLAGS] $[OPTFLAGS] $[DEBUGPDBFLAGS]
- #defer CFLAGS_OPT4 $[CDEFINES_OPT4:%=/D%] $[COMMONFLAGS] $[RELEASEFLAGS] $[OPTFLAGS] $[OPT4FLAGS] $[DEBUGPDBFLAGS]
- //#if $[FORCE_DEBUG_FLAGS]
- // make them all link with non-debug msvc runtime dlls for this case
- //#defer DEBUGFLAGS $[subst /MDd,,$[DEBUGFLAGS]]
- //#defer CFLAGS_OPT3 $[CDEFINES_OPT3:%=/D%] $[COMMONFLAGS] $[RELEASEFLAGS] $[OPTFLAGS] $[DEBUGFLAGS]
- //#define LINKER_FLAGS $[LINKER_FLAGS] /debug
- //#else
- //#endif
- // NODEFAULTLIB ensures static libs linked in will connect to the correct msvcrt, so no debug/release mixing occurs
- #defer LDFLAGS_OPT1 $[LINKER_FLAGS] $[LDFLAGS_OPT1]
- #defer LDFLAGS_OPT2 $[LINKER_FLAGS] $[LDFLAGS_OPT2]
- #defer LDFLAGS_OPT3 $[LINKER_FLAGS] $[LDFLAGS_OPT3]
- #defer LDFLAGS_OPT4 $[LINKER_FLAGS] $[LDFLAGS_OPT4]
- // $[dllext] will be "_d" for debug builds, and empty for non-debug
- // builds. This is the extra bit of stuff we tack on to the end of a
- // dll name. We name the debug dll's file_d.dll, partly to be
- // consistent with Python's convention, and partly for our own benefit
- // to differentiate debug-built from non-debug-built dll's (since the
- // distinction is so important in Windows).
- #define dllext $[if $[<= $[OPTIMIZE],2],_d]
- // Because Visual Studio .NET prefers to generate object files using the same
- // base name as the source file, we don't want an object file prefix.
- #define obj_prefix
- // Additional global defines for building under Microsoft Visual Studio .NET.
- #define extra_defines FORCE_INLINING HAVE_DINKUM WIN32_VC WIN32
- // Additional compiler flags.
- #defer extra_cflags /EHsc /Zm500 $[WARNING_LEVEL_FLAG] $[END_CFLAGS]
- #defer interrogate_ipath $[decygwin %,-S"%",$[install_parser_inc_dir]] $[decygwin %,-I"%",$[target_ipath]]
- #defer DECYGWINED_INC_PATHLIST_ARGS $[decygwin %,/I"%",$[EXTRA_INCPATH] $[ipath] $[WIN32_PLATFORMSDK_INCPATH]]
- #defer MAIN_C_COMPILE_ARGS /nologo /c $[DECYGWINED_INC_PATHLIST_ARGS] $[flags] $[extra_cflags] "$[osfilename $[source]]"
- #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]]" $[decygwin %,/LIBPATH:"%",$[lpath] $[EXTRA_LIBPATH]] $[patsubst %.lib,%.lib,%,lib%.lib,$[libs]]
- #defer STATIC_LIB_C++ $[STATIC_LIB_C]
- #defer COMPILE_IDL midl /nologo /env win32 /Oicf $[DECYGWINED_INC_PATHLIST_ARGS]
- #defer COMPILE_RC rc /R /L 0x409 $[DECYGWINED_INC_PATHLIST_ARGS]
- // if we're attached, use dllbase.txt. otherwise let OS loader resolve dll addrspace collisions
- #if $[ne $[CTPROJS],]
- // use predefined bases to speed dll loading and simplify debugging
- #defer DLLNAMEBASE $[lib_prefix]$[TARGET]
- #defer DLLBASEADDRFILENAME dllbase.txt
- #defer DLLBASEARG "/BASE:@$[dtool_ver_dir]\$[DLLBASEADDRFILENAME],$[DLLNAMEBASE]"
- #else
- // requires dtool envvar
- #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 $[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]]"
- #defer LINK_BIN_C++ $[LINK_BIN_C]
- #if $[ne $[LINK_ALL_STATIC],]
- #defer SHARED_LIB_C $[STATIC_LIB_C]
- #defer SHARED_LIB_C++ $[STATIC_LIB_C++]
- #defer ODIR_SHARED $[ODIR_STATIC]
- #endif
|