From b5e0d10bc63f67554215db40d670cb944d77f445 Mon Sep 17 00:00:00 2001
From: Rohit Gupta <rohit.gupta@eurecom.fr>
Date: Fri, 9 Oct 2015 15:58:56 +0200
Subject: [PATCH] updated build scripts to provide sanity check for cpu flags

---
 cmake_targets/CMakeLists.txt |  8 ++++++++
 cmake_targets/build_oai      | 10 ++++++++++
 2 files changed, 18 insertions(+)

diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 47a8f3a9b7..90929d563b 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -143,8 +143,16 @@ else (CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l")
     set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -mssse3")
   endif()
 endif()
+
+set(C_FLAGS_PROCESSOR " ${C_FLAGS_PROCESSOR} ${CFLAGS_PROCESSOR_USER}")
+
 Message("C_FLAGS_PROCESSOR is ${C_FLAGS_PROCESSOR}")
 
+if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86")
+  if ( (NOT( C_FLAGS_PROCESSOR MATCHES "ssse3")) OR (NOT( C_FLAGS_PROCESSOR MATCHES "msse4.1")) OR (NOT( C_FLAGS_PROCESSOR MATCHES "msse4.2")) )
+    Message(FATAL_ERROR "For x86 Architecture, you must have following flags: -mssse3 -msse4.1 -msse4.2. The current detected flags are: ${C_FLAGS_PROCESSOR}. You can pass the flags manually in build script, for example: ./build_oai --cflags_processor \"-mssse3 -msse4.1 -msse4.2\" ")
+  endif()
+endif()
 
 #
 set(CMAKE_C_FLAGS
diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index 360beab9dc..cbbfa98045 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -49,6 +49,7 @@ REL="Rel10"
 HW="EXMIMO"
 EPC=0
 VERBOSE_COMPILE=0
+CFLAGS_PROCESSOR_USER=""
 
 function print_help() {
   echo_info '
@@ -105,6 +106,9 @@ Options
    Compiles oaisim or lte-softmodem without S1 interface, using direct link to IP instead
 --verbose-compile
    Shows detailed compilation instructions in makefile
+--cflags_processor
+   Manually Add CFLAGS of processor if they are not detected correctly by script. Only add these flags if you know your processor supports them. Example flags: -msse3 -msse4.1 -msse4.2 -mavx2
+
 Usage (first build):
  oaisim (eNB + UE): ./build_oai -I -g --oaisim -x --install-system-files
  Eurecom EXMIMO + COTS UE : ./build_oai -I -g --eNB --EPC -x --install-system-files
@@ -211,6 +215,10 @@ function main() {
 	    VERBOSE_COMPILE=1
             echo_info "Will compile with verbose instructions"
             shift;;
+       --cflags_processor)
+            CFLAGS_PROCESSOR_USER=$2
+            echo_info "setting CPU FLAGS from USER to: $CFLAGS_PROCESSOR_USER"
+            shift 2;;
         -h | --help)
             print_help
             exit 1;;
@@ -302,6 +310,7 @@ function main() {
     if [ "$NOS1" = "1" ] ; then
 	cat  $DIR/$lte_build_dir/CMakeLists.template >>  $cmake_file
     fi
+    echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >>  $cmake_file
     echo "set ( XFORMS $XFORMS )"                  >>  $cmake_file
     echo "set ( RRC_ASN1_VERSION \"${REL}\")"      >>  $cmake_file
     echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )"     >>  $cmake_file
@@ -430,6 +439,7 @@ function main() {
     echo_info "Compiling $oaisim_exec ($oaisim_build_dir)"
     cmake_file=$DIR/$oaisim_build_dir/CMakeLists.txt
     cp $DIR/$oaisim_build_dir/CMakeLists.template $cmake_file
+    echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >>  $cmake_file
     echo "set ( XFORMS $XFORMS )" >>  $cmake_file
     echo "set ( PRINT_STATS $PRINT_STATS )" >>  $cmake_file
     echo "set ( RRC_ASN1_VERSION \"${REL}\")" >>  $cmake_file
-- 
GitLab