diff --git a/Dockerfile b/Dockerfile index bf1d1ee..1879b98 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM emscripten/emsdk:2.0.26 -RUN apt-get update && apt-get install -qqy autoconf autopoint libtool-bin pkg-config +RUN apt-get update && apt-get install -qqy autoconf autopoint pkg-config WORKDIR /src ENV EM_CACHE /src/deps/.emcache CMD ["sh", "-c", "emmake make -j`nproc`"] diff --git a/Makefile b/Makefile index 2dd379e..cd62fb7 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,25 @@ SYSROOT = $(PWD)/deps/.install -export PKG_CONFIG_PATH = $(SYSROOT)/lib/pkgconfig +# Add custom sysroot to paths. export CPPFLAGS += -I$(SYSROOT)/include -export LDFLAGS += -L$(SYSROOT)/lib -s DYNAMIC_EXECUTION=0 -s AUTO_JS_LIBRARIES=0 -s AUTO_NATIVE_LIBRARIES=0 -s ALLOW_UNIMPLEMENTED_SYSCALLS=0 +export LDFLAGS += -L$(SYSROOT)/lib +export PATH := $(SYSROOT)/bin:$(PATH) +export PKG_CONFIG_PATH = $(SYSROOT)/lib/pkgconfig +export ACLOCAL_PATH := $(SYSROOT)/share/aclocal:$(ACLOCAL_PATH) +# Common linking flags for all targets. +export LDFLAGS += -s DYNAMIC_EXECUTION=0 -s AUTO_JS_LIBRARIES=0 -s AUTO_NATIVE_LIBRARIES=0 -s ALLOW_UNIMPLEMENTED_SYSCALLS=0 + +# Common compilation & linking flags for all langs and targets. COMMON_FLAGS = -Os -flto export CFLAGS += $(COMMON_FLAGS) export CXXFLAGS += $(COMMON_FLAGS) export LDFLAGS += $(COMMON_FLAGS) +## Main API module + libapi.mjs: api.o $(SYSROOT)/lib/libltdl.la $(SYSROOT)/lib/libgphoto2.la - deps/libgphoto2/libtool --verbose --mode=link $(LD) $(LDFLAGS) -o $@ $+ \ + libtool --verbose --mode=link $(LD) $(LDFLAGS) -o $@ $+ \ --bind -s ASYNCIFY -s ALLOW_MEMORY_GROWTH \ -dlpreopen $(SYSROOT)/lib/libgphoto2/2.5.27.1/ptp2.la \ -dlpreopen $(SYSROOT)/lib/libgphoto2_port/0.12.0/usb1.la @@ -19,32 +28,46 @@ api.o: deps/libgphoto2/configure.ac api.o: CPPFLAGS += -Ideps/libgphoto2 -Ideps/libgphoto2/libgphoto2_port api.o: CXXFLAGS += -std=c++17 -fexceptions -$(SYSROOT)/.exists: +## Generic rules for deps + +$(SYSROOT): mkdir -p $(@D) - touch $@ + +## libtool deps/libtool/configure: mkdir -p deps/libtool curl -L https://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz | tar zx --strip 1 -C deps/libtool +deps/libtool/Makefile: deps/libtool/configure + cd $(@D) && ./configure --prefix=$(SYSROOT) --disable-shared + +$(SYSROOT)/lib/libltdl.la: deps/libtool/Makefile | $(SYSROOT) + $(MAKE) -C deps/libtool install + +## libgphoto2 + deps/libgphoto2/configure.ac deps/libusb/configure.ac &: git submodule update --init -$(SYSROOT)/lib/libltdl.la: $(SYSROOT)/.exists deps/libtool/configure - cd deps/libtool && \ - ./configure --prefix=$(SYSROOT) --disable-shared && \ - $(MAKE) install +deps/libgphoto2/configure: deps/libusb/configure.ac | $(SYSROOT)/lib/libltdl.la + cd $(@D) && autoreconf -fiv -$(SYSROOT)/lib/libusb-1.0.la: $(SYSROOT)/.exists deps/libusb/configure.ac - cd deps/libusb && \ - autoreconf -fiv && \ - ./configure --prefix=$(SYSROOT) --disable-shared --host=wasm32 && \ - $(MAKE) install - -$(SYSROOT)/lib/libgphoto2.la: deps/libgphoto2/configure.ac $(SYSROOT)/lib/libltdl.la $(SYSROOT)/lib/libusb-1.0.la - cd deps/libgphoto2 && \ - autoreconf -fiv && \ +deps/libgphoto2/Makefile: deps/libgphoto2/configure | $(SYSROOT)/lib/libusb-1.0.la ./configure --prefix=$(SYSROOT) --disable-shared --host=wasm32 \ --without-libxml-2.0 --disable-nls --disable-ptpip --disable-disk \ - --with-camlibs=ptp2 && \ - $(MAKE) install + --with-camlibs=ptp2 + +$(SYSROOT)/lib/libgphoto2.la: deps/libgphoto2/Makefile $(SYSROOT)/lib/libusb-1.0.la $(SYSROOT)/lib/libltdl.la + $(MAKE) -C deps/libgphoto2 install + +## libusb + +deps/libusb/configure: deps/libusb/configure.ac | $(SYSROOT)/lib/libltdl.la + cd $(@D) && autoreconf -fiv + +deps/libusb/Makefile: deps/libusb/configure + cd $(@D) && ./configure --prefix=$(SYSROOT) --disable-shared --host=wasm32 + +$(SYSROOT)/lib/libusb-1.0.la: deps/libusb/Makefile + $(MAKE) -C deps/libusb install diff --git a/build.sh b/build.sh index a3b05f1..277773a 100755 --- a/build.sh +++ b/build.sh @@ -3,4 +3,5 @@ docker build -t web-gphoto2 - < Dockerfile docker run --rm -it \ -v $PWD:/src \ -u $(id -u):$(id -g) \ - web-gphoto2 + web-gphoto2 \ + $@