hedgewars/CMakeLists.txt
author koda
Wed, 12 Jun 2013 11:17:54 +0200
changeset 9208 acb2492288e5
parent 9203 bcc25cb9b122
child 9224 bce8cf41d666
permissions -rw-r--r--
heavily rework lua discovery and linking, needs testing but it's more similar to what we do for other libraries now
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
8702
a28966180a29 have fpc work in the right directory instead of passing the full path of the main module (avoids having full paths in debug build backtraces for the first module only)
koda
parents: 8697
diff changeset
    20
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/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}")
8702
a28966180a29 have fpc work in the right directory instead of passing the full path of the main module (avoids having full paths in debug build backtraces for the first module only)
koda
parents: 8697
diff changeset
    25
    set(hwengine_project hwLibrary.pas)
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
    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}")
8702
a28966180a29 have fpc work in the right directory instead of passing the full path of the main module (avoids having full paths in debug build backtraces for the first module only)
koda
parents: 8697
diff changeset
    28
    set(hwengine_project hwengine.pas)
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
    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})
9151
1d2df388fcc6 simplify cmake message syntax a little bit
koda
parents: 8932
diff changeset
   105
    message("*** 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
8686
d303da4568b7 introduce find_package_or_fail/disable to group together similar cmake code
koda
parents: 8669
diff changeset
   123
include(${CMAKE_MODULE_PATH}/utils.cmake)
d303da4568b7 introduce find_package_or_fail/disable to group together similar cmake code
koda
parents: 8669
diff changeset
   124
d303da4568b7 introduce find_package_or_fail/disable to group together similar cmake code
koda
parents: 8669
diff changeset
   125
find_package_or_fail(FreePascal)
d303da4568b7 introduce find_package_or_fail/disable to group together similar cmake code
koda
parents: 8669
diff changeset
   126
8665
3ff8694d9e22 rewritten findfreepascal, moved checkstack code elsewhere
koda
parents: 8664
diff changeset
   127
#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
   128
if (FREEPASCAL_VERSION VERSION_LESS required_fpc_version)
3ff8694d9e22 rewritten findfreepascal, moved checkstack code elsewhere
koda
parents: 8664
diff changeset
   129
    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
   130
endif()
476
a4e975f70b60 check for noexecstack linker compatibility (MacOS linker)
displacer
parents: 433
diff changeset
   131
a4e975f70b60 check for noexecstack linker compatibility (MacOS linker)
displacer
parents: 433
diff changeset
   132
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
   133
#DEPENDECIES AND EXECUTABLES SECTION
2652
67d0344aea9f still updates for mac compilation
koda
parents: 2644
diff changeset
   134
if(APPLE)
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   135
    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
   136
    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
   137
    string(REGEX MATCH "[xX]86_64+" x86_64_build "${CMAKE_OSX_ARCHITECTURES}")
2652
67d0344aea9f still updates for mac compilation
koda
parents: 2644
diff changeset
   138
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   139
    if(powerpc_build)
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   140
        set(powerpc_build "powerpc")
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   141
    endif()
2652
67d0344aea9f still updates for mac compilation
koda
parents: 2644
diff changeset
   142
7708
95de696e4711 another little tweak
koda
parents: 7706
diff changeset
   143
    #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
   144
    if(NOT ${BUILD_ENGINE_LIBRARY})
7708
95de696e4711 another little tweak
koda
parents: 7706
diff changeset
   145
        #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
   146
        find_package(SDL REQUIRED)
af3a43a46f21 there a libSDLMain.a in the bundled SDL framework
koda
parents: 7031
diff changeset
   147
        #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
   148
        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
   149
        #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
   150
        find_file(SDLMAIN_LIB libSDLMain.a PATHS ${sdl_library_only}/Resources/)
2669
4eec706e86b0 introduction of IMG_Init
koda
parents: 2666
diff changeset
   151
7109
af3a43a46f21 there a libSDLMain.a in the bundled SDL framework
koda
parents: 7031
diff changeset
   152
        if(SDLMAIN_LIB MATCHES "SDLMAIN_LIB-NOTFOUND")
af3a43a46f21 there a libSDLMain.a in the bundled SDL framework
koda
parents: 7031
diff changeset
   153
            include_directories(${SDL_INCLUDE_DIR})
af3a43a46f21 there a libSDLMain.a in the bundled SDL framework
koda
parents: 7031
diff changeset
   154
            add_library (SDLmain STATIC SDLMain.m)
af3a43a46f21 there a libSDLMain.a in the bundled SDL framework
koda
parents: 7031
diff changeset
   155
            #add a dependency to the hwengine target
8347
716c05f19401 GCI2012: CMake List Append
Willie Zhu
parents: 8322
diff changeset
   156
            list(APPEND engine_sources SDLmain)
7708
95de696e4711 another little tweak
koda
parents: 7706
diff changeset
   157
            set(SDLMAIN_LIB "${LIBRARY_OUTPUT_PATH}/libSDLmain.a")
7109
af3a43a46f21 there a libSDLMain.a in the bundled SDL framework
koda
parents: 7031
diff changeset
   158
        endif()
2669
4eec706e86b0 introduction of IMG_Init
koda
parents: 2666
diff changeset
   159
8347
716c05f19401 GCI2012: CMake List Append
Willie Zhu
parents: 8322
diff changeset
   160
        list(APPEND pascal_flags "-k${SDLMAIN_LIB}")
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   161
    endif()
8518
24d2bdc6deff fix compiling on osx when you have multiple linkers installed
koda
parents: 8379
diff changeset
   162
24d2bdc6deff fix compiling on osx when you have multiple linkers installed
koda
parents: 8379
diff changeset
   163
    #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
   164
    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
   165
    list(APPEND pascal_flags "-FD${compiler_dir}")
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   166
endif(APPLE)
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   167
8688
88a6114a318c even more wrapping with find_package_or_disable_msg
koda
parents: 8686
diff changeset
   168
find_package_or_disable_msg(PNG NOPNG "Screenshots will be saved in BMP")
88a6114a318c even more wrapping with find_package_or_disable_msg
koda
parents: 8686
diff changeset
   169
if(PNG_FOUND)
8832
4e9728dcebeb fix osx build
koda
parents: 8830
diff changeset
   170
    list(REMOVE_AT PNG_LIBRARIES 1) #removing the zlib library path
4e9728dcebeb fix osx build
koda
parents: 8830
diff changeset
   171
    get_filename_component(PNG_LIBRARY_DIR ${PNG_LIBRARIES} PATH)
8932
e095e3023682 it's still not really clear to my why this is needed, maybe only in combination with -XD
koda
parents: 8832
diff changeset
   172
    list(APPEND pascal_flags "-dPNG_SCREENSHOTS" "-Fl${PNG_LIBRARY_DIR}" "-k-L${PNG_LIBRARY_DIR}")
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   173
endif()
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   174
9208
acb2492288e5 heavily rework lua discovery and linking, needs testing but it's more similar to what we do for other libraries now
koda
parents: 9203
diff changeset
   175
if(LUA_FOUND AND LUA_SYSTEM)
acb2492288e5 heavily rework lua discovery and linking, needs testing but it's more similar to what we do for other libraries now
koda
parents: 9203
diff changeset
   176
    get_filename_component(LUA_LIBRARY_DIR ${LUA_LIBRARY} PATH)
acb2492288e5 heavily rework lua discovery and linking, needs testing but it's more similar to what we do for other libraries now
koda
parents: 9203
diff changeset
   177
    get_filename_component(LUA_LIBRARY_NAME ${LUA_LIBRARY} NAME)
acb2492288e5 heavily rework lua discovery and linking, needs testing but it's more similar to what we do for other libraries now
koda
parents: 9203
diff changeset
   178
    #NAME_WE would strip the .1 (or .2) next to the ".so"
acb2492288e5 heavily rework lua discovery and linking, needs testing but it's more similar to what we do for other libraries now
koda
parents: 9203
diff changeset
   179
    string(REGEX REPLACE "${CMAKE_SHARED_LIBRARY_PREFIX}(.*)${CMAKE_SHARED_LIBRARY_SUFFIX}" "\\1" LUA_LIBRARY_NAME "${LUA_LIBRARY_NAME}")
acb2492288e5 heavily rework lua discovery and linking, needs testing but it's more similar to what we do for other libraries now
koda
parents: 9203
diff changeset
   180
    list(APPEND pascal_flags )
acb2492288e5 heavily rework lua discovery and linking, needs testing but it's more similar to what we do for other libraries now
koda
parents: 9203
diff changeset
   181
    list(APPEND pascal_flags "-Fl${LUA_LIBRARY_DIR}"
acb2492288e5 heavily rework lua discovery and linking, needs testing but it's more similar to what we do for other libraries now
koda
parents: 9203
diff changeset
   182
                             "-k-L${LUA_LIBRARY_DIR}"
acb2492288e5 heavily rework lua discovery and linking, needs testing but it's more similar to what we do for other libraries now
koda
parents: 9203
diff changeset
   183
                             "-XLAlua=${LUA_LIBRARY_NAME}")
acb2492288e5 heavily rework lua discovery and linking, needs testing but it's more similar to what we do for other libraries now
koda
parents: 9203
diff changeset
   184
endif()
7655
b993257902d3 if this doesn't work I shall cry like a lady
sheepluva
parents: 7654
diff changeset
   185
7706
19ade14ecc29 forgot a few checks from rev f40c65ae3eab
koda
parents: 7694
diff changeset
   186
#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
   187
if(FREEPASCAL_VERSION VERSION_LESS "2.6")
7940
d5e49cf042d9 fix parallel compilation
hasufell
parents: 7817
diff changeset
   188
    #under some configurations CMAKE_BUILD_TOOL fails to pass on the jobserver, breaking parallel compilation
d5e49cf042d9 fix parallel compilation
hasufell
parents: 7817
diff changeset
   189
    if(UNIX)
d5e49cf042d9 fix parallel compilation
hasufell
parents: 7817
diff changeset
   190
        set(SAFE_BUILD_TOOL $(MAKE))
d5e49cf042d9 fix parallel compilation
hasufell
parents: 7817
diff changeset
   191
    else()
d5e49cf042d9 fix parallel compilation
hasufell
parents: 7817
diff changeset
   192
        set(SAFE_BUILD_TOOL ${CMAKE_BUILD_TOOL})
d5e49cf042d9 fix parallel compilation
hasufell
parents: 7817
diff changeset
   193
    endif()
8702
a28966180a29 have fpc work in the right directory instead of passing the full path of the main module (avoids having full paths in debug build backtraces for the first module only)
koda
parents: 8697
diff changeset
   194
    add_custom_target(ENGINECLEAN COMMAND ${SAFE_BUILD_TOOL} "clean" "${PROJECT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")
7655
b993257902d3 if this doesn't work I shall cry like a lady
sheepluva
parents: 7654
diff changeset
   195
endif()
b993257902d3 if this doesn't work I shall cry like a lady
sheepluva
parents: 7654
diff changeset
   196
b993257902d3 if this doesn't work I shall cry like a lady
sheepluva
parents: 7654
diff changeset
   197
8666
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   198
if(${FFMPEG_FOUND})
9203
bcc25cb9b122 and now also avwrapper can be shared/static, add visibility to its exported functions, drop (needed only when static)
koda
parents: 9151
diff changeset
   199
    list(APPEND pascal_flags "-dUSE_VIDEO_RECORDING")
bcc25cb9b122 and now also avwrapper can be shared/static, add visibility to its exported functions, drop (needed only when static)
koda
parents: 9151
diff changeset
   200
8666
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   201
    # TODO: this check is only for SDL < 2
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   202
    # 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
   203
    find_package(GLUT REQUIRED)
7954
a5f0a6d46c52 advice from hasufell
koda
parents: 7942
diff changeset
   204
8666
1652c1d9adc8 rework ffmpeg/libav/videorec linking and their cmake discovery
koda
parents: 8665
diff changeset
   205
    include_directories(${FFMPEG_INCLUDE_DIR})
9203
bcc25cb9b122 and now also avwrapper can be shared/static, add visibility to its exported functions, drop (needed only when static)
koda
parents: 9151
diff changeset
   206
    add_library(avwrapper avwrapper.c)
bcc25cb9b122 and now also avwrapper can be shared/static, add visibility to its exported functions, drop (needed only when static)
koda
parents: 9151
diff changeset
   207
    #TODO: find good VERSION and SOVERSION values
bcc25cb9b122 and now also avwrapper can be shared/static, add visibility to its exported functions, drop (needed only when static)
koda
parents: 9151
diff changeset
   208
    target_link_libraries(avwrapper ${FFMPEG_LIBRARIES})
bcc25cb9b122 and now also avwrapper can be shared/static, add visibility to its exported functions, drop (needed only when static)
koda
parents: 9151
diff changeset
   209
    install(TARGETS avwrapper RUNTIME DESTINATION ${target_binary_install_dir}
bcc25cb9b122 and now also avwrapper can be shared/static, add visibility to its exported functions, drop (needed only when static)
koda
parents: 9151
diff changeset
   210
                              LIBRARY DESTINATION ${target_library_install_dir}
bcc25cb9b122 and now also avwrapper can be shared/static, add visibility to its exported functions, drop (needed only when static)
koda
parents: 9151
diff changeset
   211
                              ARCHIVE DESTINATION ${target_library_install_dir})
7538
2d6e69b392cb better cmake script
Stepan777 <stepik-777@mail.ru>
parents: 7534
diff changeset
   212
endif()
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   213
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
   214
8665
3ff8694d9e22 rewritten findfreepascal, moved checkstack code elsewhere
koda
parents: 8664
diff changeset
   215
set(fpc_flags ${pascal_flags} ${hwengine_project})
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   216
8146
1fba650c2aa4 GCI2012: Lowercase CMake functions (main files only)
m4tx
parents: 8093
diff changeset
   217
if(NOT APPLE)
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   218
    #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
   219
    add_custom_command(OUTPUT "${EXECUTABLE_OUTPUT_PATH}/${engine_output_name}"
8665
3ff8694d9e22 rewritten findfreepascal, moved checkstack code elsewhere
koda
parents: 8664
diff changeset
   220
        COMMAND "${FREEPASCAL_EXECUTABLE}"
8314
7faceaca67d4 can change library name and compile it on windows again
koda
parents: 8312
diff changeset
   221
        ARGS ${fpc_flags} -o${engine_output_name}
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   222
        DEPENDS ${engine_sources}
8702
a28966180a29 have fpc work in the right directory instead of passing the full path of the main module (avoids having full paths in debug build backtraces for the first module only)
koda
parents: 8697
diff changeset
   223
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   224
        )
8146
1fba650c2aa4 GCI2012: Lowercase CMake functions (main files only)
m4tx
parents: 8093
diff changeset
   225
else()
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   226
    #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
   227
    foreach (build_arch ${powerpc_build} ${i386_build} ${x86_64_build})
8347
716c05f19401 GCI2012: CMake List Append
Willie Zhu
parents: 8322
diff changeset
   228
        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
   229
        add_custom_command(OUTPUT "${EXECUTABLE_OUTPUT_PATH}/hwengine.${build_arch}"
8665
3ff8694d9e22 rewritten findfreepascal, moved checkstack code elsewhere
koda
parents: 8664
diff changeset
   230
            COMMAND "${FREEPASCAL_EXECUTABLE}"
7112
38c5d56c4d6e rename a few internal cmake variables (for consistency and readability)
koda
parents: 7109
diff changeset
   231
            ARGS ${fpc_flags} -ohwengine.${build_arch} -P${build_arch}
7109
af3a43a46f21 there a libSDLMain.a in the bundled SDL framework
koda
parents: 7031
diff changeset
   232
            DEPENDS ${engine_sources}
8702
a28966180a29 have fpc work in the right directory instead of passing the full path of the main module (avoids having full paths in debug build backtraces for the first module only)
koda
parents: 8697
diff changeset
   233
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   234
            )
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   235
        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
   236
        add_custom_command(TARGET hwengine.${build_arch} POST_BUILD
50369fa5053b adjust rpath on osx too for libengine
koda
parents: 8316
diff changeset
   237
            COMMAND "install_name_tool"
50369fa5053b adjust rpath on osx too for libengine
koda
parents: 8316
diff changeset
   238
            ARGS -id @executable_path/../Frameworks/${engine_output_name}
50369fa5053b adjust rpath on osx too for libengine
koda
parents: 8316
diff changeset
   239
                ${EXECUTABLE_OUTPUT_PATH}/hwengine.${build_arch}
50369fa5053b adjust rpath on osx too for libengine
koda
parents: 8316
diff changeset
   240
            )
4357
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   241
    endforeach()
2003
41b3d00949ca Patch by koda:
unc0rr
parents: 1997
diff changeset
   242
4930
5d59bb58c365 fix issue 185 :|
koda
parents: 4928
diff changeset
   243
    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
   244
        COMMAND "lipo"
4930
5d59bb58c365 fix issue 185 :|
koda
parents: 4928
diff changeset
   245
        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
   246
        DEPENDS ${lipo_args_list}
a1fcfc341a52 Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents: 4158
diff changeset
   247
        )
