Modernise CMake #2
authorDavid Seifert <soap@gentoo.org>
Sat, 29 Apr 2017 08:57:36 +0000 (10:57 +0200)
committerDavid Seifert <soap@gentoo.org>
Sat, 29 Apr 2017 09:23:15 +0000 (11:23 +0200)
This reverts commit cfc69d95afed34e1ba1371df0ddb56f2f491a5cb.
* Change CMAKE_INSTALL_PREFIX default on Windows in order
  to prevent permission denied errors when trying to install
  to "Program Files".

CMakeLists.txt
External/CMakeLists.txt
OGLCompilersDLL/CMakeLists.txt
SPIRV/CMakeLists.txt
StandAlone/CMakeLists.txt
glslang/CMakeLists.txt
glslang/OSDependent/Unix/CMakeLists.txt
glslang/OSDependent/Windows/CMakeLists.txt
gtests/CMakeLists.txt
hlsl/CMakeLists.txt

index 32395c0598245f6223e328592d8bea968cf7bf7d..1d98c9fef311a62b4e3116c83fd43bc739fc55ea 100644 (file)
@@ -1,6 +1,11 @@
-cmake_minimum_required(VERSION 2.8.11)
+# increase to 3.1 once all major distributions
+# include a version of CMake >= 3.1
+cmake_minimum_required(VERSION 2.8.12)
 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
 
+# Adhere to GNU filesystem layout conventions
+include(GNUInstallDirs)
+
 option(ENABLE_AMD_EXTENSIONS "Enables support of AMD-specific extensions" ON)
 option(ENABLE_GLSLANG_BINARIES "Builds glslangValidator and spirv-remap" ON)
 
@@ -8,11 +13,13 @@ option(ENABLE_NV_EXTENSIONS "Enables support of Nvidia-specific extensions" ON)
 
 option(ENABLE_HLSL "Enables HLSL input support" ON)
 
-enable_testing()
-
-set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "prefix")
+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32)
+    set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "..." FORCE)
+endif()
 
 project(glslang)
+# make testing optional
+include(CTest)
 
 if(ENABLE_AMD_EXTENSIONS)
     add_definitions(-DAMD_EXTENSIONS)
@@ -33,33 +40,39 @@ if(WIN32)
     endif(MSVC)
     add_definitions(-DGLSLANG_OSINCLUDE_WIN32)
 elseif(UNIX)
-    add_definitions(-fPIC)
     add_definitions(-DGLSLANG_OSINCLUDE_UNIX)
 else(WIN32)
     message("unknown platform")
 endif(WIN32)
 
-if(CMAKE_COMPILER_IS_GNUCXX)
-    add_definitions(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs
-      -Wunused-parameter -Wunused-value  -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable)
-    add_definitions(-Wno-reorder)  # disable this from -Wall, since it happens all over.
-    add_definitions(-std=c++11)
+if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
+    add_compile_options(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs
+                        -Wunused-parameter -Wunused-value  -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable)
+    add_compile_options(-Wno-reorder)  # disable this from -Wall, since it happens all over.
 elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
-    add_definitions(-Wall -Wuninitialized -Wunused -Wunused-local-typedefs
-      -Wunused-parameter -Wunused-value  -Wunused-variable)
-    add_definitions(-Wno-reorder)  # disable this from -Wall, since it happens all over.
-    add_definitions(-std=c++11)
+    add_compile_options(-Wall -Wuninitialized -Wunused -Wunused-local-typedefs
+                        -Wunused-parameter -Wunused-value  -Wunused-variable)
+    add_compile_options(-Wno-reorder)  # disable this from -Wall, since it happens all over.
+endif()
+
+# Request C++11
+if(${CMAKE_VERSION} VERSION_LESS 3.1)
+    # CMake versions before 3.1 do not understand CMAKE_CXX_STANDARD
+    # remove this block once CMake >=3.1 has fixated in the ecosystem
+    add_compile_options(-std=c++11)
+else()
+    set(CMAKE_CXX_STANDARD 11)
+    set(CMAKE_CXX_STANDARD_REQUIRED ON)
+    set(CMAKE_CXX_EXTENSIONS OFF)
 endif()
 
 function(glslang_set_link_args TARGET)
     # For MinGW compiles, statically link against the GCC and C++ runtimes.
     # This avoids the need to ship those runtimes as DLLs.
