mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	Add --guardcf flag to mk_make.py to optionally enable Control Flow Guard.
This commit is contained in:
		
							parent
							
								
									465ed7d068
								
							
						
					
					
						commit
						d57494395c
					
				
					 1 changed files with 21 additions and 10 deletions
				
			
		| 
						 | 
				
			
			@ -104,6 +104,8 @@ GIT_DESCRIBE=False
 | 
			
		|||
SLOW_OPTIMIZE=False
 | 
			
		||||
USE_OMP=True
 | 
			
		||||
LOG_SYNC=False
 | 
			
		||||
GUARD_CF=False
 | 
			
		||||
ALWAYS_DYNAMIC_BASE=False
 | 
			
		||||
 | 
			
		||||
FPMATH="Default"
 | 
			
		||||
FPMATH_FLAGS="-mfpmath=sse -msse -msse2"
 | 
			
		||||
| 
						 | 
				
			
			@ -623,13 +625,13 @@ def display_help(exit_code):
 | 
			
		|||
    print("  -d, --debug                   compile Z3 in debug mode.")
 | 
			
		||||
    print("  -t, --trace                   enable tracing in release mode.")
 | 
			
		||||
    if IS_WINDOWS:
 | 
			
		||||
        print("  --guardcf                     enable Control Flow Guard runtime checks.")
 | 
			
		||||
        print("  -x, --x64                     create 64 binary when using Visual Studio.")
 | 
			
		||||
    else:
 | 
			
		||||
        print("  --x86                         force 32-bit x86 build on x64 systems.")
 | 
			
		||||
    print("  -m, --makefiles               generate only makefiles.")
 | 
			
		||||
    if IS_WINDOWS:
 | 
			
		||||
        print("  -v, --vsproj                  generate Visual Studio Project Files.")
 | 
			
		||||
    if IS_WINDOWS:
 | 
			
		||||
        print("  --optimize                    generate optimized code during linking.")
 | 
			
		||||
    print("  --dotnet                      generate .NET bindings.")
 | 
			
		||||
    print("  --dotnet-key=<file>           sign the .NET assembly using the private key in <file>.")
 | 
			
		||||
| 
						 | 
				
			
			@ -670,10 +672,11 @@ def parse_options():
 | 
			
		|||
    global VERBOSE, DEBUG_MODE, IS_WINDOWS, VS_X64, ONLY_MAKEFILES, SHOW_CPPS, VS_PROJ, TRACE, VS_PAR, VS_PAR_NUM
 | 
			
		||||
    global DOTNET_ENABLED, DOTNET_KEY_FILE, JAVA_ENABLED, ML_ENABLED, STATIC_LIB, STATIC_BIN, PREFIX, GMP, PYTHON_PACKAGE_DIR, GPROF, GIT_HASH, GIT_DESCRIBE, PYTHON_INSTALL_ENABLED, PYTHON_ENABLED
 | 
			
		||||
    global LINUX_X64, SLOW_OPTIMIZE, USE_OMP, LOG_SYNC
 | 
			
		||||
    global GUARD_CF, ALWAYS_DYNAMIC_BASE
 | 
			
		||||
    try:
 | 
			
		||||
        options, remainder = getopt.gnu_getopt(sys.argv[1:],
 | 
			
		||||
                                               'b:df:sxhmcvtnp:gj',
 | 
			
		||||
                                               ['build=', 'debug', 'silent', 'x64', 'help', 'makefiles', 'showcpp', 'vsproj',
 | 
			
		||||
                                               ['build=', 'debug', 'silent', 'x64', 'help', 'makefiles', 'showcpp', 'vsproj', 'guardcf',
 | 
			
		||||
                                                'trace', 'dotnet', 'dotnet-key=', 'staticlib', 'prefix=', 'gmp', 'java', 'parallel=', 'gprof',
 | 
			
		||||
                                                'githash=', 'git-describe', 'x86', 'ml', 'optimize', 'noomp', 'pypkgdir=', 'python', 'staticbin', 'log-sync'])
 | 
			
		||||
    except:
 | 
			
		||||
| 
						 | 
				
			
			@ -742,6 +745,9 @@ def parse_options():
 | 
			
		|||
        elif opt in ('--python'):
 | 
			
		||||
            PYTHON_ENABLED = True
 | 
			
		||||
            PYTHON_INSTALL_ENABLED = True
 | 
			
		||||
        elif opt == '--guardcf':
 | 
			
		||||
            GUARD_CF = True
 | 
			
		||||
            ALWAYS_DYNAMIC_BASE = True # /GUARD:CF requires /DYNAMICBASE
 | 
			
		||||
        else:
 | 
			
		||||
            print("ERROR: Invalid command line option '%s'" % opt)
 | 
			
		||||
            display_help(1)
 | 
			
		||||
| 
						 | 
				
			
			@ -2310,6 +2316,7 @@ def mk_config():
 | 
			
		|||
            'SLINK_OUT_FLAG=/Fe\n'
 | 
			
		||||
            'OS_DEFINES=/D _WINDOWS\n')
 | 
			
		||||
        extra_opt = ''
 | 
			
		||||
        link_extra_opt = ''
 | 
			
		||||
        HAS_OMP = test_openmp('cl')
 | 
			
		||||
        if HAS_OMP:
 | 
			
		||||
            extra_opt = ' /openmp'
 | 
			
		||||
