summaryrefslogtreecommitdiffstats
path: root/Modules/Platform/Haiku.cmake
blob: 7e0af6166f4537d162f6fdf763fcd45eba9253cf (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
# 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_ORIGIN_TOKEN "\$ORIGIN")
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.

# First of all, find a C or C++ compiler we can run. The "arg1" is necessary
# here for compilers such as "distcc gcc-x86" or "ccache gcc-x86"
# TODO See CMakeDetermineCompilerId.cmake for some more things we may want to do.
if(CMAKE_C_COMPILER)
  set(__HAIKU_COMPILER ${CMAKE_C_COMPILER})
  string (STRIP "${CMAKE_C_COMPILER_ARG1}" __HAIKU_COMPILER_FLAGS)
else()
  set(__HAIKU_COMPILER ${CMAKE_CXX_COMPILER})
  string (STRIP "${CMAKE_CXX_COMPILER_ARG1}" __HAIKU_COMPILER_FLAGS)
endif()


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

string(REGEX MATCH "libraries: =?([^\n]*:)?/boot/system/develop/lib/([^/]*)/?(:?\n+)" _dummy "${_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/system/non-packaged
  /boot/system
  )

LIST(APPEND CMAKE_HAIKU_COMMON_INCLUDE_DIRECTORIES
  /boot/system/non-packaged/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/system/non-packaged/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/system" CACHE PATH
    "Install path prefix, prepended onto install directories." FORCE)
endif()