Makefile 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. CLOSURE_DIR=closure-compiler
  2. CLOSURE=$(CLOSURE_DIR)/compiler.jar
  3. BROWSER=chromium
  4. NASM_TEST_DIR=./tests/nasm
  5. all: build/v86_all.js
  6. browser: build/v86_all.js
  7. # Used for nodejs builds and in order to profile code.
  8. # `debug` gives identifiers a readable name, make sure it doesn't have any side effects.
  9. CLOSURE_READABLE=--formatting PRETTY_PRINT --debug
  10. CLOSURE_SOURCE_MAP=\
  11. --source_map_format V3\
  12. --create_source_map '%outname%.map'
  13. #--jscomp_error reportUnknownTypes\
  14. #--jscomp_error unusedLocalVariables\
  15. #--jscomp_error unusedPrivateMembers\
  16. #--new_type_inf\
  17. # Easily breaks code:
  18. #--assume_function_wrapper\
  19. # implies new type inferrence
  20. #--jscomp_error newCheckTypes\
  21. CLOSURE_FLAGS=\
  22. --js lib/closure-base.js\
  23. --generate_exports\
  24. --externs src/externs.js\
  25. --warning_level VERBOSE\
  26. --jscomp_error accessControls\
  27. --jscomp_error ambiguousFunctionDecl\
  28. --jscomp_error checkEventfulObjectDisposal\
  29. --jscomp_error checkRegExp\
  30. --jscomp_error checkTypes\
  31. --jscomp_error checkVars\
  32. --jscomp_error conformanceViolations\
  33. --jscomp_error const\
  34. --jscomp_error constantProperty\
  35. --jscomp_error deprecated\
  36. --jscomp_error deprecatedAnnotations\
  37. --jscomp_error duplicateMessage\
  38. --jscomp_error es3\
  39. --jscomp_error es5Strict\
  40. --jscomp_error externsValidation\
  41. --jscomp_error fileoverviewTags\
  42. --jscomp_error globalThis\
  43. --jscomp_error inferredConstCheck\
  44. --jscomp_error internetExplorerChecks\
  45. --jscomp_error invalidCasts\
  46. --jscomp_error misplacedTypeAnnotation\
  47. --jscomp_error missingGetCssName\
  48. --jscomp_error missingProperties\
  49. --jscomp_error missingReturn\
  50. --jscomp_error msgDescriptions\
  51. --jscomp_error nonStandardJsDocs\
  52. --jscomp_error suspiciousCode\
  53. --jscomp_error strictModuleDepCheck\
  54. --jscomp_error typeInvalidation\
  55. --jscomp_error undefinedNames\
  56. --jscomp_error undefinedVars\
  57. --jscomp_error unknownDefines\
  58. --jscomp_error unnecessaryCasts\
  59. --jscomp_error visibility\
  60. --use_types_for_optimization\
  61. --summary_detail_level 3\
  62. --language_in ECMASCRIPT5_STRICT
  63. TRANSPILE_ES6_FLAGS=\
  64. --language_in ECMASCRIPT6_STRICT\
  65. --language_out ECMASCRIPT5_STRICT\
  66. CORE_FILES=const.js config.js io.js main.js lib.js fpu.js ide.js pci.js floppy.js memory.js \
  67. dma.js pit.js vga.js ps2.js pic.js rtc.js uart.js hpet.js acpi.js apic.js ioapic.js \
  68. state.js ne2k.js virtio.js bus.js log.js \
  69. cpu.js translate.js modrm.js string.js arith.js misc_instr.js instructions.js debug.js \
  70. elf.js
  71. LIB_FILES=9p.js filesystem.js jor1k.js marshall.js utf8.js
  72. BROWSER_FILES=screen.js \
  73. keyboard.js mouse.js serial.js \
  74. network.js lib.js starter.js worker_bus.js dummy_screen.js
  75. CORE_FILES:=$(addprefix src/,$(CORE_FILES))
  76. LIB_FILES:=$(addprefix lib/,$(LIB_FILES))
  77. BROWSER_FILES:=$(addprefix src/browser/,$(BROWSER_FILES))
  78. build/v86_all.js: $(CLOSURE) src/*.js src/browser/*.js lib/*.js
  79. mkdir -p build
  80. -ls -lh build/v86_all.js
  81. java -jar $(CLOSURE) \
  82. --js_output_file build/v86_all.js\
  83. --define=DEBUG=false\
  84. $(CLOSURE_SOURCE_MAP)\
  85. $(CLOSURE_FLAGS)\
  86. --compilation_level ADVANCED\
  87. $(TRANSPILE_ES6_FLAGS)\
  88. --js $(CORE_FILES)\
  89. --js $(LIB_FILES)\
  90. --js $(BROWSER_FILES)\
  91. --js src/browser/main.js
  92. echo '//# sourceMappingURL=v86_all.js.map' >> build/v86_all.js
  93. ls -lh build/v86_all.js
  94. build/libv86.js: $(CLOSURE) src/*.js lib/*.js src/browser/*.js
  95. mkdir -p build
  96. -ls -lh build/libv86.js
  97. java -jar $(CLOSURE) \
  98. --js_output_file build/libv86.js\
  99. --define=DEBUG=false\
  100. $(CLOSURE_FLAGS)\
  101. --compilation_level SIMPLE\
  102. $(TRANSPILE_ES6_FLAGS)\
  103. --output_wrapper ';(function(){%output%})();'\
  104. --js $(CORE_FILES)\
  105. --js $(BROWSER_FILES)\
  106. --js $(LIB_FILES)
  107. ls -lh build/libv86.js
  108. clean:
  109. -rm build/libv86.js
  110. -rm build/v86_all.js
  111. -rm build/libv86.js.map
  112. -rm build/v86_all.js.map
  113. $(MAKE) -C $(NASM_TEST_DIR) clean
  114. run:
  115. python2 -m SimpleHTTPServer 2> /dev/null
  116. #sleep 1
  117. #$(BROWSER) http://localhost:8000/index.html &
  118. update_version:
  119. set -e ;\
  120. COMMIT=`git log --format="%h" -n 1` ;\
  121. DATE=`git log --date="format:%b %e, %Y %H:%m" --format="%cd" -n 1` ;\
  122. SEARCH='<code>Version: <a href="https://github.com/copy/v86/commits/[a-f0-9]\+">[a-f0-9]\+</a> ([^(]\+)</a></code>' ;\
  123. REPLACE='<code>Version: <a href="https://github.com/copy/v86/commits/'$$COMMIT'">'$$COMMIT'</a> ('$$DATE')</a></code>' ;\
  124. sed -i "s@$$SEARCH@$$REPLACE@g" index.html ;\
  125. grep $$COMMIT index.html
  126. $(CLOSURE):
  127. wget -P $(CLOSURE_DIR) http://dl.google.com/closure-compiler/compiler-latest.zip
  128. unzip -d closure-compiler $(CLOSURE_DIR)/compiler-latest.zip \*.jar
  129. mv $(CLOSURE_DIR)/*.jar $(CLOSURE)
  130. rm $(CLOSURE_DIR)/compiler-latest.zip
  131. tests: build/libv86.js
  132. ./tests/full/run.js
  133. nasmtests: build/libv86.js
  134. $(MAKE) -C $(NASM_TEST_DIR) all
  135. $(NASM_TEST_DIR)/run.js
  136. qemutests: build/libv86.js
  137. make -C tests/qemu test-i386
  138. ./tests/qemu/run.js > result
  139. ./tests/qemu/test-i386 > reference
  140. diff result reference