-    if(WIN32)
-       if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
-           set_target_properties(${TARGET} PROPERTIES
-                   LINK_FLAGS "-static -static-libgcc -static-libstdc++")
-        endif()
-    endif(WIN32)
+    if(WIN32 AND ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
+        set_target_properties(${TARGET} PROPERTIES
+                              LINK_FLAGS "-static -static-libgcc -static-libstdc++")
+    endif()
 endfunction(glslang_set_link_args)
 
 # We depend on these for later projects, so they should come first.
@@ -68,7 +81,7 @@ add_subdirectory(External)
 add_subdirectory(glslang)
 add_subdirectory(OGLCompilersDLL)
 if(ENABLE_GLSLANG_BINARIES)
-       add_subdirectory(StandAlone)
+    add_subdirectory(StandAlone)
 endif()
 add_subdirectory(SPIRV)
 if(ENABLE_HLSL)
index 5180ea569310d3a5581ea7fe334a02d5a17dcc84..4f694ee746f4c664722219e76449d485dac5641e 100644 (file)
@@ -1,34 +1,35 @@
 # Suppress all warnings from external projects.
 set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -w)
 
-if (TARGET gmock)
-  message(STATUS "Google Mock already configured - use it")
-elseif(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/googletest)
-  # We need to make sure Google Test does not mess up with the
-  # global CRT settings on Windows.
-  if(WIN32)
-    set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
-  endif(WIN32)
-  add_subdirectory(googletest)
-  set(GTEST_TARGETS
-    gtest
-    gtest_main
-    gmock
-    gmock_main
-  )
-  foreach(target ${GTEST_TARGETS})
-    set_property(TARGET ${target} PROPERTY FOLDER gtest)
-  endforeach()
-  mark_as_advanced(gmock_build_tests
-    BUILD_GMOCK
-    BUILD_GTEST
-    BUILD_SHARED_LIBS
-    gtest_build_samples
-    gtest_build_tests
-    gtest_disable_pthreads
-    gtest_force_shared_crt
-    gtest_hide_internal_symbols)
-else()
-  message(STATUS
-    "Google Mock was not found - tests based on that will not build")
+if(BUILD_TESTING)
+    if(TARGET gmock)
+        message(STATUS "Google Mock already configured - use it")
+    elseif(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/googletest)
+        # We need to make sure Google Test does not mess up with the
+        # global CRT settings on Windows.
+        if(WIN32)
+            set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
+        endif(WIN32)
+        add_subdirectory(googletest)
+        set(GTEST_TARGETS
+            gtest
+            gtest_main
+            gmock
+            gmock_main)
+        foreach(target ${GTEST_TARGETS})
+            set_property(TARGET ${target} PROPERTY FOLDER gtest)
+        endforeach()
+        mark_as_advanced(gmock_build_tests
+            BUILD_GMOCK
+            BUILD_GTEST
+            BUILD_SHARED_LIBS
+            gtest_build_samples
+            gtest_build_tests
+            gtest_disable_pthreads
+            gtest_force_shared_crt
+            gtest_hide_internal_symbols)
+    else()
+        message(STATUS
+            "Google Mock was not found - tests based on that will not build")
+    endif()
 endif()
index 4954db9458472bfefe9f741a9859de6fdc7c9d97..8edd143e80a53bd9897242ac91b789552c3e70ab 100644 (file)
@@ -1,11 +1,11 @@
 set(SOURCES InitializeDll.cpp InitializeDll.h)
 
 add_library(OGLCompiler STATIC ${SOURCES})