| 
						 | 
				
			
			@ -2319,10 +2326,14 @@ def mk_config():
 | 
			
		|||
            extra_opt = '%s /DZ3_LOG_SYNC' % extra_opt
 | 
			
		||||
        if GIT_HASH:
 | 
			
		||||
            extra_opt = ' %s /D Z3GITHASH=%s' % (extra_opt, GIT_HASH)
 | 
			
		||||
        if GUARD_CF:
 | 
			
		||||
            extra_opt = ' %s /guard:cf' % extra_opt
 | 
			
		||||
            link_extra_opt = ' %s /GUARD:CF' % link_extra_opt
 | 
			
		||||
        if STATIC_BIN:
 | 
			
		||||
            static_opt = '/MT'
 | 
			
		||||
        else:
 | 
			
		||||
            static_opt = '/MD'
 | 
			
		||||
        maybe_disable_dynamic_base = '/DYNAMICBASE' if ALWAYS_DYNAMIC_BASE else '/DYNAMICBASE:NO'
 | 
			
		||||
        if DEBUG_MODE:
 | 
			
		||||
            static_opt = static_opt + 'd'
 | 
			
		||||
            config.write(
 | 
			
		||||
| 
						 | 
				
			
			@ -2333,8 +2344,8 @@ def mk_config():
 | 
			
		|||
                config.write(
 | 
			
		||||
                    'CXXFLAGS=/c /Zi /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _AMD64_ /D _DEBUG /D Z3DEBUG /D _CONSOLE /D _TRACE /D _WINDOWS /Gm- /EHsc /RTC1 /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /analyze- %s %s\n' % (extra_opt, static_opt))
 | 
			
		||||
                config.write(
 | 
			
		||||
                    'LINK_EXTRA_FLAGS=/link /DEBUG /MACHINE:X64 /SUBSYSTEM:CONSOLE /INCREMENTAL:NO /STACK:8388608 /OPT:REF /OPT:ICF /TLBID:1 /DYNAMICBASE /NXCOMPAT\n'
 | 
			
		||||
                    'SLINK_EXTRA_FLAGS=/link /DEBUG /MACHINE:X64 /SUBSYSTEM:WINDOWS /INCREMENTAL:NO /STACK:8388608 /OPT:REF /OPT:ICF /TLBID:1 /DYNAMICBASE:NO\n')
 | 
			
		||||
                    'LINK_EXTRA_FLAGS=/link /DEBUG /MACHINE:X64 /SUBSYSTEM:CONSOLE /INCREMENTAL:NO /STACK:8388608 /OPT:REF /OPT:ICF /TLBID:1 /DYNAMICBASE /NXCOMPAT %s\n'
 | 
			
		||||
                    'SLINK_EXTRA_FLAGS=/link /DEBUG /MACHINE:X64 /SUBSYSTEM:WINDOWS /INCREMENTAL:NO /STACK:8388608 /OPT:REF /OPT:ICF /TLBID:1 %s %s\n' % (link_extra_opt, maybe_disable_dynamic_base, link_extra_opt))
 | 
			
		||||
            elif VS_ARM:
 | 
			
		||||
                print("ARM on VS is unsupported")
 | 
			
		||||
                exit(1)
 | 
			
		||||
