hedgewars/CMakeLists.txt
author koda
Wed, 06 Mar 2013 15:09:29 +0100
changeset 8669 3f9853888d4f
parent 8666 1652c1d9adc8
child 8686 d303da4568b7
permissions -rw-r--r--
user correct variable and slimmer test, version typos, .dll.a updated
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2420
b7390a3040f8 ultramegafix
koda
parents: 2413
diff changeset
     1
find_package(SDL)
b7390a3040f8 ultramegafix
koda
parents: 2413
diff changeset
     2
find_package(SDL_image)
b7390a3040f8 ultramegafix
koda
parents: 2413
diff changeset
     3
find_package(SDL_net)
b7390a3040f8 ultramegafix
koda
parents: 2413
diff changeset
     4
find_package(SDL_ttf)
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2494
diff changeset
     5
find_package(SDL_mixer)
2401
2a694ea2a437 fixes & co.
koda
parents: 2326
diff changeset
     6
8661
ac8dba27a3f1 replace sdl mixer/image version checking with something more robust
koda
parents: 8611
diff changeset
     7
include (CheckLibraryExists)
8669
3f9853888d4f user correct variable and slimmer test, version typos, .dll.a updated
koda
parents: 8666
diff changeset
     8
#Mix_Init/Mix_Quit from SDL_mixer 1.2.10
8664
6204ac0293b4 support old cmake style variables
koda
parents: 8662
diff changeset
     9
check_library_exists(${SDLMIXER_LIBRARY} Mix_Init "" HAVE_MIXINIT)
8661
ac8dba27a3f1 replace sdl mixer/image version checking with something more robust
koda
parents: 8611
diff changeset
    10
if(HAVE_MIXINIT)
ac8dba27a3f1 replace sdl mixer/image version checking with something more robust
koda
parents: 8611
diff changeset
    11
    list(APPEND pascal_flags "-dSDL_MIXER_NEWER")
ac8dba27a3f1 replace sdl mixer/image version checking with something more robust
koda
parents: 8611
diff changeset
    12
endif()
8669
3f9853888d4f user correct variable and slimmer test, version typos, .dll.a updated
koda
parents: 8666
diff changeset
    13
#IMG_Init/IMG_Quit from SDL_image 1.2.8
8664
6204ac0293b4 support old cmake style variables
koda
parents: 8662
diff changeset
    14
check_library_exists(${SDLIMAGE_LIBRARY} IMG_Init "" HAVE_IMGINIT)
8661
ac8dba27a3f1 replace sdl mixer/image version checking with something more robust
koda
parents: 8611
diff changeset
    15
if(HAVE_IMGINIT)
ac8dba27a3f1 replace sdl mixer/image version checking with something more robust
koda
parents: 8611
diff changeset
    16
    list(APPEND pascal_flags "-dSDL_IMAGE_NEWER")
ac8dba27a3f1 replace sdl mixer/image version checking with something more robust
koda
parents: 8611
diff changeset
    17
endif()
ac8dba27a3f1 replace sdl mixer/image version checking with something more robust
koda
parents: 8611
diff changeset
    18
2672
0f1403bf267a check for sdl_image and sdl_mixer versions
koda
parents: 2671
diff changeset
    19
5019
e38d1720a0ff allows for building hedgewars with SDL-1.3
koda
parents: 4930
diff changeset
    20
configure_file(${hedgewars_SOURCE_DIR}/hedgewars/config.inc.in ${CMAKE_CURRENT_BINARY_DIR}/config.inc)
2406
2e757b32991e cmake optimizations and simplification
koda
parents: 2404
diff changeset
    21
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3680
diff changeset
    22
#SOURCE AND PROGRAMS SECTION
8312
9e8781faabab can compile engine as library on linux but not run the executable (automatically), most likely breaking other platforms (wrt engine-as-library)
koda
parents: 8311
diff changeset
    23
if(${BUILD_ENGINE_LIBRARY})
8314
7faceaca67d4 can change library name and compile it on windows again
koda
parents: 8312
diff changeset
    24
    set(engine_output_name "${CMAKE_SHARED_LIBRARY_PREFIX}hwengine${CMAKE_SHARED_LIBRARY_SUFFIX}")
8312
9e8781faabab can compile engine as library on linux but not run the executable (automatically), most likely breaking other platforms (wrt engine-as-library)
koda
parents: 8311
diff changeset
    25
    set(hwengine_project ${hedgewars_SOURCE_DIR}/hedgewars/hwLibrary.pas)
9e8781faabab can compile engine as library on linux but not run the executable (automatically), most likely breaking other platforms (wrt engine-as-library)
koda
parents: 8311
diff changeset
    26