8146
1fba650c2aa4 GCI2012: Lowercase CMake functions (main files only)
m4tx
parents: 8093
diff changeset
   248
endif()
2003
41b3d00949ca Patch by koda:
unc0rr
parents: 1997
diff changeset
   249
2641
b08cafb86797 some tweaks in the mac compilation system
koda
parents: 2629
diff changeset
   250
8379
6a446b7cece0 keep engine target name consistent across platforms
koda
parents: 8347
diff changeset
   251
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
   252
d5ea24399a48 when Lua is not found, fallback to compiling the one that comes bundled in our sources
koda
parents: 7029
diff changeset
   253
#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
   254
if(NOT LUA_FOUND)
8379
6a446b7cece0 keep engine target name consistent across platforms
koda
parents: 8347
diff changeset
   255
    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
   256
endif()
d5ea24399a48 when Lua is not found, fallback to compiling the one that comes bundled in our sources
koda
parents: 7029
diff changeset
   257
8528
ffd71e99a4f0 and now compile and link properly
koda
parents: 8518
diff changeset
   258
# same for physfs
ffd71e99a4f0 and now compile and link properly
koda
parents: 8518
diff changeset
   259
if(NOT PHYSFS_FOUND)
ffd71e99a4f0 and now compile and link properly
koda
parents: 8518
diff changeset
   260
    add_dependencies(hwengine physfs)