-set_property(TARGET OGLCompiler PROPERTY FOLDER glslang)
+set_property(TARGET OGLCompiler PROPERTY FOLDER glslang POSITION_INDEPENDENT_CODE ON)
 
 if(WIN32)
     source_group("Source" FILES ${SOURCES})
 endif(WIN32)
 
-install(TARGETS OGLCompiler 
-        ARCHIVE DESTINATION lib)
+install(TARGETS OGLCompiler
+        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
index aaf117802feae5c2903c59989edfc03c16c7edc7..2ad86d67fec5e8f3bb1731e80945acab5c59a550 100755 (executable)
@@ -40,11 +40,11 @@ if(ENABLE_NV_EXTENSIONS)
 endif(ENABLE_NV_EXTENSIONS)
 
 add_library(SPIRV STATIC ${SOURCES} ${HEADERS})
-set_property(TARGET SPIRV PROPERTY FOLDER glslang)
+set_property(TARGET SPIRV PROPERTY FOLDER glslang POSITION_INDEPENDENT_CODE ON)
 target_link_libraries(SPIRV glslang)
 
 add_library(SPVRemapper STATIC ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
-set_property(TARGET SPVRemapper PROPERTY FOLDER glslang)
+set_property(TARGET SPVRemapper PROPERTY FOLDER glslang POSITION_INDEPENDENT_CODE ON)
 
 if(WIN32)
     source_group("Source" FILES ${SOURCES} ${HEADERS})
@@ -52,6 +52,6 @@ if(WIN32)
 endif(WIN32)
 
 install(TARGETS SPIRV SPVRemapper
-        ARCHIVE DESTINATION lib)
+        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
 
-install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION include/SPIRV/)
+install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/SPIRV/)
index 2a9a3c47e3583fa90e69584b98db3742feca03c2..f37fb0f9f4cc79afcdd06bf9a3fe21277939f981 100644 (file)
@@ -1,12 +1,10 @@
 add_library(glslang-default-resource-limits
-    ${CMAKE_CURRENT_SOURCE_DIR}/ResourceLimits.cpp
-)
-set_property(TARGET glslang-default-resource-limits PROPERTY FOLDER glslang)
+            ${CMAKE_CURRENT_SOURCE_DIR}/ResourceLimits.cpp)
+set_property(TARGET glslang-default-resource-limits PROPERTY FOLDER glslang POSITION_INDEPENDENT_CODE ON)
 
 target_include_directories(glslang-default-resource-limits
-    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
-    PUBLIC ${PROJECT_SOURCE_DIR}
-)
+                           PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
+                           PUBLIC ${PROJECT_SOURCE_DIR})
 
 set(SOURCES StandAlone.cpp)
 set(REMAPPER_SOURCES spirv-remap.cpp)
