aboutsummaryrefslogtreecommitdiff
path: root/res/functions.cmake
blob: 2a7e7c323d0e973086556892dee9b4d72d5c4211 (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
function(sprite)
    set(options "")
    set(multiValueArgs "")
    set(oneValueArgs NAME X Y TRANSPARENT BPP CX CY)
    cmake_parse_arguments(SPRITE "${options}" "${oneValueArgs}"
        "${multiValueArgs}" ${ARGN})

    if(PS1_BUILD)
        if(${SPRITE_TRANSPARENT})
            set(trans -mpink)
        endif()

        if(NOT "${SPRITE_BPP}" STREQUAL "16")
            set(clut "-clut=${SPRITE_CX},${SPRITE_CY}")
        endif()

        add_custom_target(${SPRITE_NAME}_img ALL
            bmp2tim ${SPRITE_NAME}.bmp ${CMAKE_CURRENT_BINARY_DIR}/${SPRITE_NAME}
                ${SPRITE_BPP} -org=${SPRITE_X},${SPRITE_Y} ${clut} ${trans}
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
            DEPENDS ${SPRITE_NAME}.bmp
            BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/${SPRITE_NAME})
        add_dependencies(iso ${SPRITE_NAME}_img)
    elseif(SDL1_2_BUILD)
        if(${SPRITE_TRANSPARENT})
            set(trans "transparent=1")
        else()
            set(trans "transparent=0")
        endif()

        add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${SPRITE_NAME}
            COMMAND ${TOOLS_PREFIX}/bin/add-header ${trans} ${SPRITE_NAME}_24.bmp ${CMAKE_CURRENT_BINARY_DIR}/${SPRITE_NAME}
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
            DEPENDS ${SPRITE_NAME}_24.bmp
            VERBATIM)
        add_custom_target(${SPRITE_NAME}_img
            DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${SPRITE_NAME})
        add_dependencies(${PROJECT_NAME} ${SPRITE_NAME}_img)
        add_dependencies(${SPRITE_NAME}_img tools)
    endif()
endfunction()

function(sound)
    set(options "")
    set(multiValueArgs "")
    set(oneValueArgs NAME LOOP)
    cmake_parse_arguments(SOUND "${options}" "${oneValueArgs}"
        "${multiValueArgs}" ${ARGN})

    if(PS1_BUILD)
        if(${SOUND_LOOP})
            set(loop -L)
        endif()

        add_custom_target(${SOUND_NAME}_snd ALL
            wav2vag ${SOUND_NAME}.wav
                ${CMAKE_CURRENT_BINARY_DIR}/${SOUND_NAME} ${loop}
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
            DEPENDS ${SOUND_NAME}.wav
            BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/${SOUND_NAME})
        add_dependencies(iso ${SOUND_NAME}_snd)
    elseif(SDL1_2_BUILD)
        if(${SOUND_LOOP})
            set(loop "loop=1")
        else()
            set(loop "loop=0")
        endif()

        # Reference: https://gist.github.com/socantre/7ee63133a0a3a08f3990
        add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${SOUND_NAME}
            COMMAND ${TOOLS_PREFIX}/bin/add-header ${loop} ${SOUND_NAME}.wav ${CMAKE_CURRENT_BINARY_DIR}/${SOUND_NAME}
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
            DEPENDS ${SOUND_NAME}.wav
            VERBATIM)
        add_custom_target(${SOUND_NAME}_snd
            DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${SOUND_NAME})
        add_dependencies(${PROJECT_NAME} ${SOUND_NAME}_snd)
        add_dependencies(${SOUND_NAME}_snd tools)
    endif()
endfunction()

function(level)
    set(options "")
    set(multiValueArgs "")
    set(oneValueArgs NAME)
    cmake_parse_arguments(LEVEL "${options}" "${oneValueArgs}"
        "${multiValueArgs}" ${ARGN})

    add_custom_command(OUTPUT ${cdroot}/${LEVEL_NAME}.txt
        COMMAND cp ${LEVEL_NAME}.txt ${cdroot}/${LEVEL_NAME}.txt
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
        DEPENDS ${LEVEL_NAME}.txt
        VERBATIM)
    add_custom_target(${LEVEL_NAME}_lvl
        DEPENDS ${cdroot}/${LEVEL_NAME}.txt)
    add_dependencies(${PROJECT_NAME} ${LEVEL_NAME}_lvl)
endfunction()

function(container)
    set(options "")
    set(multiValueArgs SPRITES SOUNDS)
    set(oneValueArgs NAME)
    cmake_parse_arguments(CONTAINER "${options}" "${oneValueArgs}"
        "${multiValueArgs}" ${ARGN})

    add_custom_command(OUTPUT ${cdroot}/${CONTAINER_NAME}.cnt
        COMMAND ${TOOLS_PREFIX}/bin/container ${CONTAINER_SPRITES} ${CONTAINER_SOUNDS}
            ${cdroot}/${CONTAINER_NAME}.cnt
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
        VERBATIM)

    add_custom_target(${CONTAINER_NAME}_container
        DEPENDS ${cdroot}/${CONTAINER_NAME}.cnt)
    add_dependencies(${PROJECT_NAME} ${CONTAINER_NAME}_container)
    add_dependencies(${CONTAINER_NAME}_container tools)

    foreach(sprite ${CONTAINER_SPRITES})
        add_dependencies(${CONTAINER_NAME}_container ${sprite}_img)
    endforeach()

    foreach(sound ${CONTAINER_SOUNDS})
        add_dependencies(${CONTAINER_NAME}_container ${sound}_snd)
    endforeach()

    if(PS1_BUILD)
        add_dependencies(iso ${CONTAINER_NAME}_container)
    endif()
endfunction()