[waffle] [PATCH 14/18] cmake: set most compiler flags/defines in a single location
Emil Velikov
emil.l.velikov at gmail.com
Tue Jul 22 20:31:40 PDT 2014
Do not define the same thing (_XOPEN_SOURCE) three times and use
compiler specific flags.
- GCC: Move visibility=hidden to global scale.
- WIN32: Don't do TLS.
- Static link Windows builds
- MINGW: link-in libgcc*.dll
- MSVC: link-in msvcrt*.dll
Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
---
cmake/Modules/WaffleDefineCompilerFlags.cmake | 105 ++++++++++++++++++--------
src/waffle/CMakeLists.txt | 1 -
src/waffle/core/wcore_error.c | 2 -
src/waffle/core/wcore_error_unittest.c | 4 -
src/waffle_test/wt_runner.c | 4 -
third_party/threads/CMakeLists.txt | 2 -
6 files changed, 75 insertions(+), 43 deletions(-)
diff --git a/cmake/Modules/WaffleDefineCompilerFlags.cmake b/cmake/Modules/WaffleDefineCompilerFlags.cmake
index b802250..710b7e0 100644
--- a/cmake/Modules/WaffleDefineCompilerFlags.cmake
+++ b/cmake/Modules/WaffleDefineCompilerFlags.cmake
@@ -33,51 +33,96 @@ function(waffle_add_c_flag flag var)
endif()
endfunction()
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --std=c99")
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
-set(CMAKE_C_FLAGS_DEBUG "-g3 -O0 -DDEBUG")
+if (NOT MSVC)
+ #
+ # compiler flags
+ #
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --std=c99")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
+ set(CMAKE_C_FLAGS_DEBUG "-g3 -O0 -DDEBUG")
-# Use '-g1' to produce enough debug info for generating backtraces, but not
-# enough for single-stepping.
-set(CMAKE_C_FLAGS_RELEASE "-g1 -O2 -DNDEBUG")
+ # Use '-g1' to produce enough debug info for generating backtraces, but not
+ # enough for single-stepping.
+ set(CMAKE_C_FLAGS_RELEASE "-g1 -O2 -DNDEBUG")
-waffle_add_c_flag("-Werror=implicit-function-declaration" WERROR_IMPLICIT_FUNCTION_DECLARATION)
-waffle_add_c_flag("-Werror=incompatible-pointer-types" WERROR_INCOMPATIBLE_POINTER_TYPES)
-waffle_add_c_flag("-Werror=int-conversion" WERROR_INT_CONVERSION)
+ waffle_add_c_flag("-Werror=implicit-function-declaration" WERROR_IMPLICIT_FUNCTION_DECLARATION)
+ waffle_add_c_flag("-Werror=incompatible-pointer-types" WERROR_INCOMPATIBLE_POINTER_TYPES)
+ waffle_add_c_flag("-Werror=int-conversion" WERROR_INT_CONVERSION)
+ waffle_add_c_flag("-fvisibility=hidden" WITH_VISIBILITY_HIDDEN)
-if(waffle_on_linux)
- # On MacOS, the SSE2 headers trigger this error.
- waffle_add_c_flag("-Werror=missing-prototypes" WERROR_MISSING_PROTOTYPES)
-endif()
+ if(waffle_on_linux)
+ # On MacOS, the SSE2 headers trigger this error.
+ waffle_add_c_flag("-Werror=missing-prototypes" WERROR_MISSING_PROTOTYPES)
+ endif()
+
+ if(MINGW)
+ # Avoid depending on MinGW runtime DLLs
+ check_c_compiler_flag(-static-libgcc HAVE_STATIC_LIBGCC_FLAG)
+ if (HAVE_STATIC_LIBGCC_FLAG)
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -static-libgcc")
+ set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -static-libgcc")
+ endif ()
+ else()
+ # Avoid using TLS with MinGW builds.
+ waffle_check_thread_local_storage()
+ endif()
+else()
+ # XXX: and update the threads code
+ # http://msdn.microsoft.com/en-us/library/aa383745.aspx
+ if(CMAKE_GENERATOR_TOOLSET MATCHES "_xp$")
+ # Windows XP
+ add_definitions(-D_WIN32_WINNT=0x0501 -DWINVER=0x0501)
+ else()
+ # Windows 7
+ add_definitions(-D_WIN32_WINNT=0x0601 -DWINVER=0x0601)
+ endif()
-waffle_check_thread_local_storage()
+ # Adjust warnings
+ add_definitions(-D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS)
-if(waffle_has_tls)
- add_definitions(-DWAFFLE_HAS_TLS)
-endif()
+ # Use static runtime
+ # http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_build_my_MSVC_application_with_a_static_runtime.3F
+ foreach(flag_var
+ CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
+ )
+ if(${flag_var} MATCHES "/MD")
+ string (REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
+ endif()
+ endforeach(flag_var)
-if(waffle_has_tls_model_initial_exec)
- add_definitions(-DWAFFLE_HAS_TLS_MODEL_INITIAL_EXEC)
endif()
if(waffle_on_mac)
add_definitions(-DWAFFLE_HAS_CGL)
endif()
-if(waffle_has_glx)
- add_definitions(-DWAFFLE_HAS_GLX)
-endif()
+if(waffle_on_linux)
+ if(waffle_has_glx)
+ add_definitions(-DWAFFLE_HAS_GLX)
+ endif()
-if(waffle_has_wayland)
- add_definitions(-DWAFFLE_HAS_WAYLAND)
-endif()
+ if(waffle_has_wayland)
+ add_definitions(-DWAFFLE_HAS_WAYLAND)
+ endif()
-if(waffle_has_x11_egl)
- add_definitions(-DWAFFLE_HAS_X11_EGL)
-endif()
+ if(waffle_has_x11_egl)
+ add_definitions(-DWAFFLE_HAS_X11_EGL)
+ endif()
+
+ if(waffle_has_gbm)
+ add_definitions(-DWAFFLE_HAS_GBM)
+ endif()
+
+ if(waffle_has_tls)
+ add_definitions(-DWAFFLE_HAS_TLS)
+ endif()
+
+ if(waffle_has_tls_model_initial_exec)
+ add_definitions(-DWAFFLE_HAS_TLS_MODEL_INITIAL_EXEC)
+ endif()
-if(waffle_has_gbm)
- add_definitions(-DWAFFLE_HAS_GBM)
+ add_definitions(-D_XOPEN_SOURCE=600)
endif()
if(waffle_on_windows)
diff --git a/src/waffle/CMakeLists.txt b/src/waffle/CMakeLists.txt
index 7e4c007..9507398 100644
--- a/src/waffle/CMakeLists.txt
+++ b/src/waffle/CMakeLists.txt
@@ -169,7 +169,6 @@ set_source_files_properties(
${waffle_sources}
PROPERTIES
LANGUAGE C
- COMPILE_FLAGS "-fvisibility=hidden"
)
include_directories(
diff --git a/src/waffle/core/wcore_error.c b/src/waffle/core/wcore_error.c
index 157b47e..fdf70f8 100644
--- a/src/waffle/core/wcore_error.c
+++ b/src/waffle/core/wcore_error.c
@@ -23,8 +23,6 @@
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#define _XOPEN_SOURCE 600 // for strerror_r
-
#include <errno.h>
#include <stdarg.h>
#include <stdbool.h>
diff --git a/src/waffle/core/wcore_error_unittest.c b/src/waffle/core/wcore_error_unittest.c
index 722930a..7435e51 100644
--- a/src/waffle/core/wcore_error_unittest.c
+++ b/src/waffle/core/wcore_error_unittest.c
@@ -23,10 +23,6 @@
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#ifdef __linux__
-# define _XOPEN_SOURCE 600
-#endif
-
#include <setjmp.h>
#include <stdarg.h>
#include <stdio.h>
diff --git a/src/waffle_test/wt_runner.c b/src/waffle_test/wt_runner.c
index 729c033..bd1e561 100644
--- a/src/waffle_test/wt_runner.c
+++ b/src/waffle_test/wt_runner.c
@@ -23,10 +23,6 @@
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#ifdef __linux__
-# define _XOPEN_SOURCE 500 // for strdup()
-#endif
-
#include "wt_runner.h"
#include <stdbool.h>
diff --git a/third_party/threads/CMakeLists.txt b/third_party/threads/CMakeLists.txt
index 3e12ae7..1cc6092 100644
--- a/third_party/threads/CMakeLists.txt
+++ b/third_party/threads/CMakeLists.txt
@@ -1,7 +1,5 @@
include_directories (${CMAKE_CURRENT_SOURCE_DIR})
-add_definitions(-D_XOPEN_SOURCE=600)
-
if(WIN32)
set(threads_sources threads_win32.c)
else()
--
2.0.2
More information about the waffle
mailing list