mirror of
https://github.com/godotengine/godot-nir-static.git
synced 2025-12-31 13:48:20 +03:00
255 lines
9.1 KiB
Bash
Executable File
255 lines
9.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# The need for the custom steps has been found empirically, by multiple build attempts.
|
|
# The commands to run and their arguments have been obtained from the various Meson build scripts.
|
|
# Some can (or even must) be run locally at the Mesa repo, then resulting files are copied.
|
|
# Others, due to the sheer size of the generated files, are instead run at the Godot build system;
|
|
# this script will only copy the needed scripts and data files from Mesa.
|
|
|
|
check_error() {
|
|
if [ $? -ne 0 ]; then echo "Error!" && exit 1; fi
|
|
}
|
|
|
|
run_custom_steps_at_source() {
|
|
run_step() {
|
|
local P_SUBDIR=$1
|
|
local P_SCRIPT_PLUS_ARGS=$2
|
|
local P_REDIR_TARGET=$3
|
|
|
|
echo "Custom step: [$P_SUBDIR] $P_SCRIPT_PLUS_ARGS"
|
|
|
|
local OUTDIR=$GODOT_DIR/godot-mesa/$P_SUBDIR
|
|
mkdir -p $OUTDIR
|
|
check_error
|
|
pushd ./mesa/$P_SUBDIR > /dev/null
|
|
check_error
|
|
eval "local COMMAND=\"$P_SCRIPT_PLUS_ARGS\""
|
|
if [ ! -z "$P_REDIR_TARGET" ]; then
|
|
eval "TARGET=\"$P_REDIR_TARGET\""
|
|
python3 $COMMAND > $TARGET
|
|
else
|
|
python3 $COMMAND
|
|
fi
|
|
check_error
|
|
popd > /dev/null
|
|
check_error
|
|
}
|
|
|
|
run_step bin 'git_sha1_gen.py --output $OUTDIR/git_sha1.h'
|
|
run_step src/compiler/spirv 'spirv_info_gen.py --json spirv.core.grammar.json --out-h $OUTDIR/spirv_info.h --out-c $OUTDIR/spirv_info.c'
|
|
run_step src/compiler/spirv 'vtn_gather_types_c.py spirv.core.grammar.json $OUTDIR/vtn_gather_types.c'
|
|
}
|
|
|
|
copy_file() {
|
|
echo "Copying $1/$2"
|
|
mkdir -p godot-mesa/$1
|
|
check_error
|
|
cp ./mesa/$1/$2 godot-mesa/$1
|
|
check_error
|
|
}
|
|
|
|
copy_custom_steps_sources() {
|
|
copy_file src/compiler builtin_types.py
|
|
copy_file src/compiler builtin_types_h.py
|
|
copy_file src/compiler builtin_types_c.py
|
|
copy_file src/compiler/glsl ir_expression_operation.py
|
|
copy_file src/compiler/nir nir_builder_opcodes_h.py
|
|
copy_file src/compiler/nir nir_constant_expressions.py
|
|
copy_file src/compiler/nir nir_intrinsics.py
|
|
copy_file src/compiler/nir nir_intrinsics_h.py
|
|
copy_file src/compiler/nir nir_intrinsics_c.py
|
|
copy_file src/compiler/nir nir_intrinsics_indices_h.py
|
|
copy_file src/compiler/nir nir_opcodes.py
|
|
copy_file src/compiler/nir nir_opcodes_h.py
|
|
copy_file src/compiler/nir nir_opcodes_c.py
|
|
copy_file src/compiler/nir nir_algebraic.py
|
|
copy_file src/compiler/nir nir_opt_algebraic.py
|
|
copy_file src/compiler/spirv spir-v.xml
|
|
copy_file src/compiler/spirv vtn_generator_ids_h.py
|
|
copy_file src/microsoft/compiler dxil_nir_algebraic.py
|
|
copy_file src/util format_srgb.py
|
|
copy_file src/util/format u_format.yaml
|
|
copy_file src/util/format u_format_pack.py
|
|
copy_file src/util/format u_format_parse.py
|
|
copy_file src/util/format u_format_table.py
|
|
}
|
|
|
|
copy_sources() {
|
|
copy_subir_sources() {
|
|
echo "Copying [.c/.cpp/.h] $1/"
|
|
mkdir -p godot-mesa/$1
|
|
check_error
|
|
find ./mesa/$1 -maxdepth 1 \( -name '*.c' -or -name '*.cpp' -or -name '*.h' \) -exec cp {} godot-mesa/$1 \;
|
|
check_error
|
|
}
|
|
|
|
copy_subir_headers() {
|
|
echo "Copying [.h] $1/"
|
|
mkdir -p godot-mesa/$1
|
|
check_error
|
|
find ./mesa/$1 -maxdepth 1 -name '*.h' -exec cp {} godot-mesa/$1 \;
|
|
check_error
|
|
}
|
|
|
|
# These are the first we know for sure we want to copy.
|
|
copy_file . .editorconfig
|
|
copy_subir_sources src/microsoft/compiler
|
|
copy_subir_sources src/microsoft/spirv_to_dxil
|
|
# The need for these have been found by multiple build attempts.
|
|
# Initially, we copy only the headers. Later, we promote some to be
|
|
# copied with sources, as advised by linker errors.
|
|
# Multiple rounds of such procedure may be needed.
|
|
copy_subir_headers bin
|
|
copy_subir_headers include
|
|
copy_subir_headers include/GL
|
|
copy_subir_headers include/GLES
|
|
copy_subir_headers include/GLES2
|
|
copy_subir_headers include/GLES3
|
|
copy_subir_headers include/KHR
|
|
copy_subir_headers src/c11
|
|
copy_file src/c11/impl threads_win32.*
|
|
copy_file src/c11/impl time.c
|
|
copy_subir_sources src/compiler
|
|
copy_subir_headers src/compiler/glsl
|
|
copy_subir_sources src/compiler/nir
|
|
copy_subir_sources src/compiler/spirv
|
|
copy_subir_headers src/gallium/include/pipe
|
|
copy_subir_headers src/mesa/main
|
|
copy_subir_headers src/mesa/program
|
|
copy_subir_sources src/util/format
|
|
copy_subir_sources src/util/sha1
|
|
copy_file src/vulkan/runtime vk_object.h
|
|
copy_file src/vulkan/runtime vk_ycbcr_conversion.h
|
|
copy_file src/vulkan/util vk_format.h
|
|
# With non-header files in src/util/ we have to be selective,
|
|
# since many of the source files there are not needed and
|
|
# on top of that will cause build errors.
|
|
# We still take the liberty to copy all the headers.
|
|
copy_subir_headers src/util
|
|
copy_file src/util blob.c
|
|
copy_file src/util bitscan.c
|
|
copy_file src/util double.c
|
|
copy_file src/util float8.c
|
|
copy_file src/util half_float.c
|
|
copy_file src/util hash_table.c
|
|
copy_file src/util log.c
|
|
copy_file src/util mesa-blake3.c
|
|
copy_file src/util mesa-sha1.c
|
|
copy_file src/util memstream.c
|
|
copy_file src/util os_misc.c
|
|
copy_file src/util ralloc.c
|
|
copy_file src/util range_minimum_query.c
|
|
copy_file src/util rb_tree.c
|
|
copy_file src/util rgtc.c
|
|
copy_file src/util set.c
|
|
copy_file src/util simple_mtx.c
|
|
copy_file src/util softfloat.c
|
|
copy_file src/util string_buffer.c
|
|
copy_file src/util strndup.c
|
|
copy_file src/util u_call_once.c
|
|
copy_file src/util u_cpu_detect.c
|
|
copy_file src/util u_debug.c
|
|
copy_file src/util u_dynarray.c
|
|
copy_file src/util u_printf.c
|
|
copy_file src/util u_qsort.cpp
|
|
copy_file src/util u_thread.c
|
|
copy_file src/util u_vector.c
|
|
copy_file src/util u_worklist.c
|
|
copy_subir_headers src/util/blake3
|
|
copy_file src/util/blake3 blake3.c
|
|
copy_file src/util/blake3 blake3_dispatch.c
|
|
copy_file src/util/blake3 blake3_portable.c
|
|
copy_subir_headers src/util/perf
|
|
|
|
cp ./mesa/VERSION godot-mesa/VERSION.info
|
|
check_error
|
|
}
|
|
|
|
blacklist_sources() {
|
|
rm godot-mesa/src/compiler/nir/nir_stub.c
|
|
check_error
|
|
# These are programs. Not needed and makes build hungrier for dependencies.
|
|
rm godot-mesa/src/compiler/spirv/spirv2nir.c
|
|
check_error
|
|
rm godot-mesa/src/compiler/spirv/vtn_bindgen2.c
|
|
check_error
|
|
rm godot-mesa/src/microsoft/compiler/dxil_buffer_test.c
|
|
check_error
|
|
rm godot-mesa/src/microsoft/spirv_to_dxil/spirv2dxil.c
|
|
check_error
|
|
}
|
|
|
|
tweak_gitignore() {
|
|
# bin/ is globally Git-ignored; we need the one of Mesa.
|
|
echo '!bin/' > godot-mesa/.gitignore
|
|
check_error
|
|
echo 'generated/' >> godot-mesa/.gitignore
|
|
check_error
|
|
}
|
|
|
|
custom_source_gen() {
|
|
run_step() {
|
|
local P_SUBDIR=$1
|
|
local P_SCRIPT_PLUS_ARGS=$2
|
|
local P_REDIR_TARGET=$3
|
|
|
|
echo "Custom step: [$P_SUBDIR] $P_SCRIPT_PLUS_ARGS"
|
|
|
|
local OUTDIR=$GODOT_DIR/godot-mesa/$P_SUBDIR
|
|
local GENDIR=$GODOT_DIR/godot-mesa/generated/$P_SUBDIR
|
|
mkdir -p $GENDIR
|
|
check_error
|
|
pushd $OUTDIR > /dev/null
|
|
check_error
|
|
eval "local COMMAND=\"$P_SCRIPT_PLUS_ARGS\""
|
|
if [ ! -z "$P_REDIR_TARGET" ]; then
|
|
eval "TARGET=\"$P_REDIR_TARGET\""
|
|
python3 $COMMAND > $GENDIR/$TARGET
|
|
else
|
|
python3 $COMMAND
|
|
fi
|
|
check_error
|
|
popd > /dev/null
|
|
check_error
|
|
}
|
|
|
|
run_step 'src/compiler' 'glsl/ir_expression_operation.py enum' 'ir_expression_operation.h'
|
|
run_step 'src/compiler/nir' 'nir_builder_opcodes_h.py' 'nir_builder_opcodes.h'
|
|
run_step 'src/compiler/nir' 'nir_constant_expressions.py' 'nir_constant_expressions.c'
|
|
run_step 'src/compiler/nir' 'nir_intrinsics_h.py --out $GENDIR/nir_intrinsics.h'
|
|
run_step 'src/compiler/nir' 'nir_intrinsics_c.py --out $GENDIR/nir_intrinsics.c'
|
|
run_step 'src/compiler/nir' 'nir_intrinsics_indices_h.py --out $GENDIR/nir_intrinsics_indices.h'
|
|
run_step 'src/compiler/nir' 'nir_opcodes_h.py' 'nir_opcodes.h'
|
|
run_step 'src/compiler/nir' 'nir_opcodes_c.py' 'nir_opcodes.c'
|
|
run_step 'src/compiler/nir' 'nir_opt_algebraic.py --out $GENDIR/nir_opt_algebraic.c'
|
|
run_step 'src/compiler/spirv' 'vtn_generator_ids_h.py spir-v.xml $GENDIR/vtn_generator_ids.h'
|
|
run_step 'src/microsoft/compiler' 'dxil_nir_algebraic.py -p ../../../src/compiler/nir' 'dxil_nir_algebraic.c'
|
|
run_step 'src/util' 'format_srgb.py' 'format_srgb.c'
|
|
run_step 'src/util/format' 'u_format_table.py u_format.yaml --enums' 'u_format_gen.h'
|
|
run_step 'src/util/format' 'u_format_table.py u_format.yaml --header' 'u_format_pack.h'
|
|
run_step 'src/util/format' 'u_format_table.py u_format.yaml' 'u_format_table.c'
|
|
run_step 'src/compiler' 'builtin_types_h.py $GENDIR/builtin_types.h'
|
|
run_step 'src/compiler' 'builtin_types_c.py $GENDIR/builtin_types.c'
|
|
}
|
|
|
|
|
|
GODOT_DIR=$(pwd)
|
|
|
|
if [ -d ./godot-mesa ]; then
|
|
echo "Clearing godot-mesa/"
|
|
find godot-mesa -mindepth 1 -type d | xargs rm -rf
|
|
fi
|
|
|
|
run_custom_steps_at_source
|
|
copy_custom_steps_sources
|
|
copy_sources
|
|
blacklist_sources
|
|
tweak_gitignore
|
|
|
|
if [ -d ./godot-patches ]; then
|
|
echo "Applying patches"
|
|
find ./godot-patches -name '*.patch' -exec git apply {} \;
|
|
fi
|
|
|
|
custom_source_gen
|