else()
9e8781faabab can compile engine as library on linux but not run the executable (automatically), most likely breaking other platforms (wrt engine-as-library)
koda
parents: 8311
diff changeset
    27
    set(engine_output_name "hwengine${CMAKE_EXECUTABLE_SUFFIX}")
9e8781faabab can compile engine as library on linux but not run the executable (automatically), most likely breaking other platforms (wrt engine-as-library)
koda
parents: 8311
diff changeset
    28
    set(hwengine_project ${hedgewars_SOURCE_DIR}/hedgewars/hwengine.pas)
9e8781faabab can compile engine as library on linux but not run the executable (automatically), most likely breaking other platforms (wrt engine-as-library)
koda
parents: 8311
diff changeset
    29
endif()
8166
5bc0fc0bab4d Refactor Freepascal module.
Bryan Dunsmore <dunsmoreb@gmail.com>
parents: 8164
diff changeset
    30
5bc0fc0bab4d Refactor Freepascal module.
Bryan Dunsmore <dunsmoreb@gmail.com>
parents: 8164
diff changeset
    31
if (APPLE)
5bc0fc0bab4d Refactor Freepascal module.
Bryan Dunsmore <dunsmoreb@gmail.com>
parents: 8164
diff changeset
    32
    set(required_fpc_version 2.6)
5bc0fc0bab4d Refactor Freepascal module.
Bryan Dunsmore <dunsmoreb@gmail.com>
parents: 8164
diff changeset
    33
else()
5bc0fc0bab4d Refactor Freepascal module.
Bryan Dunsmore <dunsmoreb@gmail.com>
parents: 8164
diff changeset
    34
    set(required_fpc_version 2.2)
5bc0fc0bab4d Refactor Freepascal module.
Bryan Dunsmore <dunsmoreb@gmail.com>
parents: 8164
diff changeset
    35
endif()
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 173
diff changeset
    36
2786
85f6425a4d74 Engine:
smxx
parents: 2673
diff changeset
    37
