summaryrefslogtreecommitdiff
path: root/indra/llfilesystem/CMakeLists.txt
blob: b9e8eedcd7398e258b42291a60911e765cb6f102 (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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# -*- cmake -*-

project(llfilesystem)

include(00-Common)
include(LLCommon)
if (LINUX OR CMAKE_SYSTEM_NAME MATCHES FreeBSD)
  include(UnixInstall)
endif (LINUX OR CMAKE_SYSTEM_NAME MATCHES FreeBSD)

set(llfilesystem_SOURCE_FILES
    lldir.cpp
    lldiriterator.cpp
    lllfsthread.cpp
    lldiskcache.cpp
    llfilesystem.cpp
    )

set(llfilesystem_HEADER_FILES
    CMakeLists.txt
    lldir.h
    lldirguard.h
    lldiriterator.h
    lllfsthread.h
    lldiskcache.h
    llfilesystem.h
    )

# Per-platform source/header lists, kept separate so that files belonging to
# platforms other than the one currently being built can still be listed in
# the project (for IDE visibility) while being excluded from compilation.
set(macosx_SOURCE_FILES
    lldir_utils_objc.mm
    lldir_mac.cpp
    )
set(macosx_HEADER_FILES
    lldir_utils_objc.h
    lldir_mac.h
    )

set(linux_SOURCE_FILES
    lldir_linux.cpp
    )
set(linux_HEADER_FILES
    lldir_linux.h
    )

set(windows_SOURCE_FILES
    lldir_win32.cpp
    )
set(windows_HEADER_FILES
    lldir_win32.h
    )

if (DARWIN)
  LIST(APPEND llfilesystem_SOURCE_FILES ${macosx_SOURCE_FILES})
  LIST(APPEND llfilesystem_HEADER_FILES ${macosx_HEADER_FILES})

  set_source_files_properties(
    lldir_utils_objc.mm
    PROPERTIES
    SKIP_PRECOMPILE_HEADERS TRUE
  )
endif (DARWIN)

if (LINUX OR CMAKE_SYSTEM_NAME MATCHES FreeBSD)
  LIST(APPEND llfilesystem_SOURCE_FILES ${linux_SOURCE_FILES})
  LIST(APPEND llfilesystem_HEADER_FILES ${linux_HEADER_FILES})

  if (INSTALL)
    set_source_files_properties(lldir_linux.cpp
                                PROPERTIES COMPILE_FLAGS
                                "-DAPP_RO_DATA_DIR=\\\"${APP_SHARE_DIR}\\\" -DAPP_LIBEXEC_DIR=\\\"${APP_LIBEXEC_DIR}\\\" -DAPP_PLUGIN_DIR=\\\"${INSTALL_LIBRARY_DIR}\\\""
                                )
  endif (INSTALL)
endif (LINUX OR CMAKE_SYSTEM_NAME MATCHES FreeBSD)

if (WINDOWS)
  LIST(APPEND llfilesystem_SOURCE_FILES ${windows_SOURCE_FILES})
  LIST(APPEND llfilesystem_HEADER_FILES ${windows_HEADER_FILES})
endif (WINDOWS)

list(APPEND llfilesystem_SOURCE_FILES ${llfilesystem_HEADER_FILES})

# Collect all platform files for IDE visibility, excluding the files already
# added above for the platform actually being built.
set(ide_visibility_files "")
if (NOT DARWIN)
  list(APPEND ide_visibility_files ${macosx_SOURCE_FILES} ${macosx_HEADER_FILES})
endif()
if (NOT LINUX)
  list(APPEND ide_visibility_files ${linux_SOURCE_FILES} ${linux_HEADER_FILES})
endif()
if (NOT WINDOWS)
  list(APPEND ide_visibility_files ${windows_SOURCE_FILES} ${windows_HEADER_FILES})
endif()

add_library (llfilesystem
    ${llfilesystem_SOURCE_FILES}
    # Add non-platform files for IDE visibility only
    ${ide_visibility_files}
    )

# Mark non-platform files as excluded from build
if (WINDOWS)
  set_source_files_properties(
    ${macosx_SOURCE_FILES}
    ${macosx_HEADER_FILES}
    ${linux_SOURCE_FILES}
    ${linux_HEADER_FILES}
    PROPERTIES
    HEADER_FILE_ONLY TRUE
    )
elseif (DARWIN)
  set_source_files_properties(
    ${windows_SOURCE_FILES}
    ${windows_HEADER_FILES}
    ${linux_SOURCE_FILES}
    ${linux_HEADER_FILES}
    PROPERTIES
    HEADER_FILE_ONLY TRUE
    )
elseif (LINUX)
  set_source_files_properties(
    ${macosx_SOURCE_FILES}
    ${macosx_HEADER_FILES}
    ${windows_SOURCE_FILES}
    ${windows_HEADER_FILES}
    PROPERTIES
    HEADER_FILE_ONLY TRUE
    )
endif()

target_link_libraries(llfilesystem
        llmath
        llcommon
    )
target_include_directories( llfilesystem  INTERFACE   ${CMAKE_CURRENT_SOURCE_DIR})
include(LibraryInstall)

# Portable-install detection (".portable" marker) only needs the
# LL_VELOPACK compile definition, not the actual Velopack library/headers.
if (TARGET ll::velopack)
    target_compile_definitions(llfilesystem PRIVATE LL_VELOPACK=1)
endif ()


if (USE_PRECOMPILED_HEADERS)
    target_precompile_headers(llfilesystem REUSE_FROM llprecompiled)
endif ()

# Add tests
if (LL_TESTS)
    include(LLAddBuildTest)
    # UNIT TESTS
    SET(llfilesystem_TEST_SOURCE_FILES
    lldiriterator.cpp
    )

    LL_ADD_PROJECT_UNIT_TESTS(llfilesystem "${llfilesystem_TEST_SOURCE_FILES}")

    # INTEGRATION TESTS
    set(test_libs llmath llcommon llfilesystem )

    # TODO: Some of these need refactoring to be proper Unit tests rather than Integration tests.
    LL_ADD_INTEGRATION_TEST(lldir "" "${test_libs}")
endif (LL_TESTS)