Makefile 5.1 KB

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