set(engine_sources
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    38
    ${hwengine_project}
7730
2013733f9ca9 A bit more on the knife. Also add missing files to CMakeLists
nemo
parents: 7718
diff changeset
    39
    LuaPas.pas
2013733f9ca9 A bit more on the knife. Also add missing files to CMakeLists
nemo
parents: 7718
diff changeset
    40
    PNGh.pas
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    41
    SDLh.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    42
    uAI.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    43
    uAIActions.pas
7730
2013733f9ca9 A bit more on the knife. Also add missing files to CMakeLists
nemo
parents: 7718
diff changeset
    44
    uAILandMarks.pas
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    45
    uAIAmmoTests.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    46
    uAIMisc.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    47
    uAmmos.pas
4393
883b979697e4 uCaptions
unc0rr
parents: 4386
diff changeset
    48
    uCaptions.pas
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    49
    uChat.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    50
    uCollisions.pas
4373
fe0e3903bb9e Introduce uCommands.pas
unC0Rr
parents: 4357
diff changeset
    51
    uCommands.pas
4413
46caab3a8f84 uCommandHandlers
unc0rr
parents: 4403
diff changeset
    52
    uCommandHandlers.pas
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    53
    uConsole.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    54
    uConsts.pas
7730
2013733f9ca9 A bit more on the knife. Also add missing files to CMakeLists
nemo
parents: 7718
diff changeset
    55
    uCursor.pas
4403
unc0rr
parents: 4393
diff changeset
    56
    uDebug.pas
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    57
    uFloat.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    58
    uGame.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    59
    uGears.pas
7370
d50b874e7ee8 Introduce uGearsHandlers.pas, for now only part of cake handlers is moved there
unc0rr
parents: 7233
diff changeset
    60
    uGearsHandlers.pas
7592
cf67e58313ea Move rope code to separate unit
unc0rr
parents: 7370
diff changeset
    61
    uGearsHandlersRope.pas
7730
2013733f9ca9 A bit more on the knife. Also add missing files to CMakeLists
nemo
parents: 7718
diff changeset
    62
    uGearsHedgehog.pas
2013733f9ca9 A bit more on the knife. Also add missing files to CMakeLists
nemo
parents: 7718
diff changeset
    63
    uGearsList.pas
4386
855049a88c59 Forgot this
unc0rr
parents: 4380
diff changeset
    64
    uGearsRender.pas
7592
cf67e58313ea Move rope code to separate unit
unc0rr
parents: 7370
diff changeset
    65
    uGearsUtils.pas
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    66
    uIO.pas
6954
a61458a81480 changed uKeys to uInputHandler to better reflect its function
Xeli
parents: 6920
diff changeset
    67
    uInputHandler.pas
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    68
    uLand.pas
6491
736479f3d348 Some cleanup here and there
unc0rr
parents: 6224
diff changeset
    69
    uLandGenMaze.pas
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    70
    uLandGraphics.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    71
    uLandObjects.pas
6491
736479f3d348 Some cleanup here and there
unc0rr
parents: 6224
diff changeset
    72
    uLandOutline.pas
4457
ffb766e85150 - Change painted map file format
unc0rr
parents: 4415
diff changeset
    73
    uLandPainted.pas
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    74
    uLandTemplates.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    75
    uLandTexture.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    76
    uLocale.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    77
    uMisc.pas
7959
644b757d20e6 Start work on physfs support in engine
unc0rr
parents: 7817
diff changeset
    78
    uPhysFSLayer.pas
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    79
    uRandom.pas
4378
91655618a510 Introduce uRender
unC0Rr
parents: 4375
diff changeset
    80
    uRender.pas
4380
b78638b36b89 Introduce uRenderUtils
unC0Rr
parents: 4378
diff changeset
    81
    uRenderUtils.pas
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    82
    uScript.pas
4415
941251bad467 SinTable.inc -> uSinTable.pas
unc0rr
parents: 4413
diff changeset
    83
    uSinTable.pas
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    84
    uSound.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    85
    uStats.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    86
    uStore.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    87
    uTeams.pas
4375
ae5507ddb989 Introduce uTextures
unC0Rr
parents: 4374
diff changeset
    88
    uTextures.pas
7730
2013733f9ca9 A bit more on the knife. Also add missing files to CMakeLists
nemo
parents: 7718
diff changeset
    89
    uTouch.pas
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    90
    uTypes.pas
4374
bcefeeabaa33 Move some stuff from uMisc to uUtils
unC0Rr
parents: 4373
diff changeset
    91
    uUtils.pas
5179
8d64dcb566ea Fix "Mixing signed expressions and longwords gives a 64bit result" warnings
unc0rr
parents: 5169
diff changeset
    92
    uVariables.pas
7180
53ffc8853008 here it is
Stepan777 <stepik-777@mail.ru>
parents: 7114
diff changeset
    93
    uVideoRec.pas
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    94
    uVisualGears.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    95
    uWorld.pas
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    96
    GSHandlers.inc
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    97
    VGSHandlers.inc
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    98
    ArgParsers.inc
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
    99
    options.inc
4378
91655618a510 Introduce uRender
unC0Rr
parents: 4375
diff changeset
   100
    adler32.pas
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   101
    ${CMAKE_CURRENT_BINARY_DIR}/config.inc
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   102
    )
220
d79eaeaf969d Fix hwengine target behaviour
unc0rr
parents: 196
diff changeset
   103
8316
89232b2fa1d6 cmake rework, cleanup a lot of redundant sections, separate library and binary install location, unify osx and win handling of the data directory (tested on win, lin and mac)
koda
parents: 8314
diff changeset
   104
if(${BUILD_ENGINE_LIBRARY})
8611
90f445317e8a support WARNING message status on cmake 2.6 (bug 524)
koda
parents: 8528
diff changeset
   105
    message(${WARNING} "Engine will be built as library (experimental)")
8347
716c05f19401 GCI2012: CMake List Append
Willie Zhu
parents: 8322
diff changeset
   106
    list(APPEND pascal_flags "-dHWLIBRARY")
4928
6ebbca960503 fix engine library compilation on linux/amd64
sheepluva
parents: 4457
diff changeset
   107
6ebbca960503 fix engine library compilation on linux/amd64
sheepluva
parents: 4457
diff changeset
   108
    # create position independent code, only required for x68_64 builds, similar to -fPIC
6ebbca960503 fix engine library compilation on linux/amd64
sheepluva
parents: 4457
diff changeset
   109
    if(CMAKE_SIZEOF_VOID_P MATCHES "8")
8347
716c05f19401 GCI2012: CMake List Append
Willie Zhu
parents: 8322
diff changeset
   110
        list(APPEND pascal_flags "-Cg")
4928
6ebbca960503 fix engine library compilation on linux/amd64
sheepluva
parents: 4457
diff changeset
   111
    endif(CMAKE_SIZEOF_VOID_P MATCHES "8")
6ebbca960503 fix engine library compilation on linux/amd64
sheepluva
parents: 4457
diff changeset
   112
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   113
    # due to compiler/linker issues on Max OS X 10.6 -k-no_order_inits is needed to avoid linking fail
