cmake_modules/platform.cmake
author Wuzzy <Wuzzy2@mail.ru>
Wed, 25 Oct 2017 23:09:41 +0200
changeset 12763 ad67a3804981
parent 11362 ed5a6478e710
child 15333 5b2dec63f4cf
permissions -rw-r--r--
Fix sometimes ammo schemes not being saved after changing before an ammo scheme got deleted in session This was because the bool isDeleting is not initialized, so its initial value is unpredictable. Which means there's chance it starts with true, confusing the frontend.
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)
9517
217eacb69395 fail early when an incompatible cmake version is found
koda
parents: 9339
diff changeset
     3
    if(${CMAKE_VERSION} VERSION_GREATER "2.8.10.2" AND
217eacb69395 fail early when an incompatible cmake version is found
koda
parents: 9339
diff changeset
     4
       ${CMAKE_VERSION} VERSION_LESS "2.8.12.1")
217eacb69395 fail early when an incompatible cmake version is found
koda
parents: 9339
diff changeset
     5
        message(FATAL_ERROR "This version of CMake is known *not* to work, please update or use a lower version")
217eacb69395 fail early when an incompatible cmake version is found
koda
parents: 9339
diff changeset
     6
    endif()
217eacb69395 fail early when an incompatible cmake version is found
koda
parents: 9339
diff changeset
     7
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
     8
    set(CMAKE_FIND_FRAMEWORK "FIRST")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
     9
9268
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
    10
    #what system are we building for
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    11
    set(minimum_macosx_version $ENV{MACOSX_DEPLOYMENT_TARGET})
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    12
9268
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
    13
    #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
    14
    find_program(sw_vers sw_vers)
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    15
    if(sw_vers)
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    16
        execute_process(COMMAND ${sw_vers} "-productVersion"
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    17
                        OUTPUT_VARIABLE current_macosx_version
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    18
                        OUTPUT_STRIP_TRAILING_WHITESPACE)
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    19
        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
    20
    else()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    21
        if(NOT minimum_macosx_version)
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    22
            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
    23
        else()
9151
1d2df388fcc6 simplify cmake message syntax a little bit
koda
parents: 9150
diff changeset
    24
            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
    25
            set(current_macosx_version ${minimum_macosx_version})
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    26
        endif()
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
    #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
    30
    if(NOT minimum_macosx_version)
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    31
        set(minimum_macosx_version ${current_macosx_version})
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
9858
343d12172070 drop 10.4 support, needed after introduction of @rpath
koda
parents: 9673
diff changeset
    34
    #10.3 systems don't have enough processing power anyway
343d12172070 drop 10.4 support, needed after introduction of @rpath
koda
parents: 9673
diff changeset
    35
    #10.4 does not have @rpath support (which SDL uses)
343d12172070 drop 10.4 support, needed after introduction of @rpath
koda
parents: 9673
diff changeset
    36
    if(minimum_macosx_version VERSION_LESS "10.5")
343d12172070 drop 10.4 support, needed after introduction of @rpath
koda
parents: 9673
diff changeset
    37
        message(FATAL_ERROR "Hedgewars is not supported on your version of Mac OS X")
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    38
    endif()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    39
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    40
    if(NOT CMAKE_OSX_ARCHITECTURES)
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    41
        if(current_macosx_version VERSION_LESS "10.6")
9858
343d12172070 drop 10.4 support, needed after introduction of @rpath
koda
parents: 9673
diff changeset
    42
            #SDL is only 32 bit on older OS version
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    43
            if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "powerpc*")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    44
                set(CMAKE_OSX_ARCHITECTURES "ppc7400")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    45
            else()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    46
                set(CMAKE_OSX_ARCHITECTURES "i386")
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    47
            endif()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    48
        endif()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    49
    endif()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    50
