Compare commits
	
		
			2 Commits
		
	
	
		
			dedad06419
			...
			0abc33d6f8
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 0abc33d6f8 | |||
| 14a080e618 | 
| @ -97,6 +97,8 @@ Import('config') | ||||
| 
 | ||||
| if not config.get('PROJECT_NAME'): | ||||
|     config['PROJECT_NAME'] = 'PROJECT' | ||||
| if not config.get('CXX_STANDARD'): | ||||
|     config['CXX_STANDARD'] = 'c++20' | ||||
| 
 | ||||
| if not config.get('PREPROCESSOR_PREFIX'): | ||||
|     config['PREPROCESSOR_PREFIX'] = config['PROJECT_NAME'].upper() # TODO: may be nicer? | ||||
| @ -266,7 +268,7 @@ elif unity_mode == 'stress': # compile everything in one single file to stress t | ||||
| # setup compiler specific options | ||||
| if env['COMPILER_FAMILY'] == 'gcc' or env['COMPILER_FAMILY'] == 'clang': | ||||
|     env.Append(CCFLAGS = ['-Wall', '-Wextra', '-Werror', '-Wstrict-aliasing', '-pedantic']) | ||||
|     env.Append(CXXFLAGS = ['-std=c++20']) | ||||
|     env.Append(CXXFLAGS = [f'-std={config["CXX_STANDARD"]}']) | ||||
|     if build_type != 'release': | ||||
|         env.Append(LINKFLAGS = [f'-Wl,-rpath,{env["LIB_DIR"]}']) | ||||
|     env['LINKCOM'] = env['LINKCOM'].replace('$_LIBFLAGS', '-Wl,--start-group $_LIBFLAGS -Wl,--end-group') | ||||
| @ -299,7 +301,7 @@ if env['COMPILER_FAMILY'] == 'gcc' or env['COMPILER_FAMILY'] == 'clang': | ||||
| elif env['COMPILER_FAMILY'] == 'cl': | ||||
|     # C4201: nonstandard extension used : nameless struct/union - I use it and want to continue using it | ||||
|     # C4127: conditional expression is constant - some libs (CRC, format) don't compile with this enabled # TODO: fix? | ||||
|     env.Append(CCFLAGS = ['/W4', '/WX', '/wd4201', '/wd4127', '/std:c++20', '/permissive-', '/EHsc', '/FS', '/Zc:char8_t']) | ||||
|     env.Append(CCFLAGS = ['/W4', '/WX', '/wd4201', '/wd4127', f'/std:{config["CXX_STANDARD"]}', '/permissive-', '/EHsc', '/FS', '/Zc:char8_t']) | ||||
|     env.Append(CPPDEFINES = ['_CRT_SECURE_NO_WARNINGS']) # I'd like to not use MSVC specific versions of functions because they are "safer" ... | ||||
|     if build_type == 'debug': | ||||
|         env.Append(CCFLAGS = ['/Od', '/Zi'], LINKFLAGS = ' /DEBUG') | ||||
|  | ||||
| @ -1,9 +1,11 @@ | ||||
| 
 | ||||
| from SCons.Script import * | ||||
| 
 | ||||
| import glob | ||||
| import os | ||||
| import pathlib | ||||
| import platform | ||||
| import shutil | ||||
| import subprocess | ||||
| import sys | ||||
| 
 | ||||
| @ -21,16 +23,16 @@ def cook(env: Environment, remote: str = 'github', git_ref: str = '') -> dict: | ||||
|     if not did_run_script or env['UPDATE_REPOSITORIES']: | ||||
|         subprocess.run(('/usr/bin/env', 'python3', 'update_glslang_sources.py'), cwd=checkout_root, stdout=sys.stdout, stderr=sys.stderr, check=True) | ||||
|         pathlib.Path(repo['checkout_root'], _SCRIPT_STAMPFILE).touch() | ||||
|     # build_result = env.Cook('CMakeProject', project_root=checkout_root, generate_args = ['-DBUILD_TESTING=OFF']) | ||||
| 
 | ||||
