Makefile 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. # GNU Makefile
  2. -include ../../user.make
  3. OS ?= $(shell uname)
  4. JAVA := java
  5. JAVAC := javac
  6. ifndef build
  7. build := release
  8. endif
  9. ifeq ($(build),debug)
  10. BUILD_FLAGS := -DDEBUG -O0 -g
  11. else ifeq ($(build),memento)
  12. BUILD_FLAGS := -DDEBUG -O0 -g -DMEMENTO
  13. else
  14. BUILD_FLAGS := -DNDEBUG -O2
  15. endif
  16. BUILD_FLAGS += $(XCFLAGS)
  17. ifndef OUT
  18. OUT := build/java/$(build)
  19. endif
  20. ifeq ($(OS),Darwin)
  21. MUPDF_JAVA := ../../$(OUT)/libmupdf_java64.jnilib
  22. JAVA_VM := $(shell /usr/libexec/java_home)
  23. JAVA_CFLAGS := \
  24. -I $(JAVA_VM)/include \
  25. -I $(JAVA_VM)/include/darwin
  26. JAVA_LDFLAGS := -lstdc++
  27. else
  28. BITS := $(shell getconf LONG_BIT)
  29. JAVA_HOME ?= /usr/lib/jvm/default-java
  30. MUPDF_JAVA := ../../$(OUT)/libmupdf_java$(BITS).so
  31. JAVA_CFLAGS := \
  32. -I $(JAVA_HOME)/include \
  33. -I $(JAVA_HOME)/include/linux \
  34. $(shell pkg-config --cflags freetype2) \
  35. $(shell pkg-config --cflags libcrypto)
  36. JAVA_LIBS := \
  37. $(shell pkg-config --libs freetype2) \
  38. $(shell pkg-config --libs libcrypto) \
  39. -lz
  40. JAVA_LDFLAGS := \
  41. -z noexecstack
  42. ifeq ($(tesseract), yes)
  43. ifeq ($(USE_SYSTEM_TESSERACT), yes)
  44. JAVA_LIBS += \
  45. $(shell pkg-config --libs lept) \
  46. $(shell pkg-config --libs tesseract)
  47. CONFIGFLAGS += tesseract=yes USE_SYSTEM_TESSERACT=yes
  48. else
  49. CONFIGFLAGS += tesseract=yes
  50. endif
  51. endif
  52. endif
  53. MUPDF_JAR := ../../$(OUT)/libmupdf.jar
  54. EXAMPLE_JAVA_SOURCES := $(sort $(wildcard example/*.java))
  55. EXAMPLE_JAVA_OBJECTS := $(subst example/,../../$(OUT)/example/,$(EXAMPLE_JAVA_SOURCES:%.java=%.class))
  56. default: $(MUPDF_JAVA) $(MUPDF_JAR) $(EXAMPLE_JAVA_OBJECTS)
  57. jar: $(MUPDF_JAR)
  58. MUPDF_CORE := ../../$(OUT)/libmupdf.a ../../$(OUT)/libmupdf-third.a
  59. ifeq "$(OS)" "Linux"
  60. $(MUPDF_CORE) : .FORCE
  61. $(MAKE) -C ../.. OUT=$(OUT) XCFLAGS=-fPIC build=$(build) USE_SYSTEM_FREETYPE=yes USE_SYSTEM_ZLIB=yes $(CONFIGFLAGS) libs
  62. else
  63. $(MUPDF_CORE) : .FORCE
  64. $(MAKE) -C ../.. OUT=$(OUT) XCFLAGS=-fPIC build=$(build) $(CONFIGFLAGS) libs
  65. endif
  66. LIBRARY_JAVA_SOURCES := $(sort $(wildcard src/com/artifex/mupdf/fitz/*.java))
  67. LIBRARY_JAVA_OBJECTS := $(subst src/,../../$(OUT)/,$(LIBRARY_JAVA_SOURCES:%.java=%.class))
  68. LIBRARY_JAVA_CLASSES := $(subst src/com/artifex/mupdf/fitz/,com.artifex.mupdf.fitz.,$(LIBRARY_JAVA_SOURCES:%.java=%))
  69. JAVAC_FLAGS := $(JAVAC_XFLAGS) -source 1.7 -target 1.7
  70. $(LIBRARY_JAVA_OBJECTS) : $(LIBRARY_JAVA_SOURCES)
  71. mkdir -p ../../$(OUT)
  72. $(JAVAC) $(JAVAC_FLAGS) -h ../../$(OUT)/ -d ../../$(OUT)/ $^
  73. $(EXAMPLE_JAVA_OBJECTS): $(EXAMPLE_JAVA_SOURCES)
  74. $(JAVAC) $(JAVAC_FLAGS) -classpath ../../$(OUT) -d ../../$(OUT)/ $^
  75. $(MUPDF_JAR) : $(LIBRARY_JAVA_OBJECTS)
  76. rm -f $@
  77. cd ../../$(OUT) && jar cf libmupdf.jar com
  78. mupdf_native.h : $(LIBRARY_JAVA_OBJECTS)
  79. rm -f $@
  80. cat $(sort $(wildcard ../../$(OUT)/*.h)) > mupdf_native.h
  81. ../../$(OUT)/mupdf_native.o : mupdf_native.c mupdf_native.h $(wildcard jni/*.c) $(MUPDF_CORE)
  82. $(CC) -g -o $@ -c $< -fPIC -Wall -Wextra -Wno-unused-parameter -Wpedantic -I ../../include \
  83. $(JAVA_CFLAGS) $(BUILD_FLAGS)
  84. $(MUPDF_JAVA) : ../../$(OUT)/mupdf_native.o $(MUPDF_CORE)
  85. $(CC) -shared $(JAVA_LDFLAGS) -o $(MUPDF_JAVA) $^ $(JAVA_LIBS) $(BUILD_FLAGS)
  86. jshell: $(MUPDF_JAVA) $(EXAMPLE_JAVA_OBJECTS) $(MUPDF_JAR)
  87. jshell --class-path ../../$(OUT)/ -R-Djava.library.path="../../$(OUT)" init.jshell $$MUPDF_ARGS
  88. run: $(MUPDF_JAVA) $(EXAMPLE_JAVA_OBJECTS) $(MUPDF_JAR)
  89. $(JAVA) -classpath ../../$(OUT)/ -Djava.library.path="../../$(OUT)" example.Viewer $$MUPDF_ARGS
  90. examples: $(MUPDF_JAVA) $(EXAMPLE_JAVA_OBJECTS) $(MUPDF_JAR)
  91. run-storytest: $(MUPDF_JAVA) $(EXAMPLE_JAVA_OBJECTS) $(MUPDF_JAR)
  92. $(JAVA) -classpath ../../$(OUT)/ -Djava.library.path="../../$(OUT)" example.StoryTest $$MUPDF_ARGS
  93. run-tracedevice: $(MUPDF_JAVA) $(EXAMPLE_JAVA_OBJECTS) $(MUPDF_JAR)
  94. $(JAVA) -classpath ../../$(OUT)/ -Djava.library.path="../../$(OUT)" example.TraceDevice $$MUPDF_ARGS
  95. run-pdftrace: $(MUPDF_JAVA) $(EXAMPLE_JAVA_OBJECTS) $(MUPDF_JAR)
  96. $(JAVA) -classpath ../../$(OUT)/ -Djava.library.path="../../$(OUT)" example.PDFTrace $$MUPDF_ARGS
  97. run-example: $(MUPDF_JAVA) $(EXAMPLE_JAVA_OBJECTS) $(MUPDF_JAR)
  98. $(JAVA) -classpath ../../$(OUT)/ -Djava.library.path="../../$(OUT)" example.Example $$MUPDF_ARGS
  99. run-multithreaded: $(MUPDF_JAVA) $(EXAMPLE_JAVA_OBJECTS) $(MUPDF_JAR)
  100. $(JAVA) -classpath ../../$(OUT)/ -Djava.library.path="../../$(OUT)" example.MultiThreaded $$MUPDF_ARGS
  101. run-multithreadedwithpool: $(MUPDF_JAVA) $(EXAMPLE_JAVA_OBJECTS) $(MUPDF_JAR)
  102. $(JAVA) -classpath ../../$(OUT)/ -Djava.library.path="../../$(OUT)" example.MultiThreadedWithPool $$MUPDF_ARGS
  103. gdb: $(MUPDF_JAVA) $(EXAMPLE_JAVA_OBJECTS) $(MUPDF_JAR)
  104. gdb --args $(JAVA) -classpath ../../$(OUT) -Djava.library.path="../../$(OUT)" example.Viewer $$MUPDF_ARGS
  105. clean:
  106. rm -f $(LIBRARY_JAVA_OBJECTS) $(subst .class,\$$*.class,$(LIBRARY_JAVA_OBJECTS))
  107. rm -f $(EXAMPLE_JAVA_OBJECTS) $(subst .class,\$$*.class,$(EXAMPLE_JAVA_OBJECTS))
  108. rm -f ../../$(OUT)/mupdf_native.o
  109. rm -fr ../../$(OUT)/resources
  110. rm -fr ../../$(OUT)/source
  111. rm -fr ../../$(OUT)/thirdparty
  112. rm -f $(MUPDF_JAR)
  113. rm -f $(MUPDF_JAVA)
  114. rm -f $(MUPDF_CORE)
  115. rm -f ../../$(OUT)/*.h
  116. nuke: clean
  117. $(MAKE) -C ../.. OUT=$(OUT) build=$(build) clean
  118. .NOTPARALLEL : # disable -j option (it breaks since javac compiles all class files in one command)
  119. .PHONY: .FORCE