ffd71e99a4f0 and now compile and link properly
koda
parents: 8518
diff changeset
   261
endif()
ffd71e99a4f0 and now compile and link properly
koda
parents: 8518
diff changeset
   262
ffd71e99a4f0 and now compile and link properly
koda
parents: 8518
diff changeset
   263
add_dependencies(hwengine physlayer)
7967
2f4fa2a06e4f Build physfs lib before engine
unc0rr
parents: 7959
diff changeset
   264
7942
17b3937de37b avwrapper needs to depend on hwengine not on ENGINECLEAN
koda
parents: 7940
diff changeset
   265
#when ffmpeg/libav is found we need to compile it before engine
7954
a5f0a6d46c52 advice from hasufell
koda
parents: 7942
diff changeset
   266
#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
   267
if(${FFMPEG_FOUND})
8379
6a446b7cece0 keep engine target name consistent across platforms
koda
parents: 8347
diff changeset
   268
    add_dependencies(hwengine avwrapper)
7942
17b3937de37b avwrapper needs to depend on hwengine not on ENGINECLEAN
koda
parents: 7940
diff changeset
   269
endif()
17b3937de37b avwrapper needs to depend on hwengine not on ENGINECLEAN
koda
parents: 7940
diff changeset
   270
7706
19ade14ecc29 forgot a few checks from rev f40c65ae3eab
koda
parents: 7694
diff changeset
   271
#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
   272
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
   273
    add_dependencies(hwengine ENGINECLEAN)
7653
6dda2562f692 engineclean returns
sheepluva
parents: 7622
diff changeset
   274
endif()
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 173
diff changeset
   275
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
   276
install(PROGRAMS "${EXECUTABLE_OUTPUT_PATH}/${engine_output_name}" DESTINATION ${destination_dir})