summaryrefslogtreecommitdiff
path: root/indra/cmake/Havok.cmake
blob: 8b7f01d20b5020e9811eacc288ee4827bd9581c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# -*- cmake -*-

if(NOT DEFINED ${CMAKE_CURRENT_LIST_FILE}_INCLUDED)
set(${CMAKE_CURRENT_LIST_FILE}_INCLUDED "YES")

use_prebuilt_binary(havok-source)

set(Havok_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/havok/Source)
list(APPEND Havok_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/havok/Demo)

set(HAVOK_DEBUG_LIBRARY_PATH ${LIBS_PREBUILT_DIR}/lib/debug/havok-fulldebug)
set(HAVOK_RELEASE_LIBRARY_PATH ${LIBS_PREBUILT_DIR}/lib/release/havok)

if (LL_DEBUG_HAVOK)
   if (WIN32)
      # Always link relwithdebinfo to havok-hybrid on windows.
      set(HAVOK_RELWITHDEBINFO_LIBRARY_PATH ${LIBS_PREBUILT_DIR}/lib/debug/havok-hybrid)
   else (WIN32)
      set(HAVOK_RELWITHDEBINFO_LIBRARY_PATH ${LIBS_PREBUILT_DIR}/lib/debug/havok-fulldebug)
   endif (WIN32)
else (LL_DEBUG_HAVOK)
   set(HAVOK_RELWITHDEBINFO_LIBRARY_PATH ${LIBS_PREBUILT_DIR}/lib/release/havok)
endif (LL_DEBUG_HAVOK)

set(HAVOK_LIBS
    hkBase
    hkCompat
    hkGeometryUtilities
    hkInternal
    hkSerialize
    hkSceneData
    hkpCollide
    hkpUtilities
    hkpConstraintSolver
    hkpDynamics
    hkpInternal
    hkaiInternal
    hkaiPathfinding
    hkaiAiPhysicsBridge
    hkcdInternal
    hkcdCollide
    hkpVehicle
    hkVisualize
    hkaiVisualize
    hkgpConvexDecomposition
)

unset(HK_DEBUG_LIBRARIES)
unset(HK_RELEASE_LIBRARIES)
unset(HK_RELWITHDEBINFO_LIBRARIES)

