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.veli...@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 _______________________________________________ waffle mailing list waffle@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/waffle