8311
bc18481dca8b can use engine as library on windows too
koda
parents: 8283
diff changeset
   114
    if(APPLE AND current_macosx_version VERSION_GREATER "10.5")
8347
716c05f19401 GCI2012: CMake List Append
Willie Zhu
parents: 8322
diff changeset
   115
        list(APPEND pascal_flags "-k-no_order_inits")
5188
d0461bd6d45b some updates to the crossbuild system for mac
koda
parents: 5179
diff changeset
   116
    endif()
8316
89232b2fa1d6 cmake rework, cleanup a lot of redundant sections, separate library and binary install location, unify osx and win handling of the data directory (tested on win, lin and mac)
koda
parents: 8314
diff changeset
   117
    set(destination_dir ${target_library_install_dir})
89232b2fa1d6 cmake rework, cleanup a lot of redundant sections, separate library and binary install location, unify osx and win handling of the data directory (tested on win, lin and mac)
koda
parents: 8314
diff changeset
   118
else(${BUILD_ENGINE_LIBRARY})
89232b2fa1d6 cmake rework, cleanup a lot of redundant sections, separate library and binary install location, unify osx and win handling of the data directory (tested on win, lin and mac)
koda
parents: 8314
diff changeset
   119
    set(destination_dir ${target_binary_install_dir})
89232b2fa1d6 cmake rework, cleanup a lot of redundant sections, separate library and binary install location, unify osx and win handling of the data directory (tested on win, lin and mac)
koda
parents: 8314
diff changeset
   120
endif(${BUILD_ENGINE_LIBRARY})
3495
a6b4f351d400 now engine can be optionally built as library, there's an example wrapper of how to use it
koda
parents: 3468
diff changeset
   121
7959
644b757d20e6 Start work on physfs support in engine
unc0rr
parents: 7817
diff changeset
   122
8665
3ff8694d9e22 rewritten findfreepascal, moved checkstack code elsewhere
koda
parents: 8664
diff changeset
   123
find_package(FreePascal REQUIRED)
3ff8694d9e22 rewritten findfreepascal, moved checkstack code elsewhere
koda
parents: 8664
diff changeset
   124
#when cmake-2.6 support is dropped, this ought to be inside FindFreePascal.cmake
3ff8694d9e22 rewritten findfreepascal, moved checkstack code elsewhere
koda
parents: 8664
diff changeset
   125
if (FREEPASCAL_VERSION VERSION_LESS required_fpc_version)
3ff8694d9e22 rewritten findfreepascal, moved checkstack code elsewhere
koda
parents: 8664
diff changeset
   126
    message(FATAL_ERROR "Freepascal ${FREEPASCAL_VERSION} is too old, minimum version required is ${required_fpc_version}")
8164
b12634f2e1b2 Move noexecstack flags to Freepascal module and refactor.
Bryan Dunsmore <dunsmoreb@gmail.com>
parents: 8162
diff changeset
   127
endif()
476
a4e975f70b60 check for noexecstack linker compatibility (MacOS linker)
displacer
parents: 433
diff changeset
   128
a4e975f70b60 check for noexecstack linker compatibility (MacOS linker)
displacer
parents: 433
diff changeset
   129
8090
38d9cc60b14c cleanup revision section, make hg launch tolerant to config errors, drop deprecated exec_prog for desktop configuration in favour of execute_process
koda
parents: 8087
diff changeset
   130
#DEPENDECIES AND EXECUTABLES SECTION
2652
67d0344aea9f still updates for mac compilation
koda
parents: 2644
diff changeset
   131
if(APPLE)
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   132
    string(REGEX MATCH "[pP][pP][cC]+" powerpc_build "${CMAKE_OSX_ARCHITECTURES}")
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   133
    string(REGEX MATCH "[iI]386+" i386_build "${CMAKE_OSX_ARCHITECTURES}")
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   134
    string(REGEX MATCH "[xX]86_64+" x86_64_build "${CMAKE_OSX_ARCHITECTURES}")
2652
67d0344aea9f still updates for mac compilation
koda
parents: 2644
diff changeset
   135
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   136
    if(powerpc_build)
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   137
        set(powerpc_build "powerpc")
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   138
    endif()
2652
67d0344aea9f still updates for mac compilation
koda
parents: 2644
diff changeset
   139
7708
95de696e4711 another little tweak
koda
parents: 7706
diff changeset
   140
    #on OSX we need to provide the SDL_main() function when building as executable
8316
89232b2fa1d6 cmake rework, cleanup a lot of redundant sections, separate library and binary install location, unify osx and win handling of the data directory (tested on win, lin and mac)
koda
parents: 8314
diff changeset
   141
    if(NOT ${BUILD_ENGINE_LIBRARY})
