hadoop-common-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Colin Patrick McCabe (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HADOOP-11997) CMake CMAKE_C_FLAGS are non-portable
Date Tue, 26 May 2015 18:53:19 GMT

    [ https://issues.apache.org/jira/browse/HADOOP-11997?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14559619#comment-14559619
] 

Colin Patrick McCabe commented on HADOOP-11997:
-----------------------------------------------

I would rather set the flags explicitly than rely on {{CMAKE_BUILD_TYPE}}.  It's clearer and
less dependent on CMake version.

Are you going to post a patch to add Solaris compiler support, as Allen suggested?  Or add
more \-W options and fix the resulting warnings?  Or should we close this JIRA and take up
the discussion elsewhere?  It seems like if you are using gcc on Solaris, the flags don't
need to be modified.

> CMake CMAKE_C_FLAGS are non-portable
> ------------------------------------
>
>                 Key: HADOOP-11997
>                 URL: https://issues.apache.org/jira/browse/HADOOP-11997
>             Project: Hadoop Common
>          Issue Type: Sub-task
>          Components: build
>    Affects Versions: 2.7.0
>         Environment: All
>            Reporter: Alan Burlison
>            Assignee: Alan Burlison
>            Priority: Critical
>
> hadoop-common-project/hadoop-common/src/CMakeLists.txt (https://github.com/apache/hadoop/blob/trunk/hadoop-common-project/hadoop-common/src/CMakeLists.txt#L110)
contains the following unconditional assignments to CMAKE_C_FLAGS:
> set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O2")
> set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_REENTRANT -D_GNU_SOURCE")
> set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64")
> There are several issues here:
> 1. "-D_GNU_SOURCE" globally enables the use of all Linux-only extensions in hadoop-common
native source. This is probably a major contributor to the poor cross-platform portability
of Hadoop native code to non-Linux platforms as it makes it easy for developers to use non-portable
Linux features without realising. Use of Linux-specific features should be correctly bracketed
with conditional macro blocks that provide an alternative for non-Linux platforms.
> 2. "-g -Wall -O2" turns on debugging for all builds, I believe the correct mechanism
is to set the CMAKE_BUILD_TYPE CMake variable. If it is still necessary to override CFLAGS
it should probably be done conditionally dependent on the value of CMAKE_BUILD_TYPE.
> 3. "-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" On Solaris these flags are only needed
for largefile support in ILP32 applications, LP64 applications are largefile by default. I
believe the same is true on Linux, so these flags are harmless but redundant for 64-bit compilation.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message