UNPKG

cosmicos

Version:
224 lines (189 loc) 7.65 kB
############################################################################## ## ## Check for haxe and node ## ## find_program(HAXE haxe) if(NOT HAXE) MESSAGE(FATAL_ERROR "Could not find haxe, please install it") endif() find_program(NODE NAMES nodejs node) if(NOT NODE) MESSAGE(FATAL_ERROR "Could not find node, please install it") endif() ############################################################################## ## ## Compile some basic tools for processing the message ## ## set(WORK ${CMAKE_CURRENT_BINARY_DIR}) set(SRC ${CMAKE_SOURCE_DIR}/transform) set(MSG ${CMAKE_SOURCE_DIR}/src) add_custom_command(OUTPUT ${WORK}/CosmicAudio.js COMMAND ${HAXE} -js CosmicAudio.js -main cosmicos.Sound -cp ${SRC} WORKING_DIRECTORY ${WORK} DEPENDS ${SRC}/cosmicos/Sound.hx) add_custom_command(OUTPUT ${WORK}/CosmicEval.js COMMAND ${HAXE} -js CosmicEval.js -main cosmicos.Evaluate -cp ${SRC} WORKING_DIRECTORY ${WORK} DEPENDS ${SRC}/cosmicos/Evaluate.hx ${SRC}/cosmicos/Parse.hx ${SRC}/cosmicos/Vocab.hx ${SRC}/cosmicos/Memory.hx ${SRC}/cosmicos/ManuscriptStyle.hx ${SRC}/cosmicos/CosFunction.hx ) add_custom_command(OUTPUT ${WORK}/SpiderScrawl.js COMMAND ${HAXE} -js SpiderScrawl.js -main cosmicos.SpiderScrawl -cp ${SRC} WORKING_DIRECTORY ${WORK} DEPENDS ${SRC}/cosmicos/SpiderScrawl.hx) add_custom_command(OUTPUT ${WORK}/OghamStyle.js COMMAND ${HAXE} -js OghamStyle.js -main cosmicos.OghamStyle -cp ${SRC} WORKING_DIRECTORY ${WORK} DEPENDS ${SRC}/cosmicos/OghamStyle.hx) add_custom_target(jshelpers ALL DEPENDS ${WORK}/CosmicAudio.js ${WORK}/CosmicEval.js ${WORK}/SpiderScrawl.js ${WORK}/OghamStyle.js ) ############################################################################## ## ## Add targets for message parts ## # we expect to get a variable COSMIC_DEPENDS that lists all parts include(${CMAKE_SOURCE_DIR}/src/README.cmake) get_target_property(UnlessDriverLoc UnlessDriver JAR_FILE) get_target_property(FritzifierLoc Fritzifier JAR_FILE) FILE(WRITE ${WORK}/setup.cmake " set(base \"${CMAKE_SOURCE_DIR}/src\") set(out_dir \"${CMAKE_CURRENT_BINARY_DIR}\") set(JAVA_EXE \"${Java_JAVA_EXECUTABLE}\") set(JAVAC_EXE \"${Java_JAVAC_EXECUTABLE}\") set(UNLESS \"${UnlessDriverLoc}\") set(ENCODER \"${FritzifierLoc}\") set(BCEL \"${BCEL_JAR}\") set(NODE \"${NODE}\") ") set(ACTIVE_DEPENDS) set(ACTIVE_DEPENDS_SHORT "") set(EXTRA_DEPEND_pl ${MSG}/cosmic.pm) set(EXTRA_DEPEND_js ${MSG}/cosmic.js) set(EXTRA_DEPEND_gate ${CMAKE_SOURCE_DIR}/bin/drawgate-ppm.pl ${CMAKE_SOURCE_DIR}/bin/drawgate-txt.pl ${UnlessDriverLoc}) set(EXTRA_DEPEND_java ${FritzifierLoc}) foreach(depend ${COSMIC_DEPENDS}) foreach(ext pl scm gate java js) if(EXISTS ${MSG}/${depend}.${ext}) add_custom_command(OUTPUT ${WORK}/${depend}.ftz COMMAND ${CMAKE_COMMAND} "-Din:STRING=${depend}.${ext}" "-Dout:STRING=${depend}.ftz" "-Dname:STRING=${depend}" -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/convert_${ext}.cmake WORKING_DIRECTORY ${WORK} DEPENDS ${MSG}/${depend}.${ext} ${EXTRA_DEPEND_${ext}} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/convert_${ext}.cmake) list(APPEND ACTIVE_DEPENDS ${WORK}/${depend}.ftz) set(ACTIVE_DEPENDS_SHORT "${ACTIVE_DEPENDS_SHORT} ${depend}") endif() endforeach() endforeach() # assem.txt contains a concatenation of all message parts, in # original textual form add_custom_command(OUTPUT ${WORK}/assem.txt COMMAND ${CMAKE_COMMAND} "-Din:STRING=${ACTIVE_DEPENDS_SHORT}" "-Dout:STRING=assem.txt" -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/assemble.cmake WORKING_DIRECTORY ${WORK} DEPENDS ${ACTIVE_DEPENDS} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/assemble.cmake) # assem.json is a structured version of assem.txt, but still in original form add_custom_command(OUTPUT ${WORK}/assem.json COMMAND ${NODE} ${CMAKE_SOURCE_DIR}/transform/assemble/assemble2json.js ${WORK}/assem.txt WORKING_DIRECTORY ${WORK} DEPENDS ${WORK}/assem.txt) # primer.json is a numeric version of the message, for self-references. # Note that any lines relying on self-evaluation are inaccurate. # It is important to not refer to such lines, in order to avoid # circularity. Ssh. add_custom_command(OUTPUT ${WORK}/primer.json COMMAND ${CMAKE_COMMAND} "-Din:STRING=${CMAKE_SOURCE_DIR}/transform/assemble/primer.js" "-Dnargs:STRING=${WORK}/assem.json" "-Dlog:STRING=make-primer" -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/node.cmake WORKING_DIRECTORY ${WORK} DEPENDS ${WORK}/assem.json ${WORK}/CosmicEval.js ${CMAKE_SOURCE_DIR}/transform/assemble/primer.js) # assem2.json is assem.json but marked up also with message fragments # in final form add_custom_command(OUTPUT ${WORK}/assem2.json ${CMAKE_BINARY_DIR}/index.txt COMMAND ${CMAKE_COMMAND} "-Din:STRING=${CMAKE_SOURCE_DIR}/transform/assemble/evaluate.js" "-Dnargs:STRING=" "-Dlog:STRING=make-assem2" -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/node.cmake COMMAND ${CMAKE_COMMAND} -E copy ${WORK}/assem2.json ${CMAKE_BINARY_DIR}/index.json COMMAND ${CMAKE_COMMAND} -E copy ${WORK}/q.txt ${CMAKE_BINARY_DIR}/index.txt WORKING_DIRECTORY ${WORK} DEPENDS ${WORK}/assem.json ${WORK}/primer.json ${WORK}/CosmicEval.js ${CMAKE_SOURCE_DIR}/transform/assemble/evaluate.js) add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/wrapped.txt ${CMAKE_BINARY_DIR}/entropy.txt COMMAND ${CMAKE_COMMAND} "-Din:STRING=${CMAKE_BINARY_DIR}/index.txt" "-Dout:STRING=${CMAKE_BINARY_DIR}/wrapped.txt" -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/wrap.cmake COMMAND ${CMAKE_COMMAND} -E tar cj ${CMAKE_BINARY_DIR}/wrapped.tar.bz2 ${CMAKE_BINARY_DIR}/wrapped.txt COMMAND ${CMAKE_COMMAND} "-Din:STRING=${CMAKE_BINARY_DIR}/wrapped.tar.bz2" "-Dout:STRING=${CMAKE_BINARY_DIR}/entropy.txt" -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/wc.cmake WORKING_DIRECTORY ${WORK} DEPENDS ${CMAKE_BINARY_DIR}/index.txt ${CMAKE_SOURCE_DIR}/bin/wrap.pl ${CMAKE_CURRENT_SOURCE_DIR}/cmake/wrap.cmake ${CMAKE_CURRENT_SOURCE_DIR}/cmake/wc.cmake) add_custom_target(assem ALL DEPENDS ${CMAKE_BINARY_DIR}/wrapped.txt) ############################################################################## ## ## Add optional targets (not in default build) for stats ## # scan the active vocabulary add_custom_command(OUTPUT ${WORK}/vocab.json COMMAND ${CMAKE_COMMAND} "-Din:STRING=${CMAKE_SOURCE_DIR}/transform/assemble/vocab.js" "-Dnargs:STRING=${WORK}/assem.json" "-Dlog:STRING=make-vocab" -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/node.cmake WORKING_DIRECTORY ${WORK} DEPENDS ${WORK}/assem.json ${WORK}/CosmicEval.js ${CMAKE_SOURCE_DIR}/transform/assemble/vocab.js) add_custom_target(vocab DEPENDS ${WORK}/vocab.json) ############################################################################## ## ## Make a toy command-line cosmicos repl called cosh ## make_directory(${CMAKE_BINARY_DIR}/bin) make_directory(${CMAKE_BINARY_DIR}/lib) set(PERM_CMD) if (UNIX) set(PERM_CMD COMMAND chmod +x ${CMAKE_BINARY_DIR}/bin/cosh.js) endif() add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/cosh.js COMMAND ${CMAKE_COMMAND} -E copy ${WORK}/CosmicEval.js ${CMAKE_BINARY_DIR}/lib/cosmicos.js COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/tools/repl/repl.js ${CMAKE_BINARY_DIR}/bin/cosh.js ${PERM_CMD} WORKING_DIRECTORY ${WORK} DEPENDS ${WORK}/CosmicEval.js ${CMAKE_SOURCE_DIR}/tools/repl/repl.js) add_custom_target(cli ALL DEPENDS ${CMAKE_BINARY_DIR}/bin/cosh.js) ############################################################################## ## ## Add a little utility for scanning message ## configure_file(${CMAKE_CURRENT_SOURCE_DIR}/assemble/cosmicos ${CMAKE_BINARY_DIR}/bin/cosmsg.js @ONLY)