7708
95de696e4711 another little tweak
koda
parents: 7706
diff changeset
   142
        #let's look for the installed sdlmain file; if it is not found, let's build our own
7109
af3a43a46f21 there a libSDLMain.a in the bundled SDL framework
koda
parents: 7031
diff changeset
   143
        find_package(SDL REQUIRED)
af3a43a46f21 there a libSDLMain.a in the bundled SDL framework
koda
parents: 7031
diff changeset
   144
        #remove the ";-framework Cocoa" from the SDL_LIBRARY variable
8316
89232b2fa1d6 cmake rework, cleanup a lot of redundant sections, separate library and binary install location, unify osx and win handling of the data directory (tested on win, lin and mac)
koda
parents: 8314
diff changeset
   145
        string(REGEX REPLACE "(.*);-.*" "\\1" sdl_library_only "${SDL_LIBRARY}")
7109
af3a43a46f21 there a libSDLMain.a in the bundled SDL framework
koda
parents: 7031
diff changeset
   146
        #find libsdmain.a
8316
89232b2fa1d6 cmake rework, cleanup a lot of redundant sections, separate library and binary install location, unify osx and win handling of the data directory (tested on win, lin and mac)
koda
parents: 8314
diff changeset
   147
        find_file(SDLMAIN_LIB libSDLMain.a PATHS ${sdl_library_only}/Resources/)
2669
4eec706e86b0 introduction of IMG_Init
koda
parents: 2666
diff changeset
   148
7109
af3a43a46f21 there a libSDLMain.a in the bundled SDL framework
koda
parents: 7031
diff changeset
   149
        if(SDLMAIN_LIB MATCHES "SDLMAIN_LIB-NOTFOUND")
af3a43a46f21 there a libSDLMain.a in the bundled SDL framework
koda
parents: 7031
diff changeset
   150
            include_directories(${SDL_INCLUDE_DIR})
af3a43a46f21 there a libSDLMain.a in the bundled SDL framework
koda
parents: 7031
diff changeset
   151
            add_library (SDLmain STATIC SDLMain.m)
af3a43a46f21 there a libSDLMain.a in the bundled SDL framework
koda
parents: 7031
diff changeset
   152
            #add a dependency to the hwengine target
8347
716c05f19401 GCI2012: CMake List Append
Willie Zhu
parents: 8322
diff changeset
   153
            list(APPEND engine_sources SDLmain)
7708
95de696e4711 another little tweak
koda
parents: 7706
diff changeset
   154
            set(SDLMAIN_LIB "${LIBRARY_OUTPUT_PATH}/libSDLmain.a")
7109
af3a43a46f21 there a libSDLMain.a in the bundled SDL framework
koda
parents: 7031
diff changeset
   155
        endif()
2669
4eec706e86b0 introduction of IMG_Init
koda
parents: 2666
diff changeset
   156
8347
716c05f19401 GCI2012: CMake List Append
Willie Zhu
parents: 8322
diff changeset
   157
        list(APPEND pascal_flags "-k${SDLMAIN_LIB}")
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   158
    endif()
8518
24d2bdc6deff fix compiling on osx when you have multiple linkers installed
koda
parents: 8379
diff changeset
   159
24d2bdc6deff fix compiling on osx when you have multiple linkers installed
koda
parents: 8379
diff changeset
   160
    #when you have multiple ld installation make sure you get the one bundled with the compiler
24d2bdc6deff fix compiling on osx when you have multiple linkers installed
koda
parents: 8379
diff changeset
   161
    get_filename_component(compiler_dir ${CMAKE_C_COMPILER} PATH)
24d2bdc6deff fix compiling on osx when you have multiple linkers installed
koda
parents: 8379
diff changeset
   162
    list(APPEND pascal_flags "-FD${compiler_dir}")
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   163
endif(APPLE)
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   164
7114
e0110a1229b7 add NOPNG to cmake to explicitly disable PNG dependency
koda
parents: 7112
diff changeset
   165
if(NOT NOPNG)
e0110a1229b7 add NOPNG to cmake to explicitly disable PNG dependency
koda
parents: 7112
diff changeset
   166
    find_package(PNG)
e0110a1229b7 add NOPNG to cmake to explicitly disable PNG dependency
koda
parents: 7112
diff changeset
   167
    if(${PNG_FOUND})
8347
716c05f19401 GCI2012: CMake List Append
Willie Zhu
parents: 8322
diff changeset
   168
        list(APPEND pascal_flags "-dPNG_SCREENSHOTS")