| 
						 | 
				
			
			@ -2342,8 +2353,8 @@ def mk_config():
 | 
			
		|||
                config.write(
 | 
			
		||||
                    'CXXFLAGS=/c /Zi /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _DEBUG /D Z3DEBUG /D _CONSOLE /D _TRACE /D _WINDOWS /Gm- /EHsc /RTC1 /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /analyze- /arch:SSE2 %s %s\n' % (extra_opt, static_opt))
 | 
			
		||||
                config.write(
 | 
			
		||||
                    'LINK_EXTRA_FLAGS=/link /DEBUG /MACHINE:X86 /SUBSYSTEM:CONSOLE /INCREMENTAL:NO /STACK:8388608 /OPT:REF /OPT:ICF /TLBID:1 /DYNAMICBASE /NXCOMPAT\n'
 | 
			
		||||
                    'SLINK_EXTRA_FLAGS=/link /DEBUG /MACHINE:X86 /SUBSYSTEM:WINDOWS /INCREMENTAL:NO /STACK:8388608 /OPT:REF /OPT:ICF /TLBID:1 /DYNAMICBASE:NO\n')
 | 
			
		||||
                    'LINK_EXTRA_FLAGS=/link /DEBUG /MACHINE:X86 /SUBSYSTEM:CONSOLE /INCREMENTAL:NO /STACK:8388608 /OPT:REF /OPT:ICF /TLBID:1 /DYNAMICBASE /NXCOMPAT %s\n'
 | 
			
		||||
                    'SLINK_EXTRA_FLAGS=/link /DEBUG /MACHINE:X86 /SUBSYSTEM:WINDOWS /INCREMENTAL:NO /STACK:8388608 /OPT:REF /OPT:ICF /TLBID:1 %s %s\n' % (link_extra_opt, maybe_disable_dynamic_base, link_extra_opt))
 | 
			
		||||
        else:
 | 
			
		||||
            # Windows Release mode
 | 
			
		||||
            LTCG=' /LTCG' if SLOW_OPTIMIZE else ''
 | 
			
		||||
| 
						 | 
				
			
			@ -2358,8 +2369,8 @@ def mk_config():
 | 
			
		|||
                config.write(
 | 
			
		||||
                    'CXXFLAGS=/c%s /Zi /nologo /W3 /WX- /O2 /D _EXTERNAL_RELEASE /D WIN32 /D NDEBUG /D _LIB /D _WINDOWS /D _AMD64_ /D _UNICODE /D UNICODE /Gm- /EHsc /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /TP %s %s\n' % (GL, extra_opt, static_opt))
 | 
			
		||||
                config.write(
 | 
			
		||||
                    'LINK_EXTRA_FLAGS=/link%s /MACHINE:X64 /SUBSYSTEM:CONSOLE /INCREMENTAL:NO /STACK:8388608\n'
 | 
			
		||||
                    'SLINK_EXTRA_FLAGS=/link%s /MACHINE:X64 /SUBSYSTEM:WINDOWS /INCREMENTAL:NO /STACK:8388608\n' % (LTCG, LTCG))
 | 
			
		||||
                    'LINK_EXTRA_FLAGS=/link%s /MACHINE:X64 /SUBSYSTEM:CONSOLE /INCREMENTAL:NO /STACK:8388608 %s\n'
 | 
			
		||||
                    'SLINK_EXTRA_FLAGS=/link%s /MACHINE:X64 /SUBSYSTEM:WINDOWS /INCREMENTAL:NO /STACK:8388608 %s\n' % (LTCG, link_extra_opt, LTCG, link_extra_opt))
 | 
			
		||||
            elif VS_ARM:
 | 
			
		||||
                print("ARM on VS is unsupported")
 | 
			
		||||
                exit(1)
 | 
			
		||||
| 
						 | 
				
			
			@ -2367,8 +2378,8 @@ def mk_config():
 | 
			
		|||
                config.write(
 | 
			
		||||
                    'CXXFLAGS=/nologo /c%s /Zi /W3 /WX- /O2 /Oy- /D _EXTERNAL_RELEASE /D WIN32 /D NDEBUG /D _CONSOLE /D _WINDOWS /D ASYNC_COMMANDS /Gm- /EHsc /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /analyze- /arch:SSE2 %s %s\n' % (GL, extra_opt, static_opt))
 | 
			
		||||
                config.write(
 | 
			
		||||
                    'LINK_EXTRA_FLAGS=/link%s /DEBUG /MACHINE:X86 /SUBSYSTEM:CONSOLE /INCREMENTAL:NO /STACK:8388608 /OPT:REF /OPT:ICF /TLBID:1 /DYNAMICBASE /NXCOMPAT\n'
 | 
			
		||||
                    'SLINK_EXTRA_FLAGS=/link%s /DEBUG /MACHINE:X86 /SUBSYSTEM:WINDOWS /INCREMENTAL:NO /STACK:8388608 /OPT:REF /OPT:ICF /TLBID:1 /DYNAMICBASE:NO\n' % (LTCG, LTCG))
 | 
			
		||||
                    'LINK_EXTRA_FLAGS=/link%s /DEBUG /MACHINE:X86 /SUBSYSTEM:CONSOLE /INCREMENTAL:NO /STACK:8388608 /OPT:REF /OPT:ICF /TLBID:1 /DYNAMICBASE /NXCOMPAT %s\n'
 | 
			
		||||
                    'SLINK_EXTRA_FLAGS=/link%s /DEBUG /MACHINE:X86 /SUBSYSTEM:WINDOWS /INCREMENTAL:NO /STACK:8388608 /OPT:REF /OPT:ICF /TLBID:1 %s %s\n' % (LTCG, link_extra_opt, LTCG, maybe_disable_dynamic_base, link_extra_opt))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue