txiki.js Makefile FFI support removed

생성일 비교 결과 만료 없음
8 삭제
183
2 추가
177
BUILD_DIR=build
BUILD_DIR=build
BUILDTYPE?=Release
BUILDTYPE?=Release


JOBS?=$(shell getconf _NPROCESSORS_ONLN)
JOBS?=$(shell getconf _NPROCESSORS_ONLN)
ifeq ($(JOBS),)
ifeq ($(JOBS),)
JOBS := $(shell sysctl -n hw.ncpu)
JOBS := $(shell sysctl -n hw.ncpu)
endif
endif
ifeq ($(JOBS),)
ifeq ($(JOBS),)
JOBS := $(shell nproc)
JOBS := $(shell nproc)
endif
endif
ifeq ($(JOBS),)
ifeq ($(JOBS),)
JOBS := 4
JOBS := 4
endif
endif


TJS=$(BUILD_DIR)/tjs
TJS=$(BUILD_DIR)/tjs
QJSC=$(BUILD_DIR)/tjsc
QJSC=$(BUILD_DIR)/tjsc
STDLIB_MODULES=$(wildcard src/js/stdlib/*.js)
STDLIB_MODULES=$(wildcard src/js/stdlib/*.js)
ESBUILD?=npx esbuild
ESBUILD?=npx esbuild
ESBUILD_PARAMS_COMMON=--target=es2023 --platform=neutral --format=esm --main-fields=main,module
ESBUILD_PARAMS_COMMON=--target=es2023 --platform=neutral --format=esm --main-fields=main,module
ESBUILD_PARAMS_MINIFY=--minify --keep-names
ESBUILD_PARAMS_MINIFY=--minify --keep-names
QJSC_PARAMS_STIP=-s
QJSC_PARAMS_STIP=-s
JS_NO_STRIP?=0
JS_NO_STRIP?=0
BUILD_MACOS_MULTIARCH?=0
BUILD_MACOS_MULTIARCH?=0
EXTRA_CMAKE_PARAMS=
EXTRA_CMAKE_PARAMS=


ifeq ($(JS_NO_STRIP),1)
ifeq ($(JS_NO_STRIP),1)
ESBUILD_PARAMS_MINIFY=
ESBUILD_PARAMS_MINIFY=
QJSC_PARAMS_STIP=
QJSC_PARAMS_STIP=
endif
endif


ifeq ($(BUILD_MACOS_MULTIARCH),1)
ifeq ($(BUILD_MACOS_MULTIARCH),1)
EXTRA_CMAKE_PARAMS=-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
EXTRA_CMAKE_PARAMS=-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
endif
endif


all: $(TJS)
all: $(TJS)


$(BUILD_DIR):
$(BUILD_DIR):
cmake -B $(BUILD_DIR) -DCMAKE_BUILD_TYPE=$(BUILDTYPE) $(EXTRA_CMAKE_PARAMS)
cmake -B $(BUILD_DIR) -DCMAKE_BUILD_TYPE=$(BUILDTYPE) $(EXTRA_CMAKE_PARAMS)


$(TJS): $(BUILD_DIR)
$(TJS): $(BUILD_DIR)
cmake --build $(BUILD_DIR) -j $(JOBS)
cmake --build $(BUILD_DIR) -j $(JOBS)


$(QJSC): $(BUILD_DIR)
$(QJSC): $(BUILD_DIR)
cmake --build $(BUILD_DIR) --target tjsc -j $(JOBS)
cmake --build $(BUILD_DIR) --target tjsc -j $(JOBS)


src/bundles/js/core/polyfills.js: src/js/polyfills/*.js
src/bundles/js/core/polyfills.js: src/js/polyfills/*.js
$(ESBUILD) src/js/polyfills/index.js \
$(ESBUILD) src/js/polyfills/index.js \
--bundle \
--bundle \
--metafile=$@.json \
--metafile=$@.json \
--outfile=$@ \
--outfile=$@ \
$(ESBUILD_PARAMS_MINIFY) \
$(ESBUILD_PARAMS_MINIFY) \
$(ESBUILD_PARAMS_COMMON)
$(ESBUILD_PARAMS_COMMON)


src/bundles/c/core/polyfills.c: $(QJSC) src/bundles/js/core/polyfills.js
src/bundles/c/core/polyfills.c: $(QJSC) src/bundles/js/core/polyfills.js
@mkdir -p $(basename $(dir $@))
@mkdir -p $(basename $(dir $@))
$(QJSC) -m \
$(QJSC) -m \
$(QJSC_PARAMS_STIP) \
$(QJSC_PARAMS_STIP) \
-o $@ \
-o $@ \
-n "polyfills.js" \
-n "polyfills.js" \
-p tjs__ \
-p tjs__ \
src/bundles/js/core/polyfills.js
src/bundles/js/core/polyfills.js


src/bundles/js/core/core.js: src/js/core/*.js
src/bundles/js/core/core.js: src/js/core/*.js
$(ESBUILD) src/js/core/index.js \
$(ESBUILD) src/js/core/index.js \
--bundle \
--bundle \
--metafile=$@.json \
--metafile=$@.json \
--outfile=$@ \
--outfile=$@ \
$(ESBUILD_PARAMS_MINIFY) \
$(ESBUILD_PARAMS_MINIFY) \
$(ESBUILD_PARAMS_COMMON)
$(ESBUILD_PARAMS_COMMON)


src/bundles/c/core/core.c: $(QJSC) src/bundles/js/core/core.js
src/bundles/c/core/core.c: $(QJSC) src/bundles/js/core/core.js
@mkdir -p $(basename $(dir $@))
@mkdir -p $(basename $(dir $@))
$(QJSC) -m \
$(QJSC) -m \
$(QJSC_PARAMS_STIP) \
$(QJSC_PARAMS_STIP) \
-o $@ \
-o $@ \
-n "core.js" \
-n "core.js" \
-p tjs__ \
-p tjs__ \
src/bundles/js/core/core.js
src/bundles/js/core/core.js


src/bundles/js/core/run-main.js: src/js/run-main/*.js
src/bundles/js/core/run-main.js: src/js/run-main/*.js
$(ESBUILD) src/js/run-main/index.js \
$(ESBUILD) src/js/run-main/index.js \
--bundle \
--bundle \
--metafile=$@.json \
--metafile=$@.json \
--outfile=$@ \
--outfile=$@ \
--external:tjs:* \
--external:tjs:* \
$(ESBUILD_PARAMS_MINIFY) \
$(ESBUILD_PARAMS_MINIFY) \
$(ESBUILD_PARAMS_COMMON)
$(ESBUILD_PARAMS_COMMON)


src/bundles/c/core/run-main.c: $(QJSC) src/bundles/js/core/run-main.js
src/bundles/c/core/run-main.c: $(QJSC) src/bundles/js/core/run-main.js
@mkdir -p $(basename $(dir $@))
@mkdir -p $(basename $(dir $@))
$(QJSC) -m \
$(QJSC) -m \
$(QJSC_PARAMS_STIP) \
$(QJSC_PARAMS_STIP) \
-o $@ \
-o $@ \
-n "run-main.js" \
-n "run-main.js" \
-p tjs__ \
-p tjs__ \
src/bundles/js/core/run-main.js
src/bundles/js/core/run-main.js


src/bundles/js/core/run-repl.js: src/js/run-repl/*.js
src/bundles/js/core/run-repl.js: src/js/run-repl/*.js
$(ESBUILD) src/js/run-repl/index.js \
$(ESBUILD) src/js/run-repl/index.js \
--bundle \
--bundle \
--metafile=$@.json \
--metafile=$@.json \
--outfile=$@ \
--outfile=$@ \
--external:tjs:* \
--external:tjs:* \
--log-override:direct-eval=silent \
--log-override:direct-eval=silent \
$(ESBUILD_PARAMS_MINIFY) \
$(ESBUILD_PARAMS_MINIFY) \
$(ESBUILD_PARAMS_COMMON)
$(ESBUILD_PARAMS_COMMON)


src/bundles/c/core/run-repl.c: $(QJSC) src/bundles/js/core/run-repl.js
src/bundles/c/core/run-repl.c: $(QJSC) src/bundles/js/core/run-repl.js
@mkdir -p $(basename $(dir $@))
@mkdir -p $(basename $(dir $@))
$(QJSC) -m \
$(QJSC) -m \
$(QJSC_PARAMS_STIP) \
$(QJSC_PARAMS_STIP) \
-o $@ \
-o $@ \
-n "run-repl.js" \
-n "run-repl.js" \
-p tjs__ \
-p tjs__ \
src/bundles/js/core/run-repl.js
src/bundles/js/core/run-repl.js


src/bundles/c/core/worker-bootstrap.c: $(QJSC) src/js/worker/worker-bootstrap.js
src/bundles/c/core/worker-bootstrap.c: $(QJSC) src/js/worker/worker-bootstrap.js
@mkdir -p $(basename $(dir $@))
@mkdir -p $(basename $(dir $@))
$(QJSC) \
$(QJSC) \
$(QJSC_PARAMS_STIP) \
$(QJSC_PARAMS_STIP) \
-o $@ \
-o $@ \
-n "worker-bootstrap.js" \
-n "worker-bootstrap.js" \
-p tjs__ \
-p tjs__ \
src/js/worker/worker-bootstrap.js
src/js/worker/worker-bootstrap.js


core: src/bundles/c/core/polyfills.c src/bundles/c/core/core.c src/bundles/c/core/run-main.c src/bundles/c/core/run-repl.c src/bundles/c/core/worker-bootstrap.c
core: src/bundles/c/core/polyfills.c src/bundles/c/core/core.c src/bundles/c/core/run-main.c src/bundles/c/core/run-repl.c src/bundles/c/core/worker-bootstrap.c


src/bundles/c/stdlib/%.c: $(QJSC) src/bundles/js/stdlib/%.js
src/bundles/c/stdlib/%.c: $(QJSC) src/bundles/js/stdlib/%.js
@mkdir -p $(basename $(dir $@))
@mkdir -p $(basename $(dir $@))
$(QJSC) -m \
$(QJSC) -m \
$(QJSC_PARAMS_STIP) \
$(QJSC_PARAMS_STIP) \
-o $@ \
-o $@ \
-n "tjs:$(basename $(notdir $@))" \
-n "tjs:$(basename $(notdir $@))" \
-p tjs__ \
-p tjs__ \
src/bundles/js/stdlib/$(basename $(notdir $@)).js
src/bundles/js/stdlib/$(basename $(notdir $@)).js


src/bundles/js/stdlib/%.js: src/js/stdlib/*.js src/js/stdlib/ffi/*.js

$(ESBUILD) src/js/stdlib/$(notdir $@) \
--bundle \
--outfile=$@ \
--external:buffer \
--external:crypto \
$(ESBUILD_PARAMS_MINIFY) \
$(ESBUILD_PARAMS_COMMON)


src/bundles/c/stdlib/%.c: $(QJSC) src/bundles/js/stdlib/%.js
src/bundles/c/stdlib/%.c: $(QJSC) src/bundles/js/stdlib/%.js
@mkdir -p $(basename $(dir $@))
@mkdir -p $(basename $(dir $@))
$(QJSC) -m \
$(QJSC) -m \
$(QJSC_PARAMS_STIP) \
$(QJSC_PARAMS_STIP) \
-o $@ \
-o $@ \
-n "tjs:$(basename $(notdir $@))" \
-n "tjs:$(basename $(notdir $@))" \
-p tjs__ \
-p tjs__ \
src/bundles/js/stdlib/$(basename $(notdir $@)).js
src/bundles/js/stdlib/$(basename $(notdir $@)).js


stdlib: $(addprefix src/bundles/c/stdlib/, $(patsubst %.js, %.c, $(notdir $(STDLIB_MODULES))))
stdlib: $(addprefix src/bundles/c/stdlib/, $(patsubst %.js, %.c, $(notdir $(STDLIB_MODULES))))


js: core stdlib
js: core stdlib


install: $(TJS)
install: $(TJS)
cmake --build $(BUILD_DIR) --target install
cmake --build $(BUILD_DIR) --target install


clean: $(BUILD_DIR)
clean: $(BUILD_DIR)
cmake --build $(BUILD_DIR) --target clean
cmake --build $(BUILD_DIR) --target clean


debug:
debug:
BUILDTYPE=Debug $(MAKE)
BUILDTYPE=Debug $(MAKE)


distclean:
distclean:
@rm -rf $(BUILD_DIR)
@rm -rf $(BUILD_DIR)
@rm -rf src/bundles/js/
@rm -rf src/bundles/js/


format:
format:
clang-format -i src/*.{c,h}
clang-format -i src/*.{c,h}


test:
test:
./$(BUILD_DIR)/tjs test tests/
./$(BUILD_DIR)/tjs test tests/


test-advanced:
test-advanced:
cd tests/advanced && npm install
cd tests/advanced && npm install
./$(BUILD_DIR)/tjs --stack-size 10485760 test tests/advanced/
./$(BUILD_DIR)/tjs --stack-size 10485760 test tests/advanced/


.PRECIOUS: src/bundles/js/core/%.js src/bundles/js/stdlib/%.js
.PRECIOUS: src/bundles/js/core/%.js src/bundles/js/stdlib/%.js
.PHONY: all js debug install clean distclean format test test-advanced core stdlib $(TJS)
.PHONY: all js debug install clean distclean format test test-advanced core stdlib $(TJS)