|     # generator_script = os.path.join(repo['checkout_root'], 'gen_extension_headers.py') | ||||
|     # generator_script_input = os.path.join(repo['checkout_root'], 'glslang/ExtensionHeaders') | ||||
|     # generator_script_output = os.path.join(repo['checkout_root'], 'glslang/glsl_intrinsic_header.h') | ||||
|     # env.Command( | ||||
|     #     target = generator_script_output, | ||||
|     #     source = [generator_script, os.path.join(repo['checkout_root'], 'glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl')], | ||||
|     #     action = f'"$PYTHON" "{generator_script}" -i "{generator_script_input}" -o "$TARGET"' | ||||
|     # ) | ||||
|     # generate the build_info.h | ||||
|     generator_script = os.path.join(repo['checkout_root'], 'build_info.py') | ||||
|     generator_script_input = os.path.join(repo['checkout_root'], 'build_info.h.tmpl') | ||||
|     generator_script_output = os.path.join(repo['checkout_root'], 'glslang/build_info.h') | ||||
|     env.Command( | ||||
|         target = generator_script_output, | ||||
|         source = [generator_script, generator_script_input, os.path.join(repo['checkout_root'], 'CHANGES.md')], | ||||
|         action = f'"$PYTHON" "{generator_script}" "{repo["checkout_root"]}" -i "{generator_script_input}" -o "$TARGET"' | ||||
|     ) | ||||
| 
 | ||||
|     platform_source_dir = { | ||||
|         'Linux': 'Unix', | ||||
| @ -44,13 +46,33 @@ def cook(env: Environment, remote: str = 'github', git_ref: str = '') -> dict: | ||||
|                            + env.RGlob(os.path.join(repo['checkout_root'], 'SPIRV/'), '*.cpp') \ | ||||
|                            + env.RGlob(os.path.join(repo['checkout_root'], f'glslang/OSDependent/{platform_source_dir}/'), '*.cpp') | ||||
| 
 | ||||
|     # disable a few warnings when compiling with clang | ||||
|     additional_cxx_flags = { | ||||
|         'clang': ['-Wno-deprecated-copy', '-Wno-missing-field-initializers', '-Wno-gnu-redeclared-enum', | ||||
|                   '-Wno-unused-but-set-variable', '-Wno-deprecated-enum-enum-conversion'] | ||||
|     }.get(env['COMPILER_FAMILY'], []) | ||||
|     env.StaticLibrary( | ||||
|         CCFLAGS = env['CCFLAGS'] + additional_cxx_flags, | ||||
|         CPPPATH = repo['checkout_root'], | ||||
|         target = env['LIB_DIR'] + '/glslang_full', | ||||
|         source = glslang_source_files | ||||
|     ) | ||||
| 
 | ||||
|     # build the include folder | ||||
|     include_dir = os.path.join(checkout_root, 'include') | ||||
|     if not os.path.exists(include_dir) or env['UPDATE_REPOSITORIES']: | ||||
|         def copy_headers(dst, src): | ||||
|             os.makedirs(dst, exist_ok=True) | ||||
|             for file in glob.glob(os.path.join(src, '*.h')): | ||||
|                 shutil.copy(file, dst) | ||||
| 
 | ||||
|         copy_headers(os.path.join(include_dir, 'glslang/HLSL'), os.path.join(checkout_root, 'glslang/HLSL')) | ||||
|         copy_headers(os.path.join(include_dir, 'glslang/Include'), os.path.join(checkout_root, 'glslang/Include')) | ||||
|         copy_headers(os.path.join(include_dir, 'glslang/MachineIndependent'), os.path.join(checkout_root, 'glslang/MachineIndependent')) | ||||
|         copy_headers(os.path.join(include_dir, 'glslang/Public'), os.path.join(checkout_root, 'glslang/Public')) | ||||
|         copy_headers(os.path.join(include_dir, 'glslang/SPIRV'), os.path.join(checkout_root, 'SPIRV')) | ||||
| 
 | ||||
|     return { | ||||
|         'CPPPATH': [checkout_root], | ||||
|         'CPPPATH': [include_dir], | ||||
|         'LIBS': ['glslang_full'] | ||||
|     } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user