Blob Blame Raw
From d2a8230cc05d77dad82a60329881244814797e4c Mon Sep 17 00:00:00 2001
From: Rafael Amador Galvan <rafael.amador@gmail.com>
Date: Fri, 8 Mar 2019 11:39:58 -0600
Subject: [PATCH 1/2] pkg-config compatibility

---
 CMakeLists.txt              | 13 ++++++++-----
 SPIRV/CMakeLists.txt        | 19 +++++++++++++++++--
 SPIRV/SpvTools.cpp          |  4 ++--
 SPIRV/spirv.pc.cmake.in     | 11 +++++++++++
 StandAlone/CMakeLists.txt   |  9 ++++++++-
 glslang/CMakeLists.txt      |  3 +++
 glslang/glslang.pc.cmake.in | 11 +++++++++++
 7 files changed, 60 insertions(+), 10 deletions(-)
 create mode 100644 SPIRV/spirv.pc.cmake.in
 create mode 100644 glslang/glslang.pc.cmake.in

diff --git a/CMakeLists.txt b/CMakeLists.txt
index aafa70ed1..21ecef08d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -57,6 +57,13 @@ macro(glslang_pch SRCS PCHCPP)
 endmacro(glslang_pch)
 
 project(glslang)
+
+# using pkg-config to configure include paths and link libraries
+include(FindPkgConfig)
+pkg_check_modules(SPIRV_TOOLS REQUIRED SPIRV-Tools>=2019.2.1)
+if(BUILD_SHARED_LIBS)
+    pkg_check_modules(SPIRV_TOOLS_SHARED REQUIRED SPIRV-Tools-shared>=2019.2.1)
+endif(BUILD_SHARED_LIBS)
 # make testing optional
 include(CTest)
 
@@ -117,11 +124,7 @@ endfunction(glslang_set_link_args)
 # We depend on these for later projects, so they should come first.
 add_subdirectory(External)
 
-if(NOT TARGET SPIRV-Tools-opt)
-    set(ENABLE_OPT OFF)
-endif()
-
-if(ENABLE_OPT)
+if(${SPIRV_TOOLS_FOUND} EQUAL 1)
     message(STATUS "optimizer enabled")
     add_definitions(-DENABLE_OPT=1)
 else()
diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt
index 1997e74c3..1760a065b 100644
--- a/SPIRV/CMakeLists.txt
+++ b/SPIRV/CMakeLists.txt
@@ -48,6 +48,10 @@ set_property(TARGET SPIRV PROPERTY FOLDER glslang)
 set_property(TARGET SPIRV PROPERTY POSITION_INDEPENDENT_CODE ON)
 target_include_directories(SPIRV PUBLIC ..)
 
+
+set(SPIRV_NAME spirv)
+set(SPIRV_VERSION 1.3)
+
 if (ENABLE_SPVREMAPPER)
     add_library(SPVRemapper ${LIB_TYPE} ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
     set_property(TARGET SPVRemapper PROPERTY FOLDER glslang)
@@ -61,13 +65,21 @@ if(WIN32 AND BUILD_SHARED_LIBS)
     endif()
 endif()
 
+target_include_directories(SPIRV PUBLIC ${SPIRV_TOOLS_INCLUDE_DIRS})
+target_compile_options(SPIRV PUBLIC ${SPIRV_TOOLS_CFLAGS_OTHER})
+target_link_libraries(SPIRV ${SPIRV_TOOLS_LIBRARIES})
+if(BUILD_SHARED_LIBS)
+    target_include_directories(SPIRV PUBLIC ${SPIRV_TOOLS_SHARED_INCLUDE_DIRS})
+    target_compile_options(SPIRV PUBLIC ${SPIRV_TOOLS_SHARED_CFLAGS_OTHER})
+    target_link_libraries(SPIRV ${SPIRV_TOOLS_SHARED_LIBRARIES})
+endif(BUILD_SHARED_LIBS)
+
 if(ENABLE_OPT)
     target_include_directories(SPIRV
         PRIVATE ${spirv-tools_SOURCE_DIR}/include
         PRIVATE ${spirv-tools_SOURCE_DIR}/source
     )
-    target_link_libraries(SPIRV glslang SPIRV-Tools-opt)
-    target_include_directories(SPIRV PUBLIC ../External)
+    target_link_libraries(SPIRV glslang)
 else()
     target_link_libraries(SPIRV glslang)
 endif(ENABLE_OPT)
@@ -96,5 +108,8 @@ if(ENABLE_GLSLANG_INSTALL)
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
 
+    # spirv.pc Configuration
+    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/spirv.pc.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/spirv.pc @ONLY)
+    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/spirv.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
     install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/SPIRV/)
 endif(ENABLE_GLSLANG_INSTALL)
diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp
index eec06e0ac..723a64452 100644
--- a/SPIRV/SpvTools.cpp
+++ b/SPIRV/SpvTools.cpp
@@ -43,8 +43,8 @@
 #include <iostream>
 
 #include "SpvTools.h"