# *TODO: Figure out why we need to extract like this...
foreach(HAVOK_LIB ${HAVOK_LIBS})
        find_library(HAVOK_DEBUG_LIB_${HAVOK_LIB}   ${HAVOK_LIB} PATHS ${HAVOK_DEBUG_LIBRARY_PATH})
        find_library(HAVOK_RELEASE_LIB_${HAVOK_LIB} ${HAVOK_LIB} PATHS ${HAVOK_RELEASE_LIBRARY_PATH})
        find_library(HAVOK_RELWITHDEBINFO_LIB_${HAVOK_LIB} ${HAVOK_LIB} PATHS ${HAVOK_RELWITHDEBINFO_LIBRARY_PATH})
        
        if(LINUX)
            set(debug_dir "${HAVOK_DEBUG_LIBRARY_PATH}/${HAVOK_LIB}")
            set(release_dir "${HAVOK_RELEASE_LIBRARY_PATH}/${HAVOK_LIB}")
            set(relwithdebinfo_dir "${HAVOK_RELWITHDEBINFO_LIBRARY_PATH}/${HAVOK_LIB}")

    # Try to avoid extracting havok library each time we run cmake.
    if("${havok_${HAVOK_LIB}_extracted}" STREQUAL "" AND EXISTS "${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted")
      file(READ ${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted "havok_${HAVOK_LIB}_extracted")
      if(DEBUG_PREBUILT)
        message(STATUS "havok_${HAVOK_LIB}_extracted: \"${havok_${HAVOK_LIB}_extracted}\"")
      endif(DEBUG_PREBUILT)
    endif("${havok_${HAVOK_LIB}_extracted}" STREQUAL "" AND EXISTS "${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted")

    if(${CMAKE_BINARY_DIR}/temp/havok-source_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted OR NOT ${havok_${HAVOK_LIB}_extracted} EQUAL 0)
      if(DEBUG_PREBUILT)
        MESSAGE(STATUS "Extracting ${HAVOK_LIB}...")
      endif(DEBUG_PREBUILT)
      set(cmd "mkdir")

      if(DEBUG_PREBUILT)
        MESSAGE(STATUS "${cmd} ${debug_dir}")
      endif(DEBUG_PREBUILT)
            exec_program( ${cmd} ${HAVOK_DEBUG_LIBRARY_PATH} ARGS ${debug_dir} OUTPUT_VARIABLE rv)

      if(DEBUG_PREBUILT)
        MESSAGE(STATUS "${cmd} ${release_dir}")
      endif(DEBUG_PREBUILT)
            exec_program( ${cmd} ${HAVOK_RELEASE_LIBRARY_PATH} ARGS ${release_dir} OUTPUT_VARIABLE rv)

      if(DEBUG_PREBUILT)
        MESSAGE(STATUS "${cmd} ${relwithdebinfo_dir}")
      endif(DEBUG_PREBUILT)
            exec_program( ${cmd} ${HAVOK_RELWITHDEBINFO_LIBRARY_PATH} ARGS ${relwithdebinfo_dir} OUTPUT_VARIABLE rv)

            set(cmd "ar")
            set(arg " -xv")
            set(arg "${arg} ../lib${HAVOK_LIB}.a")
      if(DEBUG_PREBUILT)
        MESSAGE(STATUS "cd ${debug_dir} && ${cmd} ${arg}")
      endif(DEBUG_PREBUILT)
            exec_program( ${cmd} ${debug_dir} ARGS ${arg} OUTPUT_VARIABLE rv)

      if(DEBUG_PREBUILT)
        MESSAGE(STATUS "cd ${release_dir} && ${cmd} ${arg}")
      endif(DEBUG_PREBUILT)
            exec_program( ${cmd} ${release_dir} ARGS ${arg} OUTPUT_VARIABLE rv)

      if(DEBUG_PREBUILT)
        MESSAGE(STATUS "cd ${relwithdebinfo_dir} && ${cmd} ${arg}")
      endif(DEBUG_PREBUILT)
            exec_program( ${cmd} ${relwithdebinfo_dir} ARGS ${arg} OUTPUT_VARIABLE rv)

      # Just assume success for now.
      set(havok_${HAVOK_LIB}_extracted 0)
      file(WRITE ${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted "${havok_${HAVOK_LIB}_extracted}")

    endif(${CMAKE_BINARY_DIR}/temp/havok-source_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted OR NOT ${havok_${HAVOK_LIB}_extracted} EQUAL 0)

            file(GLOB extracted_debug "${debug_dir}/*.o")
            file(GLOB extracted_release "${release_dir}/*.o")
            file(GLOB extracted_relwithdebinfo "${relwithdebinfo_dir}/*.o")

    if(DEBUG_PREBUILT)
      MESSAGE(STATUS "extracted_debug ${debug_dir}/*.o")
      MESSAGE(STATUS "extracted_release ${release_dir}/*.o")
      MESSAGE(STATUS "extracted_relwithdebinfo ${relwithdebinfo_dir}/*.o")
    endif(DEBUG_PREBUILT)

            list(APPEND HK_DEBUG_LIBRARIES ${extracted_debug})
            list(APPEND HK_RELEASE_LIBRARIES ${extracted_release})
            list(APPEND HK_RELWITHDEBINFO_LIBRARIES ${extracted_relwithdebinfo})
        else(LINUX)
        # Win32
            list(APPEND HK_DEBUG_LIBRARIES   ${HAVOK_DEBUG_LIB_${HAVOK_LIB}})
            list(APPEND HK_RELEASE_LIBRARIES ${HAVOK_RELEASE_LIB_${HAVOK_LIB}})
            list(APPEND HK_RELWITHDEBINFO_LIBRARIES ${HAVOK_RELWITHDEBINFO_LIB_${HAVOK_LIB}})
        endif (LINUX)
endforeach(HAVOK_LIB)

endif(NOT DEFINED ${CMAKE_CURRENT_LIST_FILE}_INCLUDED)