cmake: pass -fno-PIC in building static libgo

LLVM builds may default to PIC, and it may pass -fPIC implicitly
to C compilations, including the C code in libgo. We pass
-fno-PIC to cancel this. This can be overridden by
GOLLVM_EXTRA_CFLAGS, in case we want a PIC static libgo.

Change-Id: I0e8ac1eb70ddd3d503096c4b672397673c1ffc73
Reviewed-on: https://go-review.googlesource.com/c/gollvm/+/186920
Reviewed-by: Than McIntosh <thanm@google.com>
diff --git a/cmake/modules/LibbacktraceUtils.cmake b/cmake/modules/LibbacktraceUtils.cmake
index d5fa7e9..1581cbf 100644
--- a/cmake/modules/LibbacktraceUtils.cmake
+++ b/cmake/modules/LibbacktraceUtils.cmake
@@ -75,17 +75,16 @@
   add_library(libbacktrace_nonpiclib
     OBJECT EXCLUDE_FROM_ALL ${libbacktracecfiles})
   set_target_properties(libbacktrace_nonpiclib
-    PROPERTIES COMPILE_FLAGS "${libbacktraceflags}")
+    PROPERTIES COMPILE_FLAGS "-fno-PIC ${libbacktraceflags}")
   target_include_directories(libbacktrace_nonpiclib
     BEFORE PRIVATE "${libgo_binroot}/libbacktrace")
 
   # pic
-  string(APPEND libbacktraceflags " -fPIC")
   add_library(libbacktrace_piclib
     OBJECT EXCLUDE_FROM_ALL ${libbacktracecfiles})
   target_include_directories(libbacktrace_piclib
     BEFORE PRIVATE "${libgo_binroot}/libbacktrace")
   set_target_properties(libbacktrace_piclib
-    PROPERTIES COMPILE_FLAGS "${libbacktraceflags}")
+    PROPERTIES COMPILE_FLAGS "-fPIC ${libbacktraceflags}")
 
 endfunction()
diff --git a/cmake/modules/LibffiUtils.cmake b/cmake/modules/LibffiUtils.cmake
index e96f931..8f5bfeb 100644
--- a/cmake/modules/LibffiUtils.cmake
+++ b/cmake/modules/LibffiUtils.cmake
@@ -82,12 +82,11 @@
 
   # Create libffi object libraries
   add_library(libffi_nonpiclib OBJECT EXCLUDE_FROM_ALL ${c_srcs} ${asm_srcs})
-  set_target_properties(libffi_nonpiclib PROPERTIES COMPILE_FLAGS "${libffiflags}")
+  set_target_properties(libffi_nonpiclib PROPERTIES COMPILE_FLAGS "-fno-PIC ${libffiflags}")
   target_include_directories(libffi_nonpiclib PUBLIC "${libffi_srcroot}/include")
 
-  string(APPEND libffiflags " -fPIC")
   add_library(libffi_piclib OBJECT EXCLUDE_FROM_ALL ${c_srcs} ${asm_srcs})
-  set_target_properties(libffi_piclib PROPERTIES COMPILE_FLAGS "${libffiflags}")
+  set_target_properties(libffi_piclib PROPERTIES COMPILE_FLAGS "-fPIC ${libffiflags}")
   target_include_directories(libffi_piclib PUBLIC "${libffi_srcroot}/include")
 
 endfunction()
diff --git a/libgo/CMakeLists.txt b/libgo/CMakeLists.txt
index 1bdd7d6..3db46ee 100644
--- a/libgo/CMakeLists.txt
+++ b/libgo/CMakeLists.txt
@@ -477,7 +477,7 @@
 
 # Library with non-PIC-compiled objects from libgo C code
 add_library(libgo_c_nonpiclib OBJECT EXCLUDE_FROM_ALL ${runtimecpaths})
-set_target_properties(libgo_c_nonpiclib PROPERTIES COMPILE_FLAGS "${baseopts}")
+set_target_properties(libgo_c_nonpiclib PROPERTIES COMPILE_FLAGS "-fno-PIC ${baseopts}")
 target_include_directories(libgo_c_nonpiclib PUBLIC
   "${libgo_csrcroot}/runtime"
   "${libgo_binroot}/runtime"