summaryrefslogtreecommitdiffstats
path: root/project/cmake/scripts/darwin
diff options
context:
space:
mode:
Diffstat (limited to 'project/cmake/scripts/darwin')
-rw-r--r--project/cmake/scripts/darwin/archsetup.cmake34
-rw-r--r--project/cmake/scripts/darwin/install.cmake0
-rw-r--r--project/cmake/scripts/darwin/macros.cmake108
-rw-r--r--project/cmake/scripts/darwin/pathsetup.cmake32
4 files changed, 174 insertions, 0 deletions
diff --git a/project/cmake/scripts/darwin/archsetup.cmake b/project/cmake/scripts/darwin/archsetup.cmake
new file mode 100644
index 0000000..accb8ab
--- /dev/null
+++ b/project/cmake/scripts/darwin/archsetup.cmake
@@ -0,0 +1,34 @@
1if(NOT CMAKE_TOOLCHAIN_FILE)
2 message(FATAL_ERROR "CMAKE_TOOLCHAIN_FILE required for darwin. See ${PROJECT_SOURCE_DIR}/README.md")
3endif()
4
5set(CORE_MAIN_SOURCE ${CORE_SOURCE_DIR}/xbmc/platform/posix/main.cpp
6 ${CORE_SOURCE_DIR}/xbmc/platform/darwin/osx/SDLMain.mm
7 ${CORE_SOURCE_DIR}/xbmc/platform/darwin/osx/SDLMain.h)
8
9set(ARCH_DEFINES -D_LINUX -DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_OSX)
10set(SYSTEM_DEFINES -D_REENTRANT -D_FILE_DEFINED -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
11 -D__STDC_CONSTANT_MACROS)
12set(PLATFORM_DIR linux)
13set(CMAKE_SYSTEM_NAME Darwin)
14if(WITH_ARCH)
15 set(ARCH ${WITH_ARCH})
16else()
17 if(CPU STREQUAL x86_64)
18 set(ARCH x86_64-apple-darwin)
19 elseif(CPU STREQUAL i386)
20 set(ARCH i386-apple-darwin)
21 else()
22 message(SEND_ERROR "Unknown CPU: ${CPU}")
23 endif()
24endif()
25
26find_package(CXX11 REQUIRED)
27
28list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${NATIVEPREFIX})
29
30list(APPEND DEPLIBS "-framework DiskArbitration" "-framework IOKit"
31 "-framework IOSurface" "-framework SystemConfiguration"
32 "-framework ApplicationServices" "-framework AppKit"
33 "-framework CoreAudio" "-framework AudioToolbox"
34 "-framework CoreGraphics")
diff --git a/project/cmake/scripts/darwin/install.cmake b/project/cmake/scripts/darwin/install.cmake
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/project/cmake/scripts/darwin/install.cmake
diff --git a/project/cmake/scripts/darwin/macros.cmake b/project/cmake/scripts/darwin/macros.cmake
new file mode 100644
index 0000000..4ee17c2
--- /dev/null
+++ b/project/cmake/scripts/darwin/macros.cmake
@@ -0,0 +1,108 @@
1function(core_link_library lib wraplib)
2 if(CMAKE_GENERATOR MATCHES "Unix Makefiles")
3 set(wrapper_obj cores/dll-loader/exports/CMakeFiles/wrapper.dir/wrapper.c.o)
4 elseif(CMAKE_GENERATOR MATCHES "Xcode")
5 set(wrapper_obj cores/dll-loader/exports/kodi.build/$(CONFIGURATION)/wrapper.build/Objects-$(CURRENT_VARIANT)/$(CURRENT_ARCH)/wrapper.o)
6 else()
7 message(FATAL_ERROR "Unsupported generator in core_link_library")
8 endif()
9
10 set(export -bundle -undefined dynamic_lookup -read_only_relocs suppress
11 -Wl,-alias_list,${CORE_BUILD_DIR}/cores/dll-loader/exports/wrapper.def
12 ${CORE_BUILD_DIR}/${wrapper_obj})
13 set(check_arg "")
14 if(TARGET ${lib})
15 set(target ${lib})
16 set(link_lib $<TARGET_FILE:${lib}>)
17 set(check_arg ${ARGV2})
18 set(data_arg ${ARGV3})
19 else()
20 set(target ${ARGV2})
21 set(link_lib ${lib})
22 set(check_arg ${ARGV3})
23 set(data_arg ${ARGV4})
24 endif()
25 if(check_arg STREQUAL export)
26 set(export ${export}
27 -Wl,--version-script=${ARGV3})
28 elseif(check_arg STREQUAL nowrap)
29 set(export ${data_arg})
30 elseif(check_arg STREQUAL extras)
31 foreach(arg ${data_arg})
32 list(APPEND export ${arg})
33 endforeach()
34 endif()
35 get_filename_component(dir ${wraplib} PATH)
36
37 # We can't simply pass the linker flags to the args section of the custom command
38 # because cmake will add quotes around it (and the linker will fail due to those).
39 # We need to do this handstand first ...
40 separate_arguments(CUSTOM_COMMAND_ARGS_LDFLAGS UNIX_COMMAND "${CMAKE_SHARED_LINKER_FLAGS}")
41
42 add_custom_command(OUTPUT ${wraplib}-${ARCH}${CMAKE_SHARED_MODULE_SUFFIX}
43 COMMAND ${CMAKE_COMMAND} -E make_directory ${dir}
44 COMMAND ${CMAKE_C_COMPILER}
45 ARGS ${CUSTOM_COMMAND_ARGS_LDFLAGS} ${export} -Wl,-force_load ${link_lib}
46 -o ${CMAKE_BINARY_DIR}/${wraplib}-${ARCH}${CMAKE_SHARED_MODULE_SUFFIX}
47 DEPENDS ${target} wrapper.def wrapper
48 VERBATIM)
49
50 # Uncomment to create wrap_<lib> targets for debugging
51 #get_filename_component(libname ${wraplib} NAME_WE)
52 #add_custom_target(wrap_${libname} ALL DEPENDS ${wraplib}-${ARCH}${CMAKE_SHARED_MODULE_SUFFIX})
53
54 list(APPEND WRAP_FILES ${wraplib}-${ARCH}${CMAKE_SHARED_MODULE_SUFFIX})
55 set(WRAP_FILES ${WRAP_FILES} PARENT_SCOPE)
56endfunction()
57
58function(find_soname lib)
59 cmake_parse_arguments(arg "REQUIRED" "" "" ${ARGN})
60
61 string(TOLOWER ${lib} liblow)
62 if(${lib}_LDFLAGS)
63 set(link_lib "${${lib}_LDFLAGS}")
64 else()
65 set(link_lib "${${lib}_LIBRARIES}")
66 endif()
67
68 execute_process(COMMAND ${CMAKE_C_COMPILER} -print-search-dirs
69 COMMAND fgrep libraries:
70 COMMAND sed "s/[^=]*=\\(.*\\)/\\1/"
71 COMMAND sed "s/:/ /g"
72 ERROR_QUIET
73 OUTPUT_VARIABLE cc_lib_path
74 OUTPUT_STRIP_TRAILING_WHITESPACE)
75 execute_process(COMMAND echo ${link_lib}
76 COMMAND sed "s/-L[ ]*//g"
77 COMMAND sed "s/-l[^ ]*//g"
78 ERROR_QUIET
79 OUTPUT_VARIABLE env_lib_path
80 OUTPUT_STRIP_TRAILING_WHITESPACE)
81
82 foreach(path ${cc_lib_path} ${env_lib_path})
83 if(IS_DIRECTORY ${path})
84 execute_process(COMMAND ls -- ${path}/lib${liblow}.dylib
85 ERROR_QUIET
86 OUTPUT_VARIABLE lib_file
87 OUTPUT_STRIP_TRAILING_WHITESPACE)
88 else()
89 set(lib_file ${path})
90 endif()
91 if(lib_file)
92 # we want the path/name that is embedded in the dylib
93 execute_process(COMMAND otool -L ${lib_file}
94 COMMAND grep -v lib${liblow}.dylib
95 COMMAND grep ${liblow}
96 COMMAND awk "{V=1; print $V}"
97 ERROR_QUIET
98 OUTPUT_VARIABLE filename
99 OUTPUT_STRIP_TRAILING_WHITESPACE)
100 get_filename_component(${lib}_SONAME "${filename}" NAME)
101 message(STATUS "${lib} soname: ${${lib}_SONAME}")
102 endif()
103 endforeach()
104 if(arg_REQUIRED AND NOT ${lib}_SONAME)
105 message(FATAL_ERROR "Could not find dynamically loadable library ${lib}")
106 endif()
107 set(${lib}_SONAME ${${lib}_SONAME} PARENT_SCOPE)
108endfunction()
diff --git a/project/cmake/scripts/darwin/pathsetup.cmake b/project/cmake/scripts/darwin/pathsetup.cmake
new file mode 100644
index 0000000..e31f66e
--- /dev/null
+++ b/project/cmake/scripts/darwin/pathsetup.cmake
@@ -0,0 +1,32 @@
1if(NOT prefix)
2 set(prefix ${DEPENDS_PATH})
3endif()
4if(NOT exec_prefix)
5 set(exec_prefix \${prefix})
6endif()
7if(NOT libdir)
8 set(libdir ${prefix}/lib)
9endif()
10if(NOT bindir)
11 set(bindir ${prefix}/bin)
12endif()
13if(NOT includedir)
14 set(includedir ${prefix}/include)
15endif()
16if(NOT datarootdir)
17 set(datarootdir ${prefix}/share)
18endif()
19if(NOT datadir)
20 set(datadir \${datarootdir})
21endif()
22
23list(APPEND final_message "-- PATH config --")
24list(APPEND final_message "Prefix: ${prefix}")
25list(APPEND final_message "Libdir: ${libdir}")
26list(APPEND final_message "Bindir: ${bindir}")
27list(APPEND final_message "Includedir: ${includedir}")
28list(APPEND final_message "Datarootdir: ${datarootdir}")
29list(APPEND final_message "Datadir: ${datadir}")
30
31set(PATH_DEFINES -DBIN_INSTALL_PATH=\"${libdir}/xbmc\"
32 -DINSTALL_PATH=\"${datarootdir}/xbmc\")