9271
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    51
    #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
    52
    if(CMAKE_OSX_ARCHITECTURES)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    53
        string(REGEX MATCH "[pP][pP][cC]+" powerpc_build "${CMAKE_OSX_ARCHITECTURES}")
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    54
        string(REGEX MATCH "[iI]386+" i386_build "${CMAKE_OSX_ARCHITECTURES}")
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    55
        string(REGEX MATCH "[xX]86_64+" x86_64_build "${CMAKE_OSX_ARCHITECTURES}")
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    56
        if(x86_64_build)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    57
            add_flag_prepend(CMAKE_Pascal_FLAGS -Px86_64)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    58
        elseif(i386_build)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    59
            add_flag_prepend(CMAKE_Pascal_FLAGS -Pi386)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    60
        elseif(powerpc_build)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    61
            add_flag_prepend(CMAKE_Pascal_FLAGS -Ppowerpc)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    62
        else()
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    63
            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
    64
        endif()
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    65
        list(LENGTH CMAKE_OSX_ARCHITECTURES num_of_archs)
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    66
        if(num_of_archs GREATER 1)
9889
54b49e8d8bfa remove one spurious WARNING tag from cmake message
koda
parents: 9887
diff changeset
    67
            message("*** Only one architecture in CMAKE_OSX_ARCHITECTURES is supported, picking the first one ***")
9271
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
    elseif(CMAKE_SIZEOF_VOID_P MATCHES "8")
118cc5c1f677 move some osx only configuration code
koda
parents: 9268
diff changeset
    70
        #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
    71
        add_flag_prepend(CMAKE_Pascal_FLAGS -Px86_64)
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
9268
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
    74
    #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
    75
    #we need to provide the correct one when host and target differ
9940
fb1023bcd74f allow specifying a different CMAKE_OSX_SYSROOT
koda
parents: 9921
diff changeset
    76
    if(NOT CMAKE_OSX_SYSROOT AND
fb1023bcd74f allow specifying a different CMAKE_OSX_SYSROOT
koda
parents: 9921
diff changeset
    77
       NOT ${minimum_macosx_version} VERSION_EQUAL ${current_macosx_version})
9887
6add6157b58e improve OSX SDK selection when build and deploy target don't match
koda
parents: 9860
diff changeset
    78
        find_program(xcrun xcrun)
6add6157b58e improve OSX SDK selection when build and deploy target don't match
koda
parents: 9860
diff changeset
    79
        if(xcrun)
6add6157b58e improve OSX SDK selection when build and deploy target don't match
koda
parents: 9860
diff changeset
    80
            execute_process(COMMAND ${xcrun} "--show-sdk-path"
6add6157b58e improve OSX SDK selection when build and deploy target don't match
koda
parents: 9860
diff changeset
    81
                            OUTPUT_VARIABLE current_sdk_path
6add6157b58e improve OSX SDK selection when build and deploy target don't match
koda
parents: 9860
diff changeset
    82
                            OUTPUT_STRIP_TRAILING_WHITESPACE)
6add6157b58e improve OSX SDK selection when build and deploy target don't match
koda
parents: 9860
diff changeset
    83
            string(REPLACE "${current_macosx_version}"
6add6157b58e improve OSX SDK selection when build and deploy target don't match
koda
parents: 9860
diff changeset
    84
                           "${minimum_macosx_version}"
6add6157b58e improve OSX SDK selection when build and deploy target don't match
koda
parents: 9860
diff changeset
    85
                           CMAKE_OSX_SYSROOT
6add6157b58e improve OSX SDK selection when build and deploy target don't match
koda
parents: 9860
diff changeset
    86
                           "${current_sdk_path}")
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    87
        else()
9887
6add6157b58e improve OSX SDK selection when build and deploy target don't match
koda
parents: 9860
diff changeset
    88
            message("*** xcrun not found! Build will work on ${current_macosx_version} only ***")
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    89
        endif()
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    90
    endif()
9940
fb1023bcd74f allow specifying a different CMAKE_OSX_SYSROOT
koda
parents: 9921
diff changeset
    91
    if(CMAKE_OSX_SYSROOT)
9268
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
    92
        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
    93
        add_flag_append(CMAKE_Pascal_FLAGS "-k-macosx_version_min -k${minimum_macosx_version}")