-#include "spirv-tools/optimizer.hpp"
-#include "spirv-tools/libspirv.h"
+#include <spirv-tools/optimizer.hpp>
+#include <spirv-tools/libspirv.h>
 
 namespace glslang {
 
diff --git a/SPIRV/spirv.pc.cmake.in b/SPIRV/spirv.pc.cmake.in
new file mode 100644
index 000000000..dfcad940b
--- /dev/null
+++ b/SPIRV/spirv.pc.cmake.in
@@ -0,0 +1,11 @@
+    prefix=@CMAKE_INSTALL_PREFIX@
+    exec_prefix=@CMAKE_INSTALL_PREFIX@
+    libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
+    includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
+    
+    Name: @SPIRV_NAME@
+    Description: SPIR-V is a binary intermediate language for representing graphical-shader stages and compute kernels for multiple Khronos APIs, including OpenCL, OpenGL, and Vulkan
+    Requires:
+    Version: @SPIRV_VERSION@
+    Libs: -L${libdir} -lSPIRV
+    Cflags: -I${includedir}
\ No newline at end of file
diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt
index 5cea53d9f..89a7da9c4 100644
--- a/StandAlone/CMakeLists.txt
+++ b/StandAlone/CMakeLists.txt
@@ -23,6 +23,14 @@ set(LIBRARIES
     SPVRemapper
     glslang-default-resource-limits)
 
+if(BUILD_SHARED_LIBS)
+    set(LIBRARIES ${LIBRARIES} ${SPIRV_TOOLS_SHARED_LIBRARIES})
+    target_include_directories(glslangValidator PUBLIC ${SPIRV_TOOLS_SHARED_INCLUDE_DIRS})
+else()
+    set(LIBRARIES ${LIBRARIES} ${SPIRV_TOOLS_LIBRARIES})
+    target_include_directories(glslangValidator PUBLIC ${SPIRV_TOOLS_INCLUDE_DIRS})
+endif(BUILD_SHARED_LIBS)
+
 if(WIN32)
     set(LIBRARIES ${LIBRARIES} psapi)
 elseif(UNIX)
@@ -33,7 +41,6 @@ endif(WIN32)
 
 target_link_libraries(glslangValidator ${LIBRARIES})
 target_link_libraries(spirv-remap ${LIBRARIES})
-target_include_directories(glslangValidator PUBLIC ../External)
 
 if(WIN32)
     source_group("Source" FILES ${SOURCES})
diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt
index 5f51476ba..daf717fab 100644
--- a/glslang/CMakeLists.txt
+++ b/glslang/CMakeLists.txt
@@ -80,6 +80,7 @@ set(HEADERS
 #                    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
 # set(BISON_GLSLParser_OUTPUT_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp)
 
+set(VERSION 7.11.3113)
 glslang_pch(SOURCES MachineIndependent/pch.cpp)
 
 add_library(glslang ${LIB_TYPE} ${BISON_GLSLParser_OUTPUT_SOURCE} ${SOURCES} ${HEADERS})
@@ -113,6 +114,8 @@ if(ENABLE_GLSLANG_INSTALL)
         install(TARGETS glslang
                 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
     endif()
+    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/glslang.pc.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/glslang.pc @ONLY)
+    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/glslang.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
 endif(ENABLE_GLSLANG_INSTALL)
 
 if(ENABLE_GLSLANG_INSTALL)
diff --git a/glslang/glslang.pc.cmake.in b/glslang/glslang.pc.cmake.in
new file mode 100644
index 000000000..921497eb6
--- /dev/null
+++ b/glslang/glslang.pc.cmake.in
@@ -0,0 +1,11 @@
+    prefix=@CMAKE_INSTALL_PREFIX@
+    exec_prefix=@CMAKE_INSTALL_PREFIX@
+    libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
+    includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
+    
+    Name: @PROJECT_NAME@
+    Description: OpenGL and OpenGL ES shader front end and validator
+    Requires:
+    Version: @VERSION@
+    Libs: -L${libdir} -lglslang -lOSDependent -lHLSL -lOGLCompiler -lSPVRemapper
+    Cflags: -I${includedir}
\ No newline at end of file

From 0ebd323091567c65be3f2831a3bcac6223b0aa52 Mon Sep 17 00:00:00 2001
From: Rafael Amador Galvan <rafael.amador@gmail.com>
Date: Fri, 8 Mar 2019 11:50:49 -0600
Subject: [PATCH 2/2] removed the section belonging to the SPIRV-Tools
 dependency

---
 External/CMakeLists.txt | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/External/CMakeLists.txt b/External/CMakeLists.txt
index 4d9690134..24f03237a 100644
--- a/External/CMakeLists.txt
+++ b/External/CMakeLists.txt
@@ -34,10 +34,3 @@ if(BUILD_TESTING)
     endif()
 endif()
 
-if(ENABLE_OPT AND NOT TARGET SPIRV-Tools-opt)
-    if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/spirv-tools)
-        set(SPIRV_SKIP_TESTS ON CACHE BOOL "Skip building SPIRV-Tools tests")
-        add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/spirv-tools spirv-tools)
-    endif()
-endif()
-