CMake: use target_link_options

Replace set_target_properties(... LINK_FLAGS ...) with
target_link_options. This allows us to keep our link flags variables.
Note that this requires CMake 3.13.

Bug: b/145758253
Change-Id: I8425f7a8e6db087d4000a721971a0dadfed6c3a5
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/44110
Tested-by: Antonio Maiorano <amaiorano@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fd1179d..f973cba 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -551,10 +551,6 @@
 endif()
 unset(USE_EXCEPTIONS)
 
-# Transform SWIFTSHADER_LINK_FLAGS from semicolon delimited to whitespace
-# delimited (what is expected by LINK_FLAGS)
-string(REPLACE ";" " " SWIFTSHADER_LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}")
-
 ###########################################################
 # libbacktrace and boost
 ###########################################################
diff --git a/src/Common/CMakeLists.txt b/src/Common/CMakeLists.txt
index b41dad7..9b452e8 100644
--- a/src/Common/CMakeLists.txt
+++ b/src/Common/CMakeLists.txt
@@ -62,7 +62,6 @@
 set_target_properties(gl_common PROPERTIES
     POSITION_INDEPENDENT_CODE 1
     FOLDER "SwiftShader GL"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
 )
 
 target_include_directories(gl_common
@@ -80,6 +79,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(gl_common
+    PUBLIC
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(gl_common
     PRIVATE
         ${ROOT_PROJECT_LINK_LIBRARIES}
diff --git a/src/Device/CMakeLists.txt b/src/Device/CMakeLists.txt
index 3752b1f..2904017 100644
--- a/src/Device/CMakeLists.txt
+++ b/src/Device/CMakeLists.txt
@@ -59,7 +59,6 @@
 set_target_properties(vk_device PROPERTIES
     POSITION_INDEPENDENT_CODE 1
     FOLDER "SwiftShader VK"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
 )
 
 target_include_directories(vk_device
@@ -73,6 +72,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(vk_device
+    PUBLIC
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(vk_device
     PUBLIC
         vk_pipeline
diff --git a/src/Main/CMakeLists.txt b/src/Main/CMakeLists.txt
index 5ab1def..214abc9 100644
--- a/src/Main/CMakeLists.txt
+++ b/src/Main/CMakeLists.txt
@@ -61,7 +61,6 @@
 set_target_properties(gl_main PROPERTIES
     POSITION_INDEPENDENT_CODE 1
     FOLDER "SwiftShader GL"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
 )
 
 target_include_directories(gl_main
@@ -81,6 +80,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(gl_main
+    PUBLIC
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(gl_main
     PUBLIC
         gl_common
diff --git a/src/OpenGL/common/CMakeLists.txt b/src/OpenGL/common/CMakeLists.txt
index 872ddac..8adf5fd 100644
--- a/src/OpenGL/common/CMakeLists.txt
+++ b/src/OpenGL/common/CMakeLists.txt
@@ -42,7 +42,6 @@
 set_target_properties(libGLESCommon PROPERTIES
     POSITION_INDEPENDENT_CODE 1
     FOLDER "OpenGL"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
     PREFIX ""
 )
 
@@ -62,6 +61,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(libGLESCommon
+    PUBLIC
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(libGLESCommon
     PRIVATE
         ${ROOT_PROJECT_LINK_LIBRARIES}
diff --git a/src/OpenGL/compiler/CMakeLists.txt b/src/OpenGL/compiler/CMakeLists.txt
index 31dfe7a..d46308f 100644
--- a/src/OpenGL/compiler/CMakeLists.txt
+++ b/src/OpenGL/compiler/CMakeLists.txt
@@ -127,7 +127,6 @@
 set_target_properties(GLCompiler PROPERTIES
     POSITION_INDEPENDENT_CODE 1
     FOLDER "OpenGL"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
 )
 
 target_include_directories(GLCompiler
@@ -146,6 +145,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(GLCompiler
+    PUBLIC
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(GLCompiler
     PRIVATE
         ${ROOT_PROJECT_LINK_LIBRARIES}
diff --git a/src/OpenGL/libEGL/CMakeLists.txt b/src/OpenGL/libEGL/CMakeLists.txt
index de19295..4a28027 100644
--- a/src/OpenGL/libEGL/CMakeLists.txt
+++ b/src/OpenGL/libEGL/CMakeLists.txt
@@ -59,7 +59,6 @@
     POSITION_INDEPENDENT_CODE 1
     FOLDER "OpenGL"
     PREFIX ""
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
     RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
     LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
 )
@@ -83,6 +82,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(libEGL
+    PUBLIC
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(libEGL
     PRIVATE
         libGLESCommon
diff --git a/src/OpenGL/libGLES_CM/CMakeLists.txt b/src/OpenGL/libGLES_CM/CMakeLists.txt
index 29c81f5..bf0d0ce 100644
--- a/src/OpenGL/libGLES_CM/CMakeLists.txt
+++ b/src/OpenGL/libGLES_CM/CMakeLists.txt
@@ -65,7 +65,6 @@
     POSITION_INDEPENDENT_CODE 1
     FOLDER "OpenGL"
     PREFIX ""
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
     RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
     LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
 )
@@ -90,6 +89,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(libGLES_CM
+    PUBLIC
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(libGLES_CM
     PRIVATE
         libGLESCommon
diff --git a/src/OpenGL/libGLESv2/CMakeLists.txt b/src/OpenGL/libGLESv2/CMakeLists.txt
index ec28912..3b70a00 100644
--- a/src/OpenGL/libGLESv2/CMakeLists.txt
+++ b/src/OpenGL/libGLESv2/CMakeLists.txt
@@ -81,7 +81,6 @@
     POSITION_INDEPENDENT_CODE 1
     FOLDER "OpenGL"
     PREFIX ""
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
     RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
     LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
 )
@@ -106,6 +105,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(libGLESv2
+    PUBLIC
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(libGLESv2
     PRIVATE
         libGLESCommon
diff --git a/src/Pipeline/CMakeLists.txt b/src/Pipeline/CMakeLists.txt
index 1afde4b..5c014ba 100644
--- a/src/Pipeline/CMakeLists.txt
+++ b/src/Pipeline/CMakeLists.txt
@@ -87,7 +87,6 @@
 set_target_properties(vk_pipeline PROPERTIES
     POSITION_INDEPENDENT_CODE 1
     FOLDER "SwiftShader VK"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
 )
 
 target_include_directories(vk_pipeline
@@ -103,6 +102,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(vk_pipeline
+    PUBLIC
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(vk_pipeline
     PUBLIC
         vk_base
diff --git a/src/Renderer/CMakeLists.txt b/src/Renderer/CMakeLists.txt
index ae82434..ce3b2bc 100644
--- a/src/Renderer/CMakeLists.txt
+++ b/src/Renderer/CMakeLists.txt
@@ -69,7 +69,6 @@
 set_target_properties(gl_renderer PROPERTIES
     POSITION_INDEPENDENT_CODE 1
     FOLDER "SwiftShader GL"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
 )
 
 target_include_directories(gl_renderer
@@ -87,6 +86,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(gl_renderer
+    PUBLIC
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(gl_renderer
     PUBLIC
         gl_shader
diff --git a/src/Shader/CMakeLists.txt b/src/Shader/CMakeLists.txt
index 7d75f55..9d62cd6 100644
--- a/src/Shader/CMakeLists.txt
+++ b/src/Shader/CMakeLists.txt
@@ -53,7 +53,6 @@
 set_target_properties(gl_shader PROPERTIES
     POSITION_INDEPENDENT_CODE 1
     FOLDER "SwiftShader GL"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
 )
 
 target_include_directories(gl_shader
@@ -71,6 +70,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(gl_shader
+    PUBLIC
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(gl_shader
     PUBLIC
         gl_main
diff --git a/src/System/CMakeLists.txt b/src/System/CMakeLists.txt
index 09c4f49..24aae13 100644
--- a/src/System/CMakeLists.txt
+++ b/src/System/CMakeLists.txt
@@ -56,7 +56,6 @@
 set_target_properties(vk_system PROPERTIES
     POSITION_INDEPENDENT_CODE 1
     FOLDER "SwiftShader VK"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
 )
 
 target_include_directories(vk_system
@@ -68,3 +67,8 @@
     PRIVATE
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
+
+target_link_options(vk_system
+    PUBLIC
+        ${SWIFTSHADER_LINK_FLAGS}
+)
diff --git a/src/Vulkan/CMakeLists.txt b/src/Vulkan/CMakeLists.txt
index 3ff6ec5..fdd0117 100644
--- a/src/Vulkan/CMakeLists.txt
+++ b/src/Vulkan/CMakeLists.txt
@@ -137,8 +137,6 @@
     # have system libraries available, so ensure it does not depend on libc++.so.
     list(APPEND VULKAN_LINKER_FLAGS "-static-libstdc++")
 endif()
-# Convert list to space-delimited string for LINK_FLAGS
-string(REPLACE ";" " " VULKAN_LINKER_FLAGS "${VULKAN_LINKER_FLAGS}")
 
 add_library(vk_swiftshader SHARED
     ${VULKAN_SRC_FILES}
@@ -147,7 +145,6 @@
 set_target_properties(vk_swiftshader PROPERTIES
     POSITION_INDEPENDENT_CODE 1
     FOLDER "SwiftShader VK"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS} ${VULKAN_LINKER_FLAGS}"
     RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
     LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
 )
@@ -169,6 +166,12 @@
         $<$<CONFIG:Debug>:"DEBUGGER_WAIT_DIALOG">
 )
 
+target_link_options(vk_swiftshader
+    PRIVATE
+        ${SWIFTSHADER_LINK_FLAGS}
+        ${VULKAN_LINKER_FLAGS}
+)
+
 target_link_libraries(vk_swiftshader
     PRIVATE
         vk_system
diff --git a/src/WSI/CMakeLists.txt b/src/WSI/CMakeLists.txt
index d2eb42c..857019a 100644
--- a/src/WSI/CMakeLists.txt
+++ b/src/WSI/CMakeLists.txt
@@ -60,7 +60,6 @@
 set_target_properties(vk_wsi PROPERTIES
     POSITION_INDEPENDENT_CODE 1
     FOLDER "SwiftShader VK"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
 )
 
 target_include_directories(vk_wsi
@@ -74,6 +73,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(vk_wsi
+    PUBLIC
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(vk_wsi
     PUBLIC
         vk_pipeline
diff --git a/tests/GLESUnitTests/CMakeLists.txt b/tests/GLESUnitTests/CMakeLists.txt
index 6ea50a7..688f2c7 100644
--- a/tests/GLESUnitTests/CMakeLists.txt
+++ b/tests/GLESUnitTests/CMakeLists.txt
@@ -33,7 +33,6 @@
 
 set_target_properties(gles-unittests PROPERTIES
     FOLDER "Tests"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
     RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
 )
 
@@ -52,6 +51,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(gles-unittests
+    PRIVATE
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(gles-unittests
     PRIVATE
         libEGL
diff --git a/tests/MathUnitTests/CMakeLists.txt b/tests/MathUnitTests/CMakeLists.txt
index 6b6cfd5..772f8d2 100644
--- a/tests/MathUnitTests/CMakeLists.txt
+++ b/tests/MathUnitTests/CMakeLists.txt
@@ -33,7 +33,6 @@
 
 set_target_properties(math-unittests PROPERTIES
     FOLDER "Tests"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
     RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
 )
 
@@ -42,6 +41,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(math-unittests
+    PRIVATE
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(math-unittests
     PRIVATE
         vk_system
diff --git a/tests/ReactorBenchmarks/CMakeLists.txt b/tests/ReactorBenchmarks/CMakeLists.txt
index 7e80250..c3c8d01 100644
--- a/tests/ReactorBenchmarks/CMakeLists.txt
+++ b/tests/ReactorBenchmarks/CMakeLists.txt
@@ -33,7 +33,6 @@
 
 set_target_properties(ReactorBenchmarks PROPERTIES
     FOLDER "Benchmarks"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
     RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
 )
 
@@ -42,6 +41,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(ReactorBenchmarks
+    PRIVATE
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(ReactorBenchmarks
     PRIVATE
         benchmark::benchmark
diff --git a/tests/ReactorUnitTests/CMakeLists.txt b/tests/ReactorUnitTests/CMakeLists.txt
index f607add..39295f8 100644
--- a/tests/ReactorUnitTests/CMakeLists.txt
+++ b/tests/ReactorUnitTests/CMakeLists.txt
@@ -33,7 +33,6 @@
 
 set_target_properties(ReactorUnitTests PROPERTIES
     FOLDER "Tests"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
     RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
 )
 
@@ -42,6 +41,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(ReactorUnitTests
+    PRIVATE
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(ReactorUnitTests
     PRIVATE
         ${Reactor}
diff --git a/tests/SystemBenchmarks/CMakeLists.txt b/tests/SystemBenchmarks/CMakeLists.txt
index 6d37825..d411303 100644
--- a/tests/SystemBenchmarks/CMakeLists.txt
+++ b/tests/SystemBenchmarks/CMakeLists.txt
@@ -33,7 +33,6 @@
 
 set_target_properties(system-benchmarks PROPERTIES
     FOLDER "Benchmarks"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
     RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
 )
 
@@ -42,6 +41,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(system-benchmarks
+    PRIVATE
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(system-benchmarks
     PRIVATE
         benchmark::benchmark
diff --git a/tests/SystemUnitTests/CMakeLists.txt b/tests/SystemUnitTests/CMakeLists.txt
index e080cc0..f6c1f1f 100644
--- a/tests/SystemUnitTests/CMakeLists.txt
+++ b/tests/SystemUnitTests/CMakeLists.txt
@@ -34,7 +34,6 @@
 
 set_target_properties(system-unittests PROPERTIES
     FOLDER "Tests"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
     RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
 )
 
@@ -43,6 +42,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(system-unittests
+    PRIVATE
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(system-unittests
     PRIVATE
         vk_system
diff --git a/tests/VulkanUnitTests/CMakeLists.txt b/tests/VulkanUnitTests/CMakeLists.txt
index 81889ce..8640ccc 100644
--- a/tests/VulkanUnitTests/CMakeLists.txt
+++ b/tests/VulkanUnitTests/CMakeLists.txt
@@ -44,7 +44,6 @@
 
 set_target_properties(vk-unittests PROPERTIES
     FOLDER "Tests"
-    LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
     RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
 )
 
@@ -63,6 +62,11 @@
         ${ROOT_PROJECT_COMPILE_OPTIONS}
 )
 
+target_link_options(vk-unittests
+    PRIVATE
+        ${SWIFTSHADER_LINK_FLAGS}
+)
+
 target_link_libraries(vk-unittests
     PRIVATE
         gtest