aboutsummaryrefslogtreecommitdiff
path: root/cmake.deps/cmake/BuildLuv.cmake
blob: 6e9a333dc8390c681d17808e4328123697d2be9f (plain) (blame)
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
# BuildLuv(PATCH_COMMAND ... CONFIGURE_COMMAND ... BUILD_COMMAND ... INSTALL_COMMAND ...)
# Reusable function to build luv, wraps ExternalProject_Add.
# Failing to pass a command argument will result in no command being run
function(BuildLuv)
  cmake_parse_arguments(_luv
    ""
    ""
    "PATCH_COMMAND;CONFIGURE_COMMAND;BUILD_COMMAND;INSTALL_COMMAND"
    ${ARGN})

  if(NOT _luv_CONFIGURE_COMMAND AND NOT _luv_BUILD_COMMAND
       AND NOT _luv_INSTALL_COMMAND)
    message(FATAL_ERROR "Must pass at least one of CONFIGURE_COMMAND, BUILD_COMMAND, INSTALL_COMMAND")
  endif()

  ExternalProject_Add(lua-compat-5.3
    PREFIX ${DEPS_BUILD_DIR}
    URL ${LUA_COMPAT53_URL}
    DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/lua-compat-5.3
    DOWNLOAD_COMMAND ${CMAKE_COMMAND}
      -DPREFIX=${DEPS_BUILD_DIR}
      -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/lua-compat-5.3
      -DURL=${LUA_COMPAT53_URL}
      -DEXPECTED_SHA256=${LUA_COMPAT53_SHA256}
      -DTARGET=lua-compat-5.3
      -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
      -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
    PATCH_COMMAND ""
    CONFIGURE_COMMAND ""
    BUILD_COMMAND ""
    INSTALL_COMMAND "")

  ExternalProject_Add(luv-static
    PREFIX ${DEPS_BUILD_DIR}
    DEPENDS lua-compat-5.3
    URL ${LUV_URL}
    DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luv
    DOWNLOAD_COMMAND ${CMAKE_COMMAND}
      -DPREFIX=${DEPS_BUILD_DIR}
      -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/luv
      -DURL=${LUV_URL}
      -DEXPECTED_SHA256=${LUV_SHA256}
      -DTARGET=luv-static
      # The source is shared with BuildLuarocks (with USE_BUNDLED_LUV).
      -DSRC_DIR=${DEPS_BUILD_DIR}/src/luv
      -DUSE_EXISTING_SRC_DIR=${USE_EXISTING_SRC_DIR}
      -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake
    PATCH_COMMAND "${_luv_PATCH_COMMAND}"
    CONFIGURE_COMMAND "${_luv_CONFIGURE_COMMAND}"
    BUILD_COMMAND "${_luv_BUILD_COMMAND}"
    INSTALL_COMMAND "${_luv_INSTALL_COMMAND}"
    LIST_SEPARATOR |)
endfunction()

set(LUV_SRC_DIR ${DEPS_BUILD_DIR}/src/luv)
set(LUV_INCLUDE_FLAGS
  "-I${DEPS_INSTALL_DIR}/include -I${DEPS_INSTALL_DIR}/include/luajit-2.1")

# Replace luv default rockspec with the alternate one under the "rockspecs"
# directory
set(LUV_PATCH_COMMAND
    ${CMAKE_COMMAND} -E copy_directory ${LUV_SRC_DIR}/rockspecs ${LUV_SRC_DIR})

set(LUV_CONFIGURE_COMMAND_COMMON
  ${CMAKE_COMMAND} ${LUV_SRC_DIR}
  -DCMAKE_GENERATOR=${CMAKE_GENERATOR}
  -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
  -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR}
  -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES_ALT_SEP}
  -DLUA_BUILD_TYPE=System
  -DLUA_COMPAT53_DIR=${DEPS_BUILD_DIR}/src/lua-compat-5.3
  -DWITH_SHARED_LIBUV=ON
  -DBUILD_SHARED_LIBS=OFF
  -DBUILD_STATIC_LIBS=ON
  -DBUILD_MODULE=OFF)

if(USE_BUNDLED_LUAJIT)
  list(APPEND LUV_CONFIGURE_COMMAND_COMMON -DWITH_LUA_ENGINE=LuaJit)
elseif(USE_BUNDLED_LUA)
  list(APPEND LUV_CONFIGURE_COMMAND_COMMON -DWITH_LUA_ENGINE=Lua)
else()
  find_package(LuaJit)
  if(LUAJIT_FOUND)
    list(APPEND LUV_CONFIGURE_COMMAND_COMMON -DWITH_LUA_ENGINE=LuaJit)
  else()
    list(APPEND LUV_CONFIGURE_COMMAND_COMMON -DWITH_LUA_ENGINE=Lua)
  endif()
endif()

if(USE_BUNDLED_LIBUV)
  set(LUV_CONFIGURE_COMMAND_COMMON
    ${LUV_CONFIGURE_COMMAND_COMMON}
    -DCMAKE_PREFIX_PATH=${DEPS_INSTALL_DIR})
endif()

if(MSVC)
  set(LUV_CONFIGURE_COMMAND
    ${LUV_CONFIGURE_COMMAND_COMMON}
    -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
    -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM}
    # Same as Unix without fPIC
    "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1} ${LUV_INCLUDE_FLAGS}"
    # Make sure we use the same generator, otherwise we may
    # accidentally end up using different MSVC runtimes
    -DCMAKE_GENERATOR=${CMAKE_GENERATOR})
else()
  set(LUV_CONFIGURE_COMMAND
    ${LUV_CONFIGURE_COMMAND_COMMON}
    -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
    "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_COMPILER_ARG1} ${LUV_INCLUDE_FLAGS} -fPIC")
  if(CMAKE_GENERATOR MATCHES "Unix Makefiles" AND
      (CMAKE_SYSTEM_NAME MATCHES ".*BSD" OR CMAKE_SYSTEM_NAME MATCHES "DragonFly"))
      set(LUV_CONFIGURE_COMMAND ${LUV_CONFIGURE_COMMAND} -DCMAKE_MAKE_PROGRAM=gmake)
  endif()
endif()

set(LUV_BUILD_COMMAND
  ${CMAKE_COMMAND} --build . --config ${CMAKE_BUILD_TYPE})
set(LUV_INSTALL_COMMAND
  ${CMAKE_COMMAND} --build . --target install --config ${CMAKE_BUILD_TYPE})

BuildLuv(PATCH_COMMAND ${LUV_PATCH_COMMAND}
  CONFIGURE_COMMAND ${LUV_CONFIGURE_COMMAND}
  BUILD_COMMAND ${LUV_BUILD_COMMAND}
  INSTALL_COMMAND ${LUV_INSTALL_COMMAND})

list(APPEND THIRD_PARTY_DEPS luv-static)
if(USE_BUNDLED_LUAJIT)
  add_dependencies(luv-static luajit)
endif()
if(USE_BUNDLED_LIBUV)
  add_dependencies(luv-static libuv)
endif()