summaryrefslogtreecommitdiff
path: root/indra/cmake/LLPrimitive.cmake
blob: 335c2a9258134469f5673cb1ee0fe48faa800be0 (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
# -*- cmake -*-

# these should be moved to their own cmake file
include(Prebuilt)
include(Linking)
include(Boost)

include_guard()

add_library( ll::minizip-ng INTERFACE IMPORTED )
add_library( ll::libxml INTERFACE IMPORTED )
add_library( ll::colladadom INTERFACE IMPORTED )

# ND, needs fixup in collada conan pkg
if( USE_CONAN )
  target_include_directories( ll::colladadom SYSTEM INTERFACE
    "${CONAN_INCLUDE_DIRS_COLLADADOM}/collada-dom/"
    "${CONAN_INCLUDE_DIRS_COLLADADOM}/collada-dom/1.4/" )
endif()

if( USESYSTEMLIBS )
  if( WINDOWS )
    include(FindPkgConfig)
    pkg_check_modules(Colladadom REQUIRED collada-dom-141)
    target_compile_definitions( ll::colladadom INTERFACE COLLADA_DOM_SUPPORT141 )
    target_include_directories( ll::colladadom SYSTEM INTERFACE ${Colladadom_INCLUDE_DIRS} )
    target_link_directories( ll::colladadom INTERFACE ${Colladadom_LIBRARY_DIRS} )
    target_link_libraries( ll::colladadom INTERFACE ${Colladadom_LIBRARIES} )
    return ()
  elseif( LINUX OR CMAKE_SYSTEM_NAME MATCHES FreeBSD )
    # Build of the collada-dom for Linux and FreeBSD is done in
    # indra/llprimitive/CMakeLists.txt
    return ()
  else( WINDOWS )
    include(FindPkgConfig)
    pkg_check_modules(Minizip REQUIRED minizip)
    pkg_check_modules(Libxml2 REQUIRED libxml-2.0)
    target_link_libraries( ll::minizip-ng INTERFACE ${Minizip_LIBRARIES} )
    target_link_libraries( ll::libxml INTERFACE ${Libxml2_LIBRARIES} )
    if( ${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/colladadom_installed OR NOT ${colladadom_installed} EQUAL 0 )
      if( NOT EXISTS ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8.tar.gz )
        file(DOWNLOAD
          https://github.com/secondlife/3p-colladadom/archive/refs/tags/v2.3-r8.tar.gz
          ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8.tar.gz
          )
      endif( NOT EXISTS ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8.tar.gz )
      file(ARCHIVE_EXTRACT
        INPUT ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8.tar.gz
        DESTINATION ${CMAKE_BINARY_DIR}
        )
      execute_process(
        COMMAND sed -i "" -e "s/SHARED/STATIC/g" CMakeLists.txt
        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8/src/1.4
        )
      if( DARWIN )
        set(BOOST_CFLAGS -I${Libxml2_LIBRARY_DIRS}exec/boost/1.87/include)
        set(BOOST_LIBS -L${Minizip_LIBRARY_DIRS}exec/boost/1.87/lib)
        set(BOOST_LIBRARY_SUFFIX -mt)
      endif()
      try_compile(COLLADADOM_RESULT
        PROJECT colladadom
        SOURCE_DIR ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8
        BINARY_DIR ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8
        TARGET collada14dom
        CMAKE_FLAGS
          -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
          -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}
          -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET}
          -DCMAKE_INSTALL_PREFIX:PATH=${LIBS_PREBUILT_DIR}
          -DCMAKE_CXX_STANDARD:STRING=17
          -DCMAKE_CXX_FLAGS:STRING=-I${Minizip_INCLUDE_DIRS}
          -DBoost_CFLAGS:STRING=${BOOST_CFLAGS}
          -DEXTRA_COMPILE_FLAGS:STRING=-I${Libxml2_INCLUDE_DIRS}
          "-DCMAKE_SHARED_LINKER_FLAGS:STRING=-L${Minizip_LIBRARY_DIRS} ${BOOST_LIBS}"
          -DBoost_FILESYSTEM_LIBRARY:STRING=boost_filesystem${BOOST_LIBRARY_SUFFIX}
          -DBoost_SYSTEM_LIBRARY:STRING=boost_system${BOOST_LIBRARY_SUFFIX}
          -DZLIB_LIBRARIES:STRING=${Libxml2_LIBRARIES}
          -DOPT_COLLADA14:BOOL=ON
          -DCOLLADA_DOM_INCLUDE_INSTALL_DIR:PATH=${LIBS_PREBUILT_DIR}/include/collada
        )
      if( ${COLLADADOM_RESULT} )
        execute_process(
          COMMAND ${CMAKE_MAKE_PROGRAM} install
          WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/3p-colladadom-2.3-r8
          OUTPUT_VARIABLE colladadom_installed
          )
        file(RENAME
          ${ARCH_PREBUILT_DIRS}/libcollada14dom.a
          ${ARCH_PREBUILT_DIRS_RELEASE}/libcollada14dom.a
          )
        file(WRITE ${PREBUILD_TRACKING_DIR}/colladadom_installed "${colladadom_installed}")
      endif( ${COLLADADOM_RESULT} )
    endif( ${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/colladadom_installed OR NOT ${colladadom_installed} EQUAL 0 )
  endif( WINDOWS )
else( USESYSTEMLIBS )
use_system_binary( colladadom )

use_prebuilt_binary(colladadom)
use_prebuilt_binary(minizip-ng) # needed for colladadom
use_prebuilt_binary(libxml2)

if (WINDOWS)
    target_link_libraries( ll::minizip-ng INTERFACE ${ARCH_PREBUILT_DIRS_RELEASE}/minizip.lib )
else()
    target_link_libraries( ll::minizip-ng INTERFACE ${ARCH_PREBUILT_DIRS_RELEASE}/libminizip.a )
endif()

if (WINDOWS)
    target_link_libraries( ll::libxml INTERFACE ${ARCH_PREBUILT_DIRS_RELEASE}/libxml2.lib Bcrypt.lib)
else()
    target_link_libraries( ll::libxml INTERFACE ${ARCH_PREBUILT_DIRS_RELEASE}/libxml2.a)
endif()
endif( USESYSTEMLIBS )

target_include_directories( ll::colladadom SYSTEM INTERFACE
        ${LIBS_PREBUILT_DIR}/include/collada
        ${LIBS_PREBUILT_DIR}/include/collada/1.4
        )
if (WINDOWS)
    target_link_libraries(ll::colladadom INTERFACE ${ARCH_PREBUILT_DIRS_RELEASE}/libcollada14dom23-s.lib ll::libxml ll::minizip-ng )
else ()
    target_link_libraries(ll::colladadom INTERFACE collada14dom ll::boost ll::libxml ll::minizip-ng)
endif()