7817
6cc558a69b58 countless small optimisation for cmake, output messages are now coherent (mostly) and the options get fully respected (eg. skipping library search if not activated)
koda
parents: 7816
diff changeset
   169
        if(APPLE)  # fpc png unit doesn't pull the library (see bug 21833)
8347
716c05f19401 GCI2012: CMake List Append
Willie Zhu
parents: 8322
diff changeset
   170
            list(APPEND pascal_flags "-k${PNG_LIBRARY}")
7114
e0110a1229b7 add NOPNG to cmake to explicitly disable PNG dependency
koda
parents: 7112
diff changeset
   171
        endif()
e0110a1229b7 add NOPNG to cmake to explicitly disable PNG dependency
koda
parents: 7112
diff changeset
   172
    else()
8611
90f445317e8a support WARNING message status on cmake 2.6 (bug 524)
koda
parents: 8528
diff changeset
   173
        message(${WARNING} "Screenshots will be in BMP format because libpng was not found")
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   174
    endif()
7223
b554726ff468 uniform NOPNG and NOSERVER cmake symbols
koda
parents: 7114
diff changeset
   175
else()
7718
97ba379164ec use cmake OPTION for arguments and further cleanup on CMakeFiles
koda
parents: 7708
diff changeset
   176
    message(STATUS "Screenshots will be in BMP format per user request")
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   177
endif()
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   178
7655
b993257902d3 if this doesn't work I shall cry like a lady
sheepluva
parents: 7654
diff changeset
   179
7706
19ade14ecc29 forgot a few checks from rev f40c65ae3eab
koda
parents: 7694
diff changeset
   180
#this command is a workaround to some inlining issues present in older FreePascal versions and fixed in 2.6
8665
3ff8694d9e22 rewritten findfreepascal, moved checkstack code elsewhere
koda
parents: 8664
diff changeset
   181
if(FREEPASCAL_VERSION VERSION_LESS "2.6")
7940
d5e49cf042d9 fix parallel compilation
hasufell
parents: 7817
diff changeset
   182
    #under some configurations CMAKE_BUILD_TOOL fails to pass on the jobserver, breaking parallel compilation
d5e49cf042d9 fix parallel compilation
hasufell
parents: 7817
diff changeset
   183
    if(UNIX)
d5e49cf042d9 fix parallel compilation
hasufell
parents: 7817
diff changeset
   184
        set(SAFE_BUILD_TOOL $(MAKE))
d5e49cf042d9 fix parallel compilation
hasufell
parents: 7817
diff changeset
   185
    else()
d5e49cf042d9 fix parallel compilation
hasufell
parents: 7817
diff changeset
   186
        set(SAFE_BUILD_TOOL ${CMAKE_BUILD_TOOL})
d5e49cf042d9 fix parallel compilation
hasufell
parents: 7817
diff changeset
   187
    endif()
d5e49cf042d9 fix parallel compilation
hasufell
parents: 7817
diff changeset
   188
    add_custom_target(ENGINECLEAN COMMAND ${SAFE_BUILD_TOOL} "clean" "${PROJECT_BINARY_DIR}" "${hedgewars_SOURCE_DIR}/hedgewars")
7655
b993257902d3 if this doesn't work I shall cry like a lady
sheepluva
parents: 7654
diff changeset
   189
endif()
b993257902d3 if this doesn't work I shall cry like a lady
sheepluva
parents: 7654
diff changeset
   190
b993257902d3 if this doesn't work I shall cry like a lady
sheepluva
parents: 7654
diff changeset
   191
8666
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   192
if(${FFMPEG_FOUND})
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   193
    # TODO: this check is only for SDL < 2
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   194
    # fpc will take care of linking but we need to have this library installed
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   195
    find_package(GLUT REQUIRED)
7954
a5f0a6d46c52 advice from hasufell
koda
parents: 7942
diff changeset
   196
8666
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   197
    #TODO: convert avwrapper to .pas unit so we can skip this step
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   198
    include_directories(${FFMPEG_INCLUDE_DIR})
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   199
    list(APPEND pascal_flags "-dUSE_VIDEO_RECORDING")
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   200
    if(WIN32)
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   201
        # there are some problems with linking our avwrapper as static lib, so link it as shared
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   202
        add_library(avwrapper SHARED avwrapper.c)
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   203
        target_link_libraries(avwrapper ${FFMPEG_LIBRARIES})
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   204
        install(PROGRAMS "${EXECUTABLE_OUTPUT_PATH}/${CMAKE_SHARED_LIBRARY_PREFIX}avwrapper${CMAKE_SHARED_LIBRARY_SUFFIX}" DESTINATION ${target_library_install_dir})
