mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-22 00:15:46 -07:00
Files

The KaiOS build includes compiled versions of various Emscripten library files. These are generally under the MIT licence like Puzzles itself. The MIT licence requires that the licence, and the copyright notice, be "included in all copies or substantial portions of the Software." Since each KaiOS package includes the full manual, which already contains the licence for Puzzles itself, adding the copyright notices there seems like the best approach. I've done this by providing an additional input file that contains the licences for source files used by a current Emscripten build. More automation might be nice, but the set of copyright notices is unlikely to change very much. There are basically one for Emscripten, one for musl, and a few for odd bits of third-party code embedded in musl.
134 lines
4.4 KiB
CMake
134 lines
4.4 KiB
CMake
set(platform_common_sources emcc.c)
|
|
set(platform_gui_libs)
|
|
set(platform_libs)
|
|
set(CMAKE_EXECUTABLE_SUFFIX ".js")
|
|
|
|
set(WASM ON
|
|
CACHE BOOL "Compile to WebAssembly rather than plain JavaScript")
|
|
|
|
find_program(HALIBUT halibut)
|
|
if(NOT HALIBUT)
|
|
message(WARNING "HTML documentation cannot be built (did not find halibut)")
|
|
endif()
|
|
|
|
set(emcc_export_list
|
|
# Event handlers for mouse and keyboard input
|
|
_mouseup
|
|
_mousedown
|
|
_mousemove
|
|
_key
|
|
# Callback when the program activates timing
|
|
_timer_callback
|
|
# Callback from button presses in the UI outside the canvas
|
|
_command
|
|
# Game-saving and game-loading functions
|
|
_get_save_file
|
|
_free_save_file
|
|
_load_game
|
|
# Callbacks to return values from dialog boxes
|
|
_dlg_return_sval
|
|
_dlg_return_ival
|
|
# Callbacks when the resizing controls are used
|
|
_resize_puzzle
|
|
_restore_puzzle_size
|
|
# Callback when device pixel ratio changes
|
|
_rescale_puzzle
|
|
# Main program, run at initialisation time
|
|
_main)
|
|
|
|
list(TRANSFORM emcc_export_list PREPEND \")
|
|
list(TRANSFORM emcc_export_list APPEND \")
|
|
string(JOIN "," emcc_export_string ${emcc_export_list})
|
|
set(CMAKE_C_LINK_FLAGS "\
|
|
-s ALLOW_MEMORY_GROWTH=1 \
|
|
-s EXPORTED_FUNCTIONS='[${emcc_export_string}]' \
|
|
-s EXPORTED_RUNTIME_METHODS='[cwrap]' \
|
|
-s STRICT_JS=1")
|
|
if(WASM)
|
|
set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -s WASM=1")
|
|
else()
|
|
set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -s WASM=0")
|
|
endif()
|
|
|
|
set(build_cli_programs FALSE)
|
|
set(build_gui_programs FALSE)
|
|
|
|
function(get_platform_puzzle_extra_source_files OUTVAR NAME)
|
|
set(${OUTVAR} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(set_platform_gui_target_properties TARGET)
|
|
endfunction()
|
|
|
|
function(set_platform_puzzle_target_properties NAME TARGET)
|
|
em_link_pre_js(${TARGET} ${CMAKE_SOURCE_DIR}/emccpre.js)
|
|
em_link_js_library(${TARGET} ${CMAKE_SOURCE_DIR}/emcclib.js)
|
|
endfunction()
|
|
|
|
function(build_platform_extras)
|
|
if(HALIBUT)
|
|
set(help_dir ${CMAKE_CURRENT_BINARY_DIR}/help)
|
|
add_custom_command(OUTPUT ${help_dir}/en
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${help_dir}/en)
|
|
add_custom_command(OUTPUT ${help_dir}/en/index.html
|
|
COMMAND ${HALIBUT} --html -Chtml-template-fragment:%k
|
|
${CMAKE_CURRENT_SOURCE_DIR}/puzzles.but
|
|
${CMAKE_CURRENT_SOURCE_DIR}/emcccopy.but
|
|
DEPENDS
|
|
${help_dir}/en
|
|
${CMAKE_CURRENT_SOURCE_DIR}/puzzles.but
|
|
${CMAKE_CURRENT_SOURCE_DIR}/emcccopy.but
|
|
WORKING_DIRECTORY ${help_dir}/en)
|
|
add_custom_target(kaios_help ALL
|
|
DEPENDS ${help_dir}/en/index.html)
|
|
endif()
|
|
|
|
# This is probably not the right way to set the destination.
|
|
set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR} CACHE PATH
|
|
"Installation path" FORCE)
|
|
|
|
add_custom_target(kaios-extras ALL)
|
|
|
|
foreach(name ${puzzle_names})
|
|
add_custom_command(
|
|
OUTPUT ${name}-manifest.webapp
|
|
COMMAND ${PERL_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/kaios/manifest.pl
|
|
"${name}" "${displayname_${name}}" "${description_${name}}"
|
|
"${objective_${name}}" > "${name}-manifest.webapp"
|
|
VERBATIM
|
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/kaios/manifest.pl)
|
|
|
|
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/kaios)
|
|
add_custom_command(
|
|
OUTPUT ${name}-kaios.html
|
|
COMMAND ${PERL_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/kaios/apppage.pl
|
|
"${name}" "${displayname_${name}}" > "${name}-kaios.html"
|
|
VERBATIM
|
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/kaios/apppage.pl)
|
|
|
|
add_custom_target(${name}-kaios-extras
|
|
DEPENDS ${name}-manifest.webapp ${name}-kaios.html)
|
|
add_dependencies(kaios-extras ${name}-kaios-extras)
|
|
|
|
install(TARGETS ${name} DESTINATION kaios/${name})
|
|
# Release builds generate an initial memory image alongside the
|
|
# JavaScript, but CMake doesn't seem to know about it to install
|
|
# it.
|
|
install(FILES $<TARGET_FILE:${name}>.mem OPTIONAL
|
|
DESTINATION kaios/${name})
|
|
install(FILES ${ICON_DIR}/${name}-56kai.png ${ICON_DIR}/${name}-112kai.png
|
|
DESTINATION kaios/${name} OPTIONAL)
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}-kaios.html
|
|
RENAME ${name}.html
|
|
DESTINATION kaios/${name})
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}-manifest.webapp
|
|
RENAME manifest.webapp
|
|
DESTINATION kaios/${name})
|
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/kaios/kaiads-glue.js
|
|
DESTINATION kaios/${name})
|
|
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/help OPTIONAL
|
|
DESTINATION kaios/${name})
|
|
|
|
endforeach()
|
|
endfunction()
|