9941
d33d4727b39e explicitly set linker library path for pascal when deploying an older version
koda
parents: 9940
diff changeset
    94
        add_flag_append(CMAKE_Pascal_FLAGS "-k-L${LIBRARY_OUTPUT_PATH} -Fl${LIBRARY_OUTPUT_PATH}")
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
    95
    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
    96
14f5f3a1e2f7 some work on cmake_pascal files to better support flags we use, make engine compile as library again
koda
parents: 9297
diff changeset
    97
    #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
    98
    add_flag_append(CMAKE_Pascal_FLAGS "-Ff~/Library/Frameworks")
9705
322fe1736347 fix linking on osx by hardcoding the default library output path
koda
parents: 9673
diff changeset
    99
9860
d419ff107e15 include paths before platform, move config code around
koda
parents: 9858
diff changeset
   100
    #workaround older cmake versions
d419ff107e15 include paths before platform, move config code around
koda
parents: 9858
diff changeset
   101
    if(${CMAKE_VERSION} VERSION_LESS "2.8.12")
d419ff107e15 include paths before platform, move config code around
koda
parents: 9858
diff changeset
   102
        add_flag_append(CMAKE_C_LINK_FLAGS "-Wl,-rpath -Wl,${CMAKE_INSTALL_RPATH}")
d419ff107e15 include paths before platform, move config code around
koda
parents: 9858
diff changeset
   103
        add_flag_append(CMAKE_CXX_LINK_FLAGS "-Wl,-rpath -Wl,${CMAKE_INSTALL_RPATH}")
d419ff107e15 include paths before platform, move config code around
koda
parents: 9858
diff changeset
   104
        add_flag_append(CMAKE_Pascal_LINK_FLAGS "-k-rpath -k${CMAKE_INSTALL_RPATH}")
d419ff107e15 include paths before platform, move config code around
koda
parents: 9858
diff changeset
   105
    endif()
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
   106
endif(APPLE)
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
   107
9210
31fedd5ef878 freepascal on windows only supports shared libraries
koda
parents: 9151
diff changeset
   108
if(MINGW)
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
   109
    #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
   110
    add_flag_append(CMAKE_C_FLAGS "-static-libgcc")
8a9075ed0aab use add_flag_append more, correctly set a few flags
koda
parents: 9219
diff changeset
   111
    add_flag_append(CMAKE_CXX_FLAGS "-static-libgcc")
9210
31fedd5ef878 freepascal on windows only supports shared libraries
koda
parents: 9151
diff changeset
   112
endif(MINGW)
9150
79c58ff0d4b1 move platform specific and revision info code into separate cmake modules
koda
parents:
diff changeset
   113
9210
31fedd5ef878 freepascal on windows only supports shared libraries
koda
parents: 9151
diff changeset
   114
if(WIN32)
9218
673bf356ad8c another code typo
koda
parents: 9211
diff changeset
   115
    if(NOT ${BUILD_SHARED_LIB})
9210
31fedd5ef878 freepascal on windows only supports shared libraries
koda
parents: 9151
diff changeset
   116
        message(FATAL_ERROR "Static linking is not supported on Windows")
31fedd5ef878 freepascal on windows only supports shared libraries
koda
parents: 9151
diff changeset
   117
    endif()
31fedd5ef878 freepascal on windows only supports shared libraries
koda
parents: 9151
diff changeset
   118
endif(WIN32)
9673
5be4de0eb4b0 enable -fPIC on UNIX only
koda
parents: 9517
diff changeset
   119
5be4de0eb4b0 enable -fPIC on UNIX only
koda
parents: 9517
diff changeset
   120
if(UNIX)
5be4de0eb4b0 enable -fPIC on UNIX only
koda
parents: 9517
diff changeset
   121
    add_flag_append(CMAKE_C_FLAGS "-fPIC")
5be4de0eb4b0 enable -fPIC on UNIX only
koda
parents: 9517
diff changeset
   122
    add_flag_append(CMAKE_CXX_FLAGS "-fPIC")
5be4de0eb4b0 enable -fPIC on UNIX only
koda
parents: 9517
diff changeset
   123
endif(UNIX)