7540
cc6c656f70b5 cmake scripts
Stepan777 <stepik-777@mail.ru>
parents: 7538
diff changeset
   205
    else()
8666
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   206
        add_library(avwrapper STATIC avwrapper.c)
7538
2d6e69b392cb better cmake script
Stepan777 <stepik-777@mail.ru>
parents: 7534
diff changeset
   207
    endif()
2d6e69b392cb better cmake script
Stepan777 <stepik-777@mail.ru>
parents: 7534
diff changeset
   208
endif()
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   209
8067
34a679e5ca9d Link some libraries needed for physfs on windows (there are still 5 symbols which couldn't be found - to be resolved)
unc0rr
parents: 8064
diff changeset
   210
8665
3ff8694d9e22 rewritten findfreepascal, moved checkstack code elsewhere
koda
parents: 8664
diff changeset
   211
set(fpc_flags ${pascal_flags} ${hwengine_project})
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   212
8146
1fba650c2aa4 GCI2012: Lowercase CMake functions (main files only)
m4tx
parents: 8093
diff changeset
   213
if(NOT APPLE)
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   214
    #here is the command for standard executables or for shared library
8311
bc18481dca8b can use engine as library on windows too
koda
parents: 8283
diff changeset
   215
    add_custom_command(OUTPUT "${EXECUTABLE_OUTPUT_PATH}/${engine_output_name}"
8665
3ff8694d9e22 rewritten findfreepascal, moved checkstack code elsewhere
koda
parents: 8664
diff changeset
   216
        COMMAND "${FREEPASCAL_EXECUTABLE}"
8314
7faceaca67d4 can change library name and compile it on windows again
koda
parents: 8312
diff changeset
   217
        ARGS ${fpc_flags} -o${engine_output_name}
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   218
        MAIN_DEPENDENCY ${hwengine_project}
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   219
        DEPENDS ${engine_sources}
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   220
        )
8146
1fba650c2aa4 GCI2012: Lowercase CMake functions (main files only)
m4tx
parents: 8093
diff changeset
   221
else()
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   222
    #these are the dependencies for building a universal binary on Mac OS X
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   223
    foreach (build_arch ${powerpc_build} ${i386_build} ${x86_64_build})
8347
716c05f19401 GCI2012: CMake List Append
Willie Zhu
parents: 8322
diff changeset
   224
        list(APPEND lipo_args_list "${EXECUTABLE_OUTPUT_PATH}/hwengine.${build_arch}")
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   225
        add_custom_command(OUTPUT "${EXECUTABLE_OUTPUT_PATH}/hwengine.${build_arch}"
8665
3ff8694d9e22 rewritten findfreepascal, moved checkstack code elsewhere
koda
parents: 8664
diff changeset
   226
            COMMAND "${FREEPASCAL_EXECUTABLE}"
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   227
            ARGS ${fpc_flags} -ohwengine.${build_arch} -P${build_arch}
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   228
            MAIN_DEPENDENCY ${hwengine_project}
7109
af3a43a46f21 there a libSDLMain.a in the bundled SDL framework
koda
parents: 7031
diff changeset
   229
            DEPENDS ${engine_sources}
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   230
            )
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   231
        add_custom_target(hwengine.${build_arch} ALL DEPENDS "${EXECUTABLE_OUTPUT_PATH}/hwengine.${build_arch}")
8322
50369fa5053b adjust rpath on osx too for libengine
koda
parents: 8316
diff changeset
   232
        add_custom_command(TARGET hwengine.${build_arch} POST_BUILD
50369fa5053b adjust rpath on osx too for libengine
koda
parents: 8316
diff changeset
   233
            COMMAND "install_name_tool"
50369fa5053b adjust rpath on osx too for libengine
koda
parents: 8316
diff changeset
   234
            ARGS -id @executable_path/../Frameworks/${engine_output_name}
50369fa5053b adjust rpath on osx too for libengine
koda
parents: 8316
diff changeset
   235
                ${EXECUTABLE_OUTPUT_PATH}/hwengine.${build_arch}
50369fa5053b adjust rpath on osx too for libengine
koda
parents: 8316
diff changeset
   236
            )
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   237
    endforeach()
2003
41b3d00949ca Patch by koda:
unc0rr
parents: 1997
diff changeset
   238
4930
5d59bb58c365 fix issue 185 :|
koda
parents: 4928
diff changeset
   239
    add_custom_command(OUTPUT "${EXECUTABLE_OUTPUT_PATH}/${engine_output_name}"
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   240
        COMMAND "lipo"
4930
5d59bb58c365 fix issue 185 :|
koda
parents: 4928
diff changeset
   241
        ARGS ${lipo_args_list} -create -output ${EXECUTABLE_OUTPUT_PATH}/${engine_output_name}
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   242
        DEPENDS ${lipo_args_list}
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   243
        )
8146
1fba650c2aa4 GCI2012: Lowercase CMake functions (main files only)
m4tx
parents: 8093
diff changeset
   244
endif()
2003
41b3d00949ca Patch by koda:
unc0rr
parents: 1997
diff changeset
   245
2641
b08cafb86797 some tweaks in the mac compilation system
koda
parents: 2629
diff changeset
   246
8379
6a446b7cece0 keep engine target name consistent across platforms
koda
parents: 8347
diff changeset
   247
add_custom_target(hwengine ALL DEPENDS "${EXECUTABLE_OUTPUT_PATH}/${engine_output_name}")
7031
d5ea24399a48 when Lua is not found, fallback to compiling the one that comes bundled in our sources
koda
parents: 7029
diff changeset
   248
d5ea24399a48 when Lua is not found, fallback to compiling the one that comes bundled in our sources
koda
parents: 7029
diff changeset
   249
#when system Lua is not found we need to compile it before engine
7233
225179f64fd8 LUA_FOUND should surely be set only if the system lua was found.
nemo
parents: 7223
diff changeset
   250
if(NOT LUA_FOUND)
8379
6a446b7cece0 keep engine target name consistent across platforms
koda
parents: 8347
diff changeset
   251
    add_dependencies(hwengine lua)
7031
d5ea24399a48 when Lua is not found, fallback to compiling the one that comes bundled in our sources
koda
parents: 7029
diff changeset
   252
endif()
d5ea24399a48 when Lua is not found, fallback to compiling the one that comes bundled in our sources
koda
parents: 7029
diff changeset
   253
8528
ffd71e99a4f0 and now compile and link properly
koda
parents: 8518
diff changeset
   254
# same for physfs
ffd71e99a4f0 and now compile and link properly
koda
parents: 8518
diff changeset
   255
if(NOT PHYSFS_FOUND)
ffd71e99a4f0 and now compile and link properly
koda
parents: 8518
diff changeset
   256
    add_dependencies(hwengine physfs)
ffd71e99a4f0 and now compile and link properly
koda
parents: 8518
diff changeset
   257
endif()
ffd71e99a4f0 and now compile and link properly
koda
parents: 8518
diff changeset
   258
ffd71e99a4f0 and now compile and link properly
koda
parents: 8518
diff changeset
   259
add_dependencies(hwengine physlayer)
7967
2f4fa2a06e4f Build physfs lib before engine
unc0rr
parents: 7959
diff changeset
   260
7942
17b3937de37b avwrapper needs to depend on hwengine not on ENGINECLEAN
koda
parents: 7940
diff changeset
   261
#when ffmpeg/libav is found we need to compile it before engine
7954
a5f0a6d46c52 advice from hasufell
koda
parents: 7942
diff changeset
   262
#TODO: convert avwrapper to .pas unit so we can skip this step
7942
17b3937de37b avwrapper needs to depend on hwengine not on ENGINECLEAN
koda
parents: 7940
diff changeset
   263
if(${FFMPEG_FOUND})
8379
6a446b7cece0 keep engine target name consistent across platforms
koda
parents: 8347
diff changeset
   264
    add_dependencies(hwengine avwrapper)
7942
17b3937de37b avwrapper needs to depend on hwengine not on ENGINECLEAN
koda
parents: 7940
diff changeset
   265
endif()
17b3937de37b avwrapper needs to depend on hwengine not on ENGINECLEAN
koda
parents: 7940
diff changeset
   266
7706
19ade14ecc29 forgot a few checks from rev f40c65ae3eab
koda
parents: 7694
diff changeset
   267
#this command is a workaround to some inlining issues present in older FreePascal versions and fixed in 2.6
8666
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   268
if((FREEPASCAL_VERSION VERSION_LESS "2.6") AND (NOT ${FFMPEG_FOUND}))
8379
6a446b7cece0 keep engine target name consistent across platforms
koda
parents: 8347
diff changeset
   269
    add_dependencies(hwengine ENGINECLEAN)
7653
6dda2562f692 engineclean returns
sheepluva
parents: 7622
diff changeset
   270
endif()
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 173
diff changeset
   271
8316
89232b2fa1d6 cmake rework, cleanup a lot of redundant sections, separate library and binary install location, unify osx and win handling of the data directory (tested on win, lin and mac)
koda
parents: 8314
diff changeset
   272
install(PROGRAMS "${EXECUTABLE_OUTPUT_PATH}/${engine_output_name}" DESTINATION ${destination_dir})