@@ -41,7 +39,7 @@ if(WIN32)
 endif(WIN32)
 
 install(TARGETS glslangValidator
-        RUNTIME DESTINATION bin)
+        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
 
 install(TARGETS spirv-remap
-        RUNTIME DESTINATION bin)
+        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
index dac8cb89210743251a19b2c23b55c4b044d1b0d2..8b9c2ad264167bb94e24f127cde8933de189bbc1 100644 (file)
@@ -81,10 +81,10 @@ set(HEADERS
 # set(BISON_GLSLParser_OUTPUT_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp)
 
 add_library(glslang STATIC ${BISON_GLSLParser_OUTPUT_SOURCE} ${SOURCES} ${HEADERS})
-set_property(TARGET glslang PROPERTY FOLDER glslang)
+set_property(TARGET glslang PROPERTY FOLDER glslang POSITION_INDEPENDENT_CODE ON)
 target_link_libraries(glslang OGLCompiler OSDependent)
 if(ENABLE_HLSL)
-       target_link_libraries(glslang HLSL)
+    target_link_libraries(glslang HLSL)
 endif()
 
 if(WIN32)
@@ -95,10 +95,10 @@ if(WIN32)
     source_group("MachineIndependent\\Preprocessor" REGULAR_EXPRESSION "MachineIndependent/preprocessor/*")
 endif(WIN32)
 
-install(TARGETS glslang 
-        ARCHIVE DESTINATION lib)
+install(TARGETS glslang
+        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
 
 foreach(file ${HEADERS})
     get_filename_component(dir ${file} DIRECTORY)
-    install(FILES ${file} DESTINATION include/glslang/${dir})
+    install(FILES ${file} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/${dir})
 endforeach()
index 174cc9167e07e6f412d9bf00e1e0500784ff82e1..99e9ce1b709ae1258129d88dc35381965e190d9c 100644 (file)
@@ -1,5 +1,5 @@
 add_library(OSDependent STATIC ossource.cpp ../osinclude.h)
-set_property(TARGET OSDependent PROPERTY FOLDER glslang)
+set_property(TARGET OSDependent PROPERTY FOLDER glslang POSITION_INDEPENDENT_CODE ON)
 
-install(TARGETS OSDependent 
-        ARCHIVE DESTINATION lib)
+install(TARGETS OSDependent
+        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
index 399760c30a7d0ed38d204f18d09b53a2cbdc6080..cc65ad6ad34b3d3859ae0a8ffc7641588cbe5024 100644 (file)
@@ -1,17 +1,17 @@
 set(SOURCES ossource.cpp ../osinclude.h)
 
 add_library(OSDependent STATIC ${SOURCES})
-set_property(TARGET OSDependent PROPERTY FOLDER glslang)
+set_property(TARGET OSDependent PROPERTY FOLDER glslang POSITION_INDEPENDENT_CODE ON)
 
 # MinGW GCC complains about function pointer casts to void*.
 # Turn that off with -fpermissive.
 if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
-  target_compile_options(OSDependent PRIVATE -fpermissive)
+    target_compile_options(OSDependent PRIVATE -fpermissive)
 endif()
 
 if(WIN32)
     source_group("Source" FILES ${SOURCES})
 endif(WIN32)
 
-install(TARGETS OSDependent 
-        ARCHIVE DESTINATION lib)
+install(TARGETS OSDependent
+        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
index c383ca0741efbe5e55fa6d368510a168e14f129b..2616ac06563968ca64a667644d63bc313e528285 100644 (file)
@@ -1,55 +1,57 @@
-if (TARGET gmock)
-  message(STATUS "Google Mock found - building tests")
+if(BUILD_TESTING)
+    if(TARGET gmock)
+        message(STATUS "Google Mock found - building tests")
 
-  set(TEST_SOURCES
-    # Framework related source files
-    ${CMAKE_CURRENT_SOURCE_DIR}/Initializer.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/Settings.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/Settings.h
-    ${CMAKE_CURRENT_SOURCE_DIR}/TestFixture.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/TestFixture.h
+        set(TEST_SOURCES
+            # Framework related source files
+            ${CMAKE_CURRENT_SOURCE_DIR}/Initializer.h
+            ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/Settings.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/Settings.h
+            ${CMAKE_CURRENT_SOURCE_DIR}/TestFixture.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/TestFixture.h
 
-    # Test related source files
-    ${CMAKE_CURRENT_SOURCE_DIR}/AST.FromFile.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/BuiltInResource.FromFile.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/Config.FromFile.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/HexFloat.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/Hlsl.FromFile.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.Vk.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/Pp.FromFile.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/Spv.FromFile.cpp
-    # -- Remapper tests
-    ${CMAKE_CURRENT_SOURCE_DIR}/Remap.FromFile.cpp
-  )
+            # Test related source files
+            ${CMAKE_CURRENT_SOURCE_DIR}/AST.FromFile.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/BuiltInResource.FromFile.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/Config.FromFile.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/HexFloat.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/Hlsl.FromFile.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.Vk.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/Pp.FromFile.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/Spv.FromFile.cpp
 
-  add_executable(glslangtests ${TEST_SOURCES})
-  set_property(TARGET glslangtests PROPERTY FOLDER tests)
-  glslang_set_link_args(glslangtests)
-  install(TARGETS glslangtests
-        RUNTIME DESTINATION bin)
+            # -- Remapper tests
+            ${CMAKE_CURRENT_SOURCE_DIR}/Remap.FromFile.cpp)
 
-  set(GLSLANG_TEST_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../Test")
-  # Supply a default test root directory, so that manual testing
-  # doesn't have to specify the --test-root option in the normal
-  # case that you want to use the tests from the same source tree.
-  target_compile_definitions(glslangtests
-    PRIVATE GLSLANG_TEST_DIRECTORY="${GLSLANG_TEST_DIRECTORY}")
-  target_include_directories(glslangtests PRIVATE
-    ${CMAKE_CURRENT_SOURCE_DIR}
-    ${PROJECT_SOURCE_DIR}
-    ${gmock_SOURCE_DIR}/include
-    ${gtest_SOURCE_DIR}/include)
+        add_executable(glslangtests ${TEST_SOURCES})
+        set_property(TARGET glslangtests PROPERTY FOLDER tests)
+        glslang_set_link_args(glslangtests)
+        install(TARGETS glslangtests
+                RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
 
-  set(LIBRARIES
-      SPVRemapper glslang OSDependent OGLCompiler glslang
-      SPIRV glslang-default-resource-limits)
-  if(ENABLE_HLSL)
-    set(LIBRARIES ${LIBRARIES} HLSL)
-  endif(ENABLE_HLSL)
-  target_link_libraries(glslangtests PRIVATE ${LIBRARIES} gmock)
+        set(GLSLANG_TEST_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../Test")
+        # Supply a default test root directory, so that manual testing
+        # doesn't have to specify the --test-root option in the normal
+        # case that you want to use the tests from the same source tree.
+        target_compile_definitions(glslangtests
+                                   PRIVATE GLSLANG_TEST_DIRECTORY="${GLSLANG_TEST_DIRECTORY}")
+        target_include_directories(glslangtests PRIVATE
+                                   ${CMAKE_CURRENT_SOURCE_DIR}
+                                   ${PROJECT_SOURCE_DIR}
+                                   ${gmock_SOURCE_DIR}/include
+                                   ${gtest_SOURCE_DIR}/include)
 
-  add_test(NAME glslang-gtests
-    COMMAND glslangtests --test-root "${GLSLANG_TEST_DIRECTORY}")
+        set(LIBRARIES
+            SPVRemapper glslang OSDependent OGLCompiler glslang
+            SPIRV glslang-default-resource-limits)
+        if(ENABLE_HLSL)
+            set(LIBRARIES ${LIBRARIES} HLSL)
+        endif(ENABLE_HLSL)
+        target_link_libraries(glslangtests PRIVATE ${LIBRARIES} gmock)
+
+        add_test(NAME glslang-gtests
+                 COMMAND glslangtests --test-root "${GLSLANG_TEST_DIRECTORY}")
+    endif()
 endif()
index ec5f1a569ea6d174713134f48816e9b0c5275df7..24f5c9a1c7976f6c0121446fbb5746adea368273 100755 (executable)
@@ -7,7 +7,7 @@ set(SOURCES
     hlslGrammar.cpp
     hlslParseables.cpp)
 
-  set(HEADERS
+set(HEADERS
     hlslAttributes.h
     hlslParseHelper.h
     hlslTokens.h
@@ -18,11 +18,11 @@ set(SOURCES
     hlslParseables.h)
 
 add_library(HLSL STATIC ${SOURCES} ${HEADERS})
-set_property(TARGET HLSL PROPERTY FOLDER hlsl)
+set_property(TARGET HLSL PROPERTY FOLDER hlsl POSITION_INDEPENDENT_CODE ON)
 
 if(WIN32)
     source_group("Source" FILES ${SOURCES} ${HEADERS})
 endif(WIN32)
 
 install(TARGETS HLSL
-        ARCHIVE DESTINATION lib)
+        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})