summaryrefslogtreecommitdiff
path: root/tools/cmake/DawAddState.cmake
blob: a20aac7cd7793628bcd050824e3487b3ae550580 (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
# Add the directory to the list of states.
# The directories contents will be compiled into a shared object file and linked
# to the main daw library
macro(daw_add_state STATEDIR)
  set_property(TARGET daw
    APPEND PROPERTY INCLUDE_DIRECTORIES
    ${CMAKE_SOURCE_DIR}/state_${STATEDIR}/include)

  file(APPEND ${CMAKE_BINARY_DIR}/include/state_type_list.h
    "State(${STATEDIR})\n")

  file(APPEND ${CMAKE_BINARY_DIR}/include/include_states.h
    "#include <states/${STATEDIR}.h>\n")

  file(GLOB STATE_SOURCES
    LIST_DIRECTORIES false
    state_${STATEDIR}/src/*.c
  )

  # TODO: When state reloading is implemented properly, add MODULE library
  # option In general, this should only be available when debugging.
  if(BUILD_SHARED_LIBS)
    if(DAW_BUILD_DEBUG AND DAW_BUILD_HOTRELOAD)
      add_library(${STATEDIR} MODULE ${STATE_SOURCES})
    else()
      add_library(${STATEDIR} SHARED ${STATE_SOURCES})
    endif()
  else()
    add_library(${STATEDIR} OBJECT ${STATE_SOURCES})
  endif()

  target_include_directories(${STATEDIR} PUBLIC
    state_${STATEDIR}/include
    ${daw_SOURCE_DIR}/include
    ${CMAKE_BINARY_DIR}/include
    include
    )

  set_property(TARGET daw
    APPEND PROPERTY LINK_LIBRARIES
    ${STATEDIR})

  list(APPEND STATE_LIST ${STATEDIR})
endmacro()