diff --git a/BUILD.bazel b/BUILD.bazel new file mode 100644 index 00000000..b1a19679 --- /dev/null +++ b/BUILD.bazel @@ -0,0 +1,245 @@ +package( + default_visibility = ["//visibility:public"], +) + +# Description: +# +# Khronos reference front-end for GLSL and ESSL, and sample SPIR-V generator. + +licenses(["notice"]) # Mixed: BSD, MIT, Khronos, Apache 2.0 + +exports_files(["LICENSE"]) + +COMMON_COPTS = select({ + "@bazel_tools//src/conditions:windows": [""], + "//conditions:default": [ + "-Wall", + "-Wuninitialized", + "-Wunused", + "-Wunused-local-typedefs", + "-Wunused-parameter", + "-Wunused-value", + "-Wunused-variable", + "-Wno-reorder", + "-std=c++11", + "-fvisibility=hidden", + "-fvisibility-inlines-hidden", + "-fno-exceptions", + "-fno-rtti", + ], +}) + +cc_library( + name = "glslang", + srcs = glob( + [ + "glslang/GenericCodeGen/*.cpp", + "glslang/MachineIndependent/*.cpp", + "glslang/MachineIndependent/preprocessor/*.cpp", + "hlsl/*.cpp", + ], + exclude = [ + "glslang/MachineIndependent/pch.cpp", + "glslang/MachineIndependent/pch.h", + "hlsl/pch.cpp", + "hlsl/pch.h", + ], + ) + [ + "OGLCompilersDLL/InitializeDll.cpp", + ] + select({ + "@bazel_tools//src/conditions:windows": + ["glslang/OSDependent/Windows/ossource.cpp"], + "//conditions:default": + ["glslang/OSDependent/Unix/ossource.cpp"], + }), + hdrs = glob([ + "glslang/Include/*.h", + "glslang/MachineIndependent/*.h", + "glslang/MachineIndependent/preprocessor/*.h", + "hlsl/*.h", + ]) + [ + "OGLCompilersDLL/InitializeDll.h", + "StandAlone/DirStackFileIncluder.h", + "glslang/OSDependent/osinclude.h", + "glslang/Public/ShaderLang.h", + ], + copts = COMMON_COPTS, + defines = [ + "AMD_EXTENSIONS", + "ENABLE_HLSL=0", + "ENABLE_OPT=0", + "NV_EXTENSIONS", + ], + linkopts = select({ + "@bazel_tools//src/conditions:windows": [""], + "//conditions:default": ["-lm", "-lpthread"], + }), + linkstatic = 1, +) + +genrule( + name = "export_spirv_headers", + srcs = [ + "SPIRV/GLSL.ext.AMD.h", + "SPIRV/GLSL.ext.EXT.h", + "SPIRV/GLSL.ext.KHR.h", + "SPIRV/GLSL.ext.NV.h", + "SPIRV/GLSL.std.450.h", + "SPIRV/spirv.hpp", + ], + outs = [ + "include/SPIRV/GLSL.ext.AMD.h", + "include/SPIRV/GLSL.ext.EXT.h", + "include/SPIRV/GLSL.ext.KHR.h", + "include/SPIRV/GLSL.ext.NV.h", + "include/SPIRV/GLSL.std.450.h", + "include/SPIRV/spirv.hpp", + ], + cmd = "mkdir -p $(@D)/include/SPIRV && cp $(SRCS) $(@D)/include/SPIRV/", +) + +cc_library( + name = "SPIRV_headers", + hdrs = [":export_spirv_headers"], + copts = COMMON_COPTS, + includes = [ + "include", + "include/SPIRV", + ], + linkstatic = 1, +) + +cc_library( + name = "SPIRV", + srcs = glob( + ["SPIRV/*.cpp"], + exclude = [ + "SPIRV/SpvTools.cpp", + ], + ), + hdrs = [ + "SPIRV/GlslangToSpv.h", + "SPIRV/Logger.h", + "SPIRV/SPVRemapper.h", + "SPIRV/SpvBuilder.h", + "SPIRV/SpvTools.h", + "SPIRV/bitutils.h", + "SPIRV/disassemble.h", + "SPIRV/doc.h", + "SPIRV/hex_float.h", + "SPIRV/spvIR.h", + ], + copts = COMMON_COPTS, + includes = ["SPIRV"], + linkopts = select({ + "@bazel_tools//src/conditions:windows": [""], + "//conditions:default": ["-lm"], + }), + linkstatic = 1, + deps = [ + ":SPIRV_headers", + ":glslang", + ], +) + +cc_library( + name = "glslang-default-resource-limits", + srcs = ["StandAlone/ResourceLimits.cpp"], + hdrs = ["StandAlone/ResourceLimits.h"], + copts = COMMON_COPTS, + linkstatic = 1, + deps = [":glslang"], +) + +cc_binary( + name = "glslangValidator", + srcs = [ + "StandAlone/StandAlone.cpp", + "StandAlone/Worklist.h", + ], + copts = COMMON_COPTS, + deps = [ + ":SPIRV", + ":glslang", + ":glslang-default-resource-limits", + ], +) + +cc_binary( + name = "spirv-remap", + srcs = ["StandAlone/spirv-remap.cpp"], + copts = COMMON_COPTS, + deps = [ + ":SPIRV", + ":glslang", + ":glslang-default-resource-limits", + ], +) + +filegroup( + name = "test_files", + srcs = glob( + ["Test/**"], + exclude = [ + "Test/bump", + "Test/glslangValidator", + "Test/runtests", + ], + ), +) + +cc_library( + name = "glslang_test_lib", + testonly = 1, + srcs = [ + "gtests/HexFloat.cpp", + "gtests/Initializer.h", + "gtests/Settings.cpp", + "gtests/Settings.h", + "gtests/TestFixture.cpp", + "gtests/TestFixture.h", + "gtests/main.cpp", + ], + copts = COMMON_COPTS, + data = [":test_files"], + defines = select({ + # Unfortunately we can't use $(location) in cc_library at the moment. + # See https://github.com/bazelbuild/bazel/issues/1023 + # So we'll specify the path manually. + "@bazel_tools//src/conditions:windows": + ["GLSLANG_TEST_DIRECTORY='\"../../../../../Test\"'"], + "//conditions:default": + ["GLSLANG_TEST_DIRECTORY='\"Test\"'"], + }), + linkstatic = 1, + deps = [ + ":SPIRV", + ":glslang", + ":glslang-default-resource-limits", + "@com_google_googletest//:gtest", + ], +) + +GLSLANG_TESTS = glob( + ["gtests/*.FromFile.cpp"], + # Since we are not building the SPIRV-Tools dependency, the following tests + # cannot be performed. + exclude = [ + "gtests/Hlsl.FromFile.cpp", + "gtests/Spv.FromFile.cpp", + ], +) + +[cc_test( + name = test_file.replace("gtests/", "").replace(".FromFile.cpp", "") + "_test", + srcs = [test_file], + copts = COMMON_COPTS, + data = [ + ":test_files", + ], + deps = [ + ":SPIRV", + ":glslang", + ":glslang_test_lib", + ], +) for test_file in GLSLANG_TESTS] diff --git a/WORKSPACE b/WORKSPACE new file mode 100644 index 00000000..3c38e61d --- /dev/null +++ b/WORKSPACE @@ -0,0 +1,27 @@ +workspace(name = "org_khronos_glslang") +load( + "@bazel_tools//tools/build_defs/repo:http.bzl", + "http_archive", +) + +http_archive( + name = "com_google_googletest", + sha256 = "ef9e2e12e7bf115ee48b427ae171fc869eeaf1b532c0fcfd982f6a353d2471b4", + strip_prefix = "googletest-37ae1fc5e6be26f367d76c078beabd7024fed53a", + urls = ["https://github.com/google/googletest/archive/37ae1fc5e6be26f367d76c078beabd7024fed53a.zip"], # 2018-07-16 +) + +http_archive( + name = "com_googlesource_code_re2", + sha256 = "b885bb965ab4b6cf8718bbb8154d8f6474cd00331481b6d3e390babb3532263e", + strip_prefix = "re2-e860767c86e577b87deadf24cc4567ea83c4f162/", + urls = ["https://github.com/google/re2/archive/e860767c86e577b87deadf24cc4567ea83c4f162.zip"], +) + +http_archive( + name = "com_google_effcee", + build_file = "BUILD.effcee.bazel", + sha256 = "b0c21a01995fdf9792510566d78d5e7fe6f83cb4ba986eba691f4926f127cb34", + strip_prefix = "effcee-8f0a61dc95e0df18c18e0ac56d83b3fa9d2fe90b/", + urls = ["https://github.com/google/effcee/archive/8f0a61dc95e0df18c18e0ac56d83b3fa9d2fe90b.zip"], +) diff --git a/kokoro/linux-clang-release-bazel/build.sh b/kokoro/linux-clang-release-bazel/build.sh new file mode 100644 index 00000000..89c23fea --- /dev/null +++ b/kokoro/linux-clang-release-bazel/build.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Copyright (c) 2019 Google LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Linux Build Script. + +# Fail on any error. +set -e +# Display commands being run. +set -x + +CC=clang +CXX=clang++ +SRC=$PWD/github/glslang +cd $SRC + +# Bazel limitation: No 'External' directory is allowed!! +mv External third_party + +gsutil cp gs://bazel/0.29.1/release/bazel-0.29.1-linux-x86_64 . +chmod +x bazel-0.29.1-linux-x86_64 + +echo $(date): Build everything... +./bazel-0.29.1-linux-x86_64 build :all +echo $(date): Build completed. + +echo $(date): Starting bazel test... +./bazel-0.29.1-linux-x86_64 test :all +echo $(date): Bazel test completed. diff --git a/kokoro/linux-clang-release-bazel/continuous.cfg b/kokoro/linux-clang-release-bazel/continuous.cfg new file mode 100644 index 00000000..054f4f65 --- /dev/null +++ b/kokoro/linux-clang-release-bazel/continuous.cfg @@ -0,0 +1,16 @@ +# Copyright (c) 2019 Google LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Continuous build configuration. +build_file: "glslang/kokoro/linux-clang-release-bazel/build.sh" diff --git a/kokoro/linux-clang-release-bazel/presubmit.cfg b/kokoro/linux-clang-release-bazel/presubmit.cfg new file mode 100644 index 00000000..572898cb --- /dev/null +++ b/kokoro/linux-clang-release-bazel/presubmit.cfg @@ -0,0 +1,16 @@ +# Copyright (c) 2019 Google LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Presubmit build configuration. +build_file: "glslang/kokoro/linux-clang-release-bazel/build.sh" diff --git a/kokoro/macos-clang-release-bazel/build.sh b/kokoro/macos-clang-release-bazel/build.sh new file mode 100644 index 00000000..a899c137 --- /dev/null +++ b/kokoro/macos-clang-release-bazel/build.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Copyright (c) 2019 Google LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# macOS Build Script. + +# Fail on any error. +set -e +# Display commands being run. +set -x + +CC=clang +CXX=clang++ +SRC=$PWD/github/glslang +cd $SRC + +mv External third_party + +# Get bazel 0.29.1. +gsutil cp gs://bazel/0.29.1/release/bazel-0.29.1-darwin-x86_64 . +chmod +x bazel-0.29.1-darwin-x86_64 + +echo $(date): Build everything... +./bazel-0.29.1-darwin-x86_64 build :all +echo $(date): Build completed. + +echo $(date): Starting bazel test... +./bazel-0.29.1-darwin-x86_64 test :all +echo $(date): Bazel test completed. diff --git a/kokoro/macos-clang-release-bazel/continuous.cfg b/kokoro/macos-clang-release-bazel/continuous.cfg new file mode 100644 index 00000000..5822fd25 --- /dev/null +++ b/kokoro/macos-clang-release-bazel/continuous.cfg @@ -0,0 +1,16 @@ +# Copyright (c) 2019 Google LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Continuous build configuration. +build_file: "glslang/kokoro/macos-clang-release-bazel/build.sh" diff --git a/kokoro/macos-clang-release-bazel/presubmit.cfg b/kokoro/macos-clang-release-bazel/presubmit.cfg new file mode 100644 index 00000000..12cf6461 --- /dev/null +++ b/kokoro/macos-clang-release-bazel/presubmit.cfg @@ -0,0 +1,16 @@ +# Copyright (c) 2019 Google LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Presubmit build configuration. +build_file: "glslang/kokoro/macos-clang-release-bazel/build.sh" diff --git a/kokoro/windows-msvc-2015-release-bazel/build.bat b/kokoro/windows-msvc-2015-release-bazel/build.bat new file mode 100644 index 00000000..969d74d2 --- /dev/null +++ b/kokoro/windows-msvc-2015-release-bazel/build.bat @@ -0,0 +1,55 @@ +:: Copyright (c) 2019 Google LLC. +:: +:: Licensed under the Apache License, Version 2.0 (the "License"); +:: you may not use this file except in compliance with the License. +:: You may obtain a copy of the License at +:: +:: http://www.apache.org/licenses/LICENSE-2.0 +:: +:: Unless required by applicable law or agreed to in writing, software +:: distributed under the License is distributed on an "AS IS" BASIS, +:: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +:: See the License for the specific language governing permissions and +:: limitations under the License. +:: +:: Windows Build Script. + +@echo on + +set SRC=%cd%\github\glslang + +:: Force usage of python 3.6 +set PATH=C:\python36;%PATH% +cd %SRC% + +mv External third_party + +:: REM Install Bazel. +wget -q https://github.com/bazelbuild/bazel/releases/download/0.29.1/bazel-0.29.1-windows-x86_64.zip +unzip -q bazel-0.29.1-windows-x86_64.zip + +:: Set up MSVC +call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 +set BAZEL_VS=C:\Program Files (x86)\Microsoft Visual Studio 14.0 +set BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC +set BAZEL_SH=c:\tools\msys64\usr\bin\bash.exe +set BAZEL_PYTHON=c:\tools\python2\python.exe + +:: ######################################### +:: Start building. +:: ######################################### +echo "Build everything... %DATE% %TIME%" +bazel.exe build :all +if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL% +echo "Build Completed %DATE% %TIME%" + +:: ############## +:: Run the tests +:: ############## +echo "Running Tests... %DATE% %TIME%" +bazel.exe test :all +if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL% +echo "Tests Completed %DATE% %TIME%" + +exit /b 0 + diff --git a/kokoro/windows-msvc-2015-release-bazel/continuous.cfg b/kokoro/windows-msvc-2015-release-bazel/continuous.cfg new file mode 100644 index 00000000..4b068897 --- /dev/null +++ b/kokoro/windows-msvc-2015-release-bazel/continuous.cfg @@ -0,0 +1,16 @@ +# Copyright (c) 2019 Google LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Continuous build configuration. +build_file: "glslang/kokoro/windows-msvc-2015-release-bazel/build.bat" diff --git a/kokoro/windows-msvc-2015-release-bazel/presubmit.cfg b/kokoro/windows-msvc-2015-release-bazel/presubmit.cfg new file mode 100644 index 00000000..08bcefbb --- /dev/null +++ b/kokoro/windows-msvc-2015-release-bazel/presubmit.cfg @@ -0,0 +1,16 @@ +# Copyright (c) 2019 Google LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Presubmit build configuration. +build_file: "glslang/kokoro/windows-msvc-2015-release-bazel/build.bat"