@@ -9,8 +9,6 @@ extension_sources = $(wildcard ext/**/*.c)
99extension_headers = $(wildcard ext/** /* .h)
1010extension_objects = $(extension_sources:.o )
1111
12- prism_objects = $(filter-out src/main.c, $(sources ) )
13-
1412project_files = $(sources ) $(headers )
1513extension_files = $(extension_sources ) $(extension_headers )
1614nodejs_extension_files = $(wildcard node/** /* .cpp) $(wildcard node/** /* .h) $(wildcard node/** /* .hpp)
@@ -30,37 +28,27 @@ $(shell mkdir -p $(build_dir))
3028
3129os := $(shell uname -s)
3230
33- prism_path = $( shell bundle show prism)
34- prism_include = $(prism_path ) /include
35- prism_build = $(prism_path ) /build
31+ prism_vendor_path = vendor/ prism
32+ prism_include = $(prism_vendor_path ) /include
33+ prism_src = $(prism_vendor_path ) /src
3634
37- prism_flags = -I$(prism_include )
38- prism_ldflags = $(prism_build ) /libprism.a
35+ prism_sources = $(wildcard $(prism_src ) /* .c) $(wildcard $(prism_src ) /util/* .c)
36+ prism_objects = $(prism_sources:.c=.o )
37+ prism_static_lib = $(build_dir ) /libprism.a
3938
40- # Enable strict warnings
41- warning_flags = -Wall -Wextra -Werror -pedantic
39+ prism_flags = -I$(prism_include ) -I$(prism_src )
4240
43- # Debug build (no optimizations, debug symbols)
41+ warning_flags = -Wall -Wextra -Werror -pedantic
4442debug_flags = -g -O0 -Wno-unused-parameter
45-
46- # Production build (optimized)
4743production_flags = $(warning_flags ) -O3 -march=native -flto
48-
49- # Shared library flags (only for `.so`/`.dylib`/`.bundle`)
5044shared_library_flags = -fPIC
51-
52- # Default build mode (change this as needed)
5345flags = $(warning_flags ) $(debug_flags ) $(prism_flags ) -std=c99
54-
55- # Separate test compilation flags
5646test_flags = $(debug_flags ) $(prism_flags ) -std=gnu99
57-
58- # Shared library build (if needed)
5947shared_flags = $(production_flags ) $(shared_library_flags ) $(prism_flags )
6048
6149ifeq ($(os ) ,Linux)
6250 test_cflags = $(test_flags ) -I/usr/include/check
63- test_ldflags = -L/usr/lib/x86_64-linux-gnu -lcheck -lm -lsubunit $( prism_ldflags )
51+ test_ldflags = -L/usr/lib/x86_64-linux-gnu -lcheck -lm -lsubunit
6452 cc = clang-21
6553 clang_format = clang-format-21
6654 clang_tidy = clang-tidy-21
6957ifeq ($(os ) ,Darwin)
7058 brew_prefix := $(shell brew --prefix check)
7159 test_cflags = $(test_flags ) -I$(brew_prefix ) /include
72- test_ldflags = -L$(brew_prefix ) /lib -lcheck -lm $( prism_ldflags )
60+ test_ldflags = -L$(brew_prefix ) /lib -lcheck -lm
7361 llvm_path = $(shell brew --prefix llvm@21)
7462 cc = $(llvm_path ) /bin/clang
7563 clang_format = $(llvm_path ) /bin/clang-format
@@ -78,30 +66,42 @@ endif
7866
7967all : templates prism $(exec ) $(lib_name ) $(static_lib_name ) test wasm clangd_config
8068
81- $(exec ) : $(objects )
82- $(cc ) $(objects ) $(flags ) $(ldflags ) $(prism_ldflags ) -o $(exec )
69+ $(exec ) : $(objects ) $( prism_objects )
70+ $(cc ) $(objects ) $(prism_objects ) $(flags ) $(ldflags ) -o $(exec )
8371
84- $(lib_name ) : $(objects )
85- $(cc ) -shared $(objects ) $(shared_flags ) $(ldflags ) $(prism_ldflags ) -o $(lib_name )
86- # cp $(lib_name) $(ruby_extension)
72+ $(lib_name ) : $(objects ) $(prism_objects )
73+ $(cc ) -shared $(objects ) $(prism_objects ) $(shared_flags ) $(ldflags ) -o $(lib_name )
8774
8875$(static_lib_name ) : $(objects )
8976 ar rcs $(static_lib_name ) $(objects )
9077
78+ $(prism_static_lib ) : $(prism_objects )
79+ ar rcs $(prism_static_lib ) $(prism_objects )
80+
81+ prism_lib : prism $(prism_static_lib )
82+
83+ herb_lib : templates prism $(non_main_objects )
84+ @echo " Herb objects built: $( non_main_objects) "
85+
9186src/% .o : src/% .c templates
9287 $(cc ) -c $(flags ) -fPIC $< -o $@
9388
89+ $(prism_src ) /% .o : $(prism_src ) /% .c prism
90+ $(cc ) -c $(flags ) -fPIC $(prism_flags ) $< -o $@
91+
92+ $(prism_src ) /util/% .o : $(prism_src ) /util/% .c prism
93+ $(cc ) -c $(flags ) -fPIC $(prism_flags ) $< -o $@
94+
9495test/% .o : test/% .c templates
9596 $(cc ) -c $(test_cflags ) $(test_flags ) $(prism_flags ) $< -o $@
9697
97- test : $(test_objects ) $(non_main_objects )
98- $(cc ) $(test_objects ) $(non_main_objects ) $(test_cflags ) $(test_ldflags ) -o $(test_exec )
98+ test : $(test_objects ) $(non_main_objects ) $( prism_objects )
99+ $(cc ) $(test_objects ) $(non_main_objects ) $(prism_objects ) $( test_cflags ) $(test_ldflags ) -o $(test_exec )
99100
100101clean :
101- rm -f $(exec ) $(test_exec ) $(lib_name ) $(shared_lib_name ) $(ruby_extension )
102- rm -rf $(objects ) $(test_objects ) $(extension_objects ) lib/herb/* .bundle tmp
103- rm -rf $(prism_path )
104- rake prism:clean
102+ rm -f $(exec ) $(test_exec ) $(lib_name ) $(shared_lib_name ) $(prism_static_lib ) $(ruby_extension )
103+ rm -rf $(objects ) $(test_objects ) $(prism_objects ) $(extension_objects ) lib/herb/* .bundle tmp
104+ bundle exec rake prism:clean
105105
106106bundle_install :
107107 bundle install
@@ -110,8 +110,7 @@ templates: bundle_install
110110 bundle exec rake templates
111111
112112prism : bundle_install
113- cd $(prism_path ) && ruby templates/template.rb && make static && cd -
114- rake prism:vendor
113+ bundle exec rake prism:vendor
115114
116115format :
117116 $(clang_format ) -i $(project_and_extension_files )
0 commit comments