summaryrefslogtreecommitdiffstats
path: root/Modules/Platform/Haiku.cmake
blob: 825f85164059f50157060d2519845a062592a1d4 (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
# process only once
if(HAIKU)
  return()
endif()

set(HAIKU 1)
set(UNIX 1)

set(CMAKE_DL_LIBS "")
set(CMAKE_SHARED_LIBRARY_C_FLAGS "-fPIC")
set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared")
set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":")
set(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,")
set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,")
set(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic")

# Determine, if the C or C++ compiler is configured for a secondary
# architecture. If so, that will change the search paths we set below. We check
# whether the compiler's library search paths contain a
# "/boot/system/develop/lib/<subdir>/", which we assume to be the secondary
# architecture specific subdirectory and extract the name of the architecture
# accordingly.
set(__HAIKU_COMPILER ${CMAKE_C_COMPILER})

if(NOT __HAIKU_COMPILER)
  set(__HAIKU_COMPILER ${CMAKE_CXX_COMPILER})
endif()

execute_process(
  COMMAND ${__HAIKU_COMPILER} -print-search-dirs
  OUTPUT_VARIABLE _HAIKU_SEARCH_DIRS
  OUTPUT_STRIP_TRAILING_WHITESPACE)

string(REGEX MATCH ".*\nlibraries: =?([^\n]*:)?/boot/system/develop/lib/([^/]*)/(:[^\n]*)?\n.*" _dummy "\n${_HAIKU_SEARCH_DIRS}\n")
set(CMAKE_HAIKU_SECONDARY_ARCH "${CMAKE_MATCH_2}")

if(NOT CMAKE_HAIKU_SECONDARY_ARCH)
  set(CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR "")
  unset(CMAKE_HAIKU_SECONDARY_ARCH)
else()
  set(CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR "/${CMAKE_HAIKU_SECONDARY_ARCH}")

  # Override CMAKE_*LIBRARY_ARCHITECTURE. This will cause FIND_LIBRARY to search
  # the libraries in the correct subdirectory first. It still isn't completely
  # correct, since the parent directories shouldn't be searched at all. The
  # primary architecture library might still be found, if there isn't one
  # installed for the secondary architecture or it is installed in a less
  # specific location.
  set(CMAKE_LIBRARY_ARCHITECTURE ${CMAKE_HAIKU_SECONDARY_ARCH})
  set(CMAKE_C_LIBRARY_ARCHITECTURE ${CMAKE_HAIKU_SECONDARY_ARCH})
  set(CMAKE_CXX_LIBRARY_ARCHITECTURE ${CMAKE_HAIKU_SECONDARY_ARCH})
endif()

list(APPEND CMAKE_SYSTEM_PREFIX_PATH
  /boot/common/non-packaged
  /boot/common
  /boot/system
  )

LIST(APPEND CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES
  /boot/common/non-packaged/develop/headers${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
  /boot/common/develop/headers${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
  /boot/system/develop/headers/os
  /boot/system/develop/headers/os/app
  /boot/system/develop/headers/os/device
  /boot/system/develop/headers/os/drivers
  /boot/system/develop/headers/os/game
  /boot/system/develop/headers/os/interface
  /boot/system/develop/headers/os/kernel
  /boot/system/develop/headers/os/locale
  /boot/system/develop/headers/os/mail
  /boot/system/develop/headers/os/media
  /boot/system/develop/headers/os/midi
  /boot/system/develop/headers/os/midi2
  /boot/system/develop/headers/os/net
  /boot/system/develop/headers/os/opengl
  /boot/system/develop/headers/os/storage
  /boot/system/develop/headers/os/support
  /boot/system/develop/headers/os/translation
  /boot/system/develop/headers/os/add-ons/graphics
  /boot/system/develop/headers/os/add-ons/input_server
  /boot/system/develop/headers/os/add-ons/screen_saver
  /boot/system/develop/headers/os/add-ons/tracker
  /boot/system/develop/headers/os/be_apps/Deskbar
  /boot/system/develop/headers/os/be_apps/NetPositive
  /boot/system/develop/headers/os/be_apps/Tracker
  /boot/system/develop/headers/3rdparty
  /boot/system/develop/headers/bsd
  /boot/system/develop/headers/glibc
  /boot/system/develop/headers/gnu
  /boot/system/develop/headers/posix
  /boot/system/develop/headers${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
  )
IF (CMAKE_HAIKU_SECONDARY_ARCH)
  LIST(APPEND CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES
    /boot/system/develop/headers
    )
ENDIF (CMAKE_HAIKU_SECONDARY_ARCH)

LIST(APPEND CMAKE_HAIKU_C_INCLUDE_DIRECTORIES
  ${CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES}
  )

LIST(APPEND CMAKE_HAIKU_CXX_INCLUDE_DIRECTORIES
  ${CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES})

LIST(APPEND CMAKE_SYSTEM_INCLUDE_PATH ${CMAKE_HAIKU_C_INCLUDE_DIRECTORIES})

LIST(APPEND CMAKE_HAIKU_DEVELOP_LIB_DIRECTORIES
  /boot/common/non-packaged/develop/lib${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
  /boot/common/develop/lib${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
  /boot/system/develop/lib${CMAKE_HAIKU_SECONDARY_ARCH_SUBDIR}
  )

LIST(APPEND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES
  ${CMAKE_HAIKU_DEVELOP_LIB_DIRECTORIES}
  )

LIST(APPEND CMAKE_SYSTEM_LIBRARY_PATH ${CMAKE_HAIKU_DEVELOP_LIB_DIRECTORIES})

if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
  set(CMAKE_INSTALL_PREFIX "/boot/common" CACHE PATH
    "Install path prefix, prepended onto install directories." FORCE)
endif()