cmake_modules/platform.cmake
author nemo
Thu, 03 Oct 2013 12:22:12 -0400
changeset 9487 fbe203c1d11e
parent 9339 14f5f3a1e2f7
child 9517 217eacb69395
permissions -rw-r--r--
couple more wrap calls. freezer still doesn't propagate properly. mostly due to needing something like bullet trail to chop into segments tag borders. Adding that could allow portalling too, probably.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
     1
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
     2
if(APPLE)
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
     3
    set(CMAKE_FIND_FRAMEWORK "FIRST")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
     4
9268
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
     5
    #what system are we building for
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
     6
    set(minimum_macosx_version $ENV{MACOSX_DEPLOYMENT_TARGET})
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
     7
9268
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
     8
    #detect on which system we are: if sw_vers cannot be found for any reason (re)use minimum_macosx_version
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
     9
    find_program(sw_vers sw_vers)
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    10
    if(sw_vers)
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    11
        execute_process(COMMAND ${sw_vers} "-productVersion"
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    12
                        OUTPUT_VARIABLE current_macosx_version
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    13
                        OUTPUT_STRIP_TRAILING_WHITESPACE)
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    14
        string(REGEX REPLACE "([0-9]+.[0-9]+).[0-9]+" "\\1" current_macosx_version ${current_macosx_version})
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    15
    else()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    16
        if(NOT minimum_macosx_version)
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    17
            message(FATAL_ERROR "sw_vers not found! Need explicit MACOSX_DEPLOYMENT_TARGET variable set")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    18
        else()
9151
1d2df388fcc6 simplify cmake message syntax a little bit
koda
parents: 9150
diff changeset
    19
            message("*** sw_vers not found! Fallback to MACOSX_DEPLOYMENT_TARGET variable ***")
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    20
            set(current_macosx_version ${minimum_macosx_version})
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    21
        endif()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    22
    endif()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    23
9268
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
    24
    #if nothing is set, we deploy only for the current system
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    25
    if(NOT minimum_macosx_version)
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    26
        set(minimum_macosx_version ${current_macosx_version})
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    27
    endif()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    28
9268
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
    29
    #lower systems don't have enough processing power anyway
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    30
    if (minimum_macosx_version VERSION_LESS "10.4")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    31
        message(FATAL_ERROR "Hedgewars is not supported on Mac OS X pre-10.4")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    32
    endif()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    33
9268
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
    34
    #workaround for http://playcontrol.net/ewing/jibberjabber/big_behind-the-scenes_chang.html#SDL_mixer (Update 2)
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    35
    if(current_macosx_version VERSION_EQUAL "10.4")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    36
        find_package(SDL_mixer REQUIRED)
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    37
        set(DYLIB_SMPEG "-dylib_file @loader_path/Frameworks/smpeg.framework/Versions/A/smpeg:${SDLMIXER_LIBRARY}/Versions/A/Frameworks/smpeg.framework/Versions/A/smpeg")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    38
        set(DYLIB_MIKMOD "-dylib_file @loader_path/Frameworks/mikmod.framework/Versions/A/mikmod:${SDLMIXER_LIBRARY}/Versions/A/Frameworks/mikmod.framework/Versions/A/mikmod")
9268
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
    39
        add_flag_append(CMAKE_C_FLAGS "${DYLIB_SMPEG} ${DYLIB_MIKMOD}")
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
    40
        add_flag_append(CMAKE_CXX_FLAGS "${DYLIB_SMPEG} ${DYLIB_MIKMOD}")
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
    41
        add_flag_append(CMAKE_Pascal_FLAGS "-k${DYLIB_SMPEG} -k${DYLIB_MIKMOD}")
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    42
    endif()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    43
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    44
    if(NOT CMAKE_OSX_ARCHITECTURES)
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    45
        if(current_macosx_version VERSION_LESS "10.6")
9268
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
    46
            #SDL is only 32 bit on lower OS
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    47
            if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "powerpc*")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    48
                set(CMAKE_OSX_ARCHITECTURES "ppc7400")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    49
            else()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    50
                set(CMAKE_OSX_ARCHITECTURES "i386")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    51
            endif()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    52
        endif()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    53
    endif()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    54
9271
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    55
    #parse this system variable and adjust only the powerpc syntax to be compatible with -P
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    56
    if(CMAKE_OSX_ARCHITECTURES)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    57
        string(REGEX MATCH "[pP][pP][cC]+" powerpc_build "${CMAKE_OSX_ARCHITECTURES}")
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    58
        string(REGEX MATCH "[iI]386+" i386_build "${CMAKE_OSX_ARCHITECTURES}")
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    59
        string(REGEX MATCH "[xX]86_64+" x86_64_build "${CMAKE_OSX_ARCHITECTURES}")
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    60
        if(x86_64_build)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    61
            add_flag_prepend(CMAKE_Pascal_FLAGS -Px86_64)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    62
        elseif(i386_build)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    63
            add_flag_prepend(CMAKE_Pascal_FLAGS -Pi386)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    64
        elseif(powerpc_build)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    65
            add_flag_prepend(CMAKE_Pascal_FLAGS -Ppowerpc)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    66
        else()
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    67
            message(FATAL_ERROR "Unknown architecture present in CMAKE_OSX_ARCHITECTURES (${CMAKE_OSX_ARCHITECTURES})")
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    68
        endif()
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    69
        list(LENGTH CMAKE_OSX_ARCHITECTURES num_of_archs)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    70
        if(num_of_archs GREATER 1)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    71
            message(${WARNING} "Only one architecture in CMAKE_OSX_ARCHITECTURES is currently supported, picking the first one")
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    72
        endif()
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    73
    elseif(CMAKE_SIZEOF_VOID_P MATCHES "8")
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    74
        #if that variable is not set check if we are on x86_64 and if so force it, else use default
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    75
        add_flag_prepend(CMAKE_Pascal_FLAGS -Px86_64)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    76
    endif()
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    77
9268
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
    78
    #CMAKE_OSX_SYSROOT is set at the system version we are supposed to build on
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
    79
    #we need to provide the correct one when host and target differ
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    80
    if(NOT ${minimum_macosx_version} VERSION_EQUAL ${current_macosx_version})
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    81
        if(minimum_macosx_version VERSION_EQUAL "10.4")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    82
            set(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX10.4u.sdk/")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    83
            set(CMAKE_C_COMPILER "/Developer/usr/bin/gcc-4.0")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    84
            set(CMAKE_CXX_COMPILER "/Developer/usr/bin/g++-4.0")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    85
        else()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    86
            string(REGEX REPLACE "([0-9]+.[0-9]+).[0-9]+" "\\1" sdk_version ${minimum_macosx_version})
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    87
            set(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX${sdk_version}.sdk/")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    88
        endif()
9268
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
    89
        add_flag_append(CMAKE_Pascal_FLAGS "-XR${CMAKE_OSX_SYSROOT}")
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
    90
        add_flag_append(CMAKE_Pascal_FLAGS "-k-macosx_version_min -k${minimum_macosx_version}")
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    91
    endif()
9339
14f5f3a1e2f7 some work on cmake_pascal files to better support flags we use, make engine compile as library again
koda
parents: 9297
diff changeset
    92
14f5f3a1e2f7 some work on cmake_pascal files to better support flags we use, make engine compile as library again
koda
parents: 9297
diff changeset
    93
    #add user framework directory
14f5f3a1e2f7 some work on cmake_pascal files to better support flags we use, make engine compile as library again
koda
parents: 9297
diff changeset
    94
    add_flag_append(CMAKE_Pascal_FLAGS "-Ff~/Library/Frameworks")
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    95
endif(APPLE)
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    96
9210
31fedd5ef878 freepascal on windows only supports shared libraries
koda
parents: 9151
diff changeset
    97
if(MINGW)
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    98
    #this flags prevents a few dll hell problems
9268
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
    99
    add_flag_append(CMAKE_C_FLAGS "-static-libgcc")
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
   100
    add_flag_append(CMAKE_CXX_FLAGS "-static-libgcc")
9210
31fedd5ef878 freepascal on windows only supports shared libraries
koda
parents: 9151
diff changeset
   101
endif(MINGW)
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
   102
9210
31fedd5ef878 freepascal on windows only supports shared libraries
koda
parents: 9151
diff changeset
   103
if(WIN32)
9218
673bf356ad8c another code typo
koda
parents: 9211
diff changeset
   104
    if(NOT ${BUILD_SHARED_LIB})
9210
31fedd5ef878 freepascal on windows only supports shared libraries
koda
parents: 9151
diff changeset
   105
        message(FATAL_ERROR "Static linking is not supported on Windows")
31fedd5ef878 freepascal on windows only supports shared libraries
koda
parents: 9151
diff changeset
   106
    endif()
31fedd5ef878 freepascal on windows only supports shared libraries
koda
parents: 9151
diff changeset
   107
endif(WIN32)