xref: /illumos-gate/usr/src/tools/smatch/Makefile (revision 9b9d39d2a32ff806d2431dbcc50968ef1e6d46b2)
11f5207b7SJohn Levon#
21f5207b7SJohn Levon# This file and its contents are supplied under the terms of the
31f5207b7SJohn Levon# Common Development and Distribution License ("CDDL"), version 1.0.
41f5207b7SJohn Levon# You may only use this file in accordance with the terms of version
51f5207b7SJohn Levon# 1.0 of the CDDL.
61f5207b7SJohn Levon#
71f5207b7SJohn Levon# A full copy of the text of the CDDL should have accompanied this
81f5207b7SJohn Levon# source.  A copy of the CDDL is also available via the Internet at
91f5207b7SJohn Levon# http://www.illumos.org/license/CDDL.
101f5207b7SJohn Levon#
115a0e240fSJohn Levon# Copyright 2020 Joyent, Inc.
121f5207b7SJohn Levon#
131f5207b7SJohn Levon
141f5207b7SJohn Levon#
151f5207b7SJohn Levon# The src/ sub-directory is un-modified copy of
16c85f09ccSJohn Levon# https://github.com/illumos/smatch/tree/$SPARSE_VERSION
171f5207b7SJohn Levon#
181f5207b7SJohn Levon# This Makefile installs just enough for us to be able to run smatch
191f5207b7SJohn Levon# locally.
201f5207b7SJohn Levon#
211f5207b7SJohn Levon
221f5207b7SJohn LevonPROG = smatch
236ff4183cSAndy FiddamanSPARSE_VERSION = 0.6.1-rc1-il-7
241f5207b7SJohn Levon
251f5207b7SJohn Levoninclude ../Makefile.tools
261f5207b7SJohn Levon
271f5207b7SJohn Levon# We have to build smatch before we can use cw
28*9b9d39d2SRichard LoweNATIVECC = $(GNUC_ROOT)/bin/gcc
29582237e6SPeter Tribble# sparc doesn't recognise -msave-args
30582237e6SPeter Tribblei386_SMATCHFLAGS = -msave-args
31582237e6SPeter Tribblesparc_SMATCHFLAGS =
321f5207b7SJohn Levon
335801b0f0SToomas Soome# When we use builtins, then ld's -zguidance will complain that libm is
345801b0f0SToomas Soome# unused on x86 because the compiler will replace ceil(3M) with its own copy.
355801b0f0SToomas Soome# However, on SPARC, it doesn't. So for now we disable builtins to make it
365801b0f0SToomas Soome# consistent.
37*9b9d39d2SRichard LoweCFLAGS = -O -m64 -std=gnu99 -nodefaultlibs -D__sun $($(NATIVE_MACH)_SMATCHFLAGS)
385801b0f0SToomas SoomeCFLAGS += -fno-builtin
395a0e240fSJohn LevonCFLAGS += -Wall -Wno-unknown-pragmas -Wno-psabi
401f5207b7SJohn Levon
411f5207b7SJohn LevonSMATCHDATADIR = $(ROOTONBLDSHARE)/smatch
421f5207b7SJohn Levon
431f5207b7SJohn LevonCFLAGS += -DSMATCHDATADIR='"$(SMATCHDATADIR)"'
441f5207b7SJohn LevonCFLAGS += -DGCC_BASE='"/no/such/dir"'
451f5207b7SJohn LevonCFLAGS += -DMULTIARCH_TRIPLET=NULL
461f5207b7SJohn Levon
472cbc828dSAndy FiddamanLDCHECKS = $(ZASSERTDEFLIB) $(ZGUIDANCE) $(ZFATALWARNINGS)
486ff4183cSAndy FiddamanLDLIBS += $(ZLAZYLOAD) $(ZDIRECT) -lsqlite3 -lmd -lgcc -lm -lc
491f5207b7SJohn LevonLDFLAGS = $(MAPFILE.NES:%=-Wl,-M%)
501f5207b7SJohn LevonLDFLAGS += -L$(NATIVE_ADJUNCT)/lib -R$(NATIVE_ADJUNCT)/lib
511f5207b7SJohn Levon
526ff4183cSAndy FiddamanNATIVE_LIBS += libsqlite3.so libmd.so libm.so libc.so
532cbc828dSAndy FiddamanLDFLAGS += $(NATIVE_LIBS:%=$(ZASSERTDEFLIB)=%)
542cbc828dSAndy Fiddaman
551f5207b7SJohn LevonCPPFLAGS += -nostdinc
561f5207b7SJohn LevonCPPFLAGS += -Isrc/
571f5207b7SJohn LevonCPPFLAGS += -I$(NATIVE_ADJUNCT)/include
581f5207b7SJohn Levon
591f5207b7SJohn Levon# no install.bin
601f5207b7SJohn LevonINS.file = $(RM) $@; $(CP) $< $(@D); $(CHMOD) $(FILEMODE) $@
611f5207b7SJohn LevonINS.dir = mkdir -p $@; $(CHMOD) $(DIRMODE) $@
621f5207b7SJohn Levon
63c85f09ccSJohn Levon# fine for us
64c85f09ccSJohn LevonOS=linux
65c85f09ccSJohn Levon
66c85f09ccSJohn LevonLIB_OBJS =
67c85f09ccSJohn LevonLIB_OBJS += allocate.o
68c85f09ccSJohn LevonLIB_OBJS += builtin.o
69c85f09ccSJohn LevonLIB_OBJS += char.o
70c85f09ccSJohn LevonLIB_OBJS += compat-$(OS).o
71c85f09ccSJohn LevonLIB_OBJS += cse.o
72c85f09ccSJohn LevonLIB_OBJS += dissect.o
73c85f09ccSJohn LevonLIB_OBJS += dominate.o
74c85f09ccSJohn LevonLIB_OBJS += evaluate.o
75c85f09ccSJohn LevonLIB_OBJS += expand.o
76c85f09ccSJohn LevonLIB_OBJS += expression.o
77c85f09ccSJohn LevonLIB_OBJS += flow.o
78c85f09ccSJohn LevonLIB_OBJS += flowgraph.o
79c85f09ccSJohn LevonLIB_OBJS += inline.o
80c85f09ccSJohn LevonLIB_OBJS += ir.o
81c85f09ccSJohn LevonLIB_OBJS += lib.o
82c85f09ccSJohn LevonLIB_OBJS += linearize.o
83c85f09ccSJohn LevonLIB_OBJS += liveness.o
84c85f09ccSJohn LevonLIB_OBJS += memops.o
85c85f09ccSJohn LevonLIB_OBJS += opcode.o
86c85f09ccSJohn LevonLIB_OBJS += optimize.o
87c85f09ccSJohn LevonLIB_OBJS += parse.o
88c85f09ccSJohn LevonLIB_OBJS += pre-process.o
89c85f09ccSJohn LevonLIB_OBJS += ptrlist.o
90c85f09ccSJohn LevonLIB_OBJS += ptrmap.o
91c85f09ccSJohn LevonLIB_OBJS += scope.o
92c85f09ccSJohn LevonLIB_OBJS += show-parse.o
93c85f09ccSJohn LevonLIB_OBJS += simplify.o
94c85f09ccSJohn LevonLIB_OBJS += sort.o
95c85f09ccSJohn LevonLIB_OBJS += ssa.o
96c85f09ccSJohn LevonLIB_OBJS += sset.o
97c85f09ccSJohn LevonLIB_OBJS += stats.o
98c85f09ccSJohn LevonLIB_OBJS += storage.o
99c85f09ccSJohn LevonLIB_OBJS += symbol.o
100c85f09ccSJohn LevonLIB_OBJS += target.o
101c85f09ccSJohn LevonLIB_OBJS += tokenize.o
102c85f09ccSJohn LevonLIB_OBJS += unssa.o
103c85f09ccSJohn LevonLIB_OBJS += utils.o
104c85f09ccSJohn LevonLIB_OBJS += macro_table.o
105c85f09ccSJohn LevonLIB_OBJS += token_store.o
106c85f09ccSJohn LevonLIB_OBJS += hashtable.o
107c85f09ccSJohn Levon
108c85f09ccSJohn LevonSMATCH_OBJS =
109c85f09ccSJohn LevonSMATCH_OBJS += avl.o
110c85f09ccSJohn LevonSMATCH_OBJS += smatch_about_fn_ptr_arg.o
111c85f09ccSJohn LevonSMATCH_OBJS += smatch_address.o
112c85f09ccSJohn LevonSMATCH_OBJS += smatch_annotate.o
113c85f09ccSJohn LevonSMATCH_OBJS += smatch_array_values.o
114c85f09ccSJohn LevonSMATCH_OBJS += smatch_assigned_expr.o
115c85f09ccSJohn LevonSMATCH_OBJS += smatch_bits.o
116c85f09ccSJohn LevonSMATCH_OBJS += smatch_buf_comparison.o
117c85f09ccSJohn LevonSMATCH_OBJS += smatch_buf_size.o
118c85f09ccSJohn LevonSMATCH_OBJS += smatch_capped.o
119c85f09ccSJohn LevonSMATCH_OBJS += smatch_common_functions.o
120c85f09ccSJohn LevonSMATCH_OBJS += smatch_comparison.o
121c85f09ccSJohn LevonSMATCH_OBJS += smatch_conditions.o
122c85f09ccSJohn LevonSMATCH_OBJS += smatch_constraints.o
123c85f09ccSJohn LevonSMATCH_OBJS += smatch_constraints_required.o
124c85f09ccSJohn LevonSMATCH_OBJS += smatch_container_of.o
125c85f09ccSJohn LevonSMATCH_OBJS += smatch_data_source.o
126c85f09ccSJohn LevonSMATCH_OBJS += smatch_db.o
127c85f09ccSJohn LevonSMATCH_OBJS += smatch_equiv.o
128c85f09ccSJohn LevonSMATCH_OBJS += smatch_estate.o
129c85f09ccSJohn LevonSMATCH_OBJS += smatch_expressions.o
130c85f09ccSJohn LevonSMATCH_OBJS += smatch_expression_stacks.o
131c85f09ccSJohn LevonSMATCH_OBJS += smatch_extra.o
132c85f09ccSJohn LevonSMATCH_OBJS += smatch_files.o
133c85f09ccSJohn LevonSMATCH_OBJS += smatch_flow.o
13431ad075eSJohn LevonSMATCH_OBJS += smatch_fresh_alloc.o
135c85f09ccSJohn LevonSMATCH_OBJS += smatch_fn_arg_link.o
136c85f09ccSJohn LevonSMATCH_OBJS += smatch_function_hooks.o
137c85f09ccSJohn LevonSMATCH_OBJS += smatch_function_info.o
138c85f09ccSJohn LevonSMATCH_OBJS += smatch_function_ptrs.o
139c85f09ccSJohn LevonSMATCH_OBJS += smatch_helper.o
140c85f09ccSJohn LevonSMATCH_OBJS += smatch_hooks.o
141c85f09ccSJohn LevonSMATCH_OBJS += smatch_ignore.o
142c85f09ccSJohn LevonSMATCH_OBJS += smatch_imaginary_absolute.o
143c85f09ccSJohn LevonSMATCH_OBJS += smatch_implied.o
144c85f09ccSJohn LevonSMATCH_OBJS += smatch_impossible.o
145c85f09ccSJohn LevonSMATCH_OBJS += smatch_integer_overflow.o
146c85f09ccSJohn LevonSMATCH_OBJS += smatch_kernel_user_data.o
147c85f09ccSJohn LevonSMATCH_OBJS += smatch_links.o
148c85f09ccSJohn LevonSMATCH_OBJS += smatch_math.o
149c85f09ccSJohn LevonSMATCH_OBJS += smatch_mem_tracker.o
150c85f09ccSJohn LevonSMATCH_OBJS += smatch_modification_hooks.o
151c85f09ccSJohn LevonSMATCH_OBJS += smatch_mtag_data.o
152c85f09ccSJohn LevonSMATCH_OBJS += smatch_mtag_map.o
153c85f09ccSJohn LevonSMATCH_OBJS += smatch_mtag.o
154c85f09ccSJohn LevonSMATCH_OBJS += smatch_nul_terminator.o
155c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_cleared.o
156c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_compare_limit.o
157c85f09ccSJohn LevonSMATCH_OBJS += smatch_parameter_names.o
158c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_filter.o
159c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_limit.o
160c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_set.o
161c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_to_mtag_data.o
162c85f09ccSJohn LevonSMATCH_OBJS += smatch_param_used.o
163c85f09ccSJohn LevonSMATCH_OBJS += smatch_parse_call_math.o
164c85f09ccSJohn LevonSMATCH_OBJS += smatch_passes_array_size.o
165c85f09ccSJohn LevonSMATCH_OBJS += smatch_project.o
166c85f09ccSJohn LevonSMATCH_OBJS += smatch_ranges.o
167c85f09ccSJohn LevonSMATCH_OBJS += smatch_real_absolute.o
168c85f09ccSJohn LevonSMATCH_OBJS += smatch_recurse.o
169c85f09ccSJohn LevonSMATCH_OBJS += smatch_returns.o
170c85f09ccSJohn LevonSMATCH_OBJS += smatch_return_to_param.o
171c85f09ccSJohn LevonSMATCH_OBJS += smatch_scope.o
172c85f09ccSJohn LevonSMATCH_OBJS += smatch_slist.o
173c85f09ccSJohn LevonSMATCH_OBJS += smatch_start_states.o
174c85f09ccSJohn LevonSMATCH_OBJS += smatch_statement_count.o
175c85f09ccSJohn LevonSMATCH_OBJS += smatch_states.o
176c85f09ccSJohn LevonSMATCH_OBJS += smatch_stored_conditions.o
177c85f09ccSJohn LevonSMATCH_OBJS += smatch_string_list.o
178c85f09ccSJohn LevonSMATCH_OBJS += smatch_strings.o
179c85f09ccSJohn LevonSMATCH_OBJS += smatch_strlen.o
180c85f09ccSJohn LevonSMATCH_OBJS += smatch_struct_assignment.o
181c85f09ccSJohn LevonSMATCH_OBJS += smatch_sval.o
182c85f09ccSJohn LevonSMATCH_OBJS += smatch_tracker.o
183c85f09ccSJohn LevonSMATCH_OBJS += smatch_type_links.o
184c85f09ccSJohn LevonSMATCH_OBJS += smatch_type.o
185c85f09ccSJohn LevonSMATCH_OBJS += smatch_type_val.o
186c85f09ccSJohn LevonSMATCH_OBJS += smatch_unknown_value.o
187c85f09ccSJohn LevonSMATCH_OBJS += smatch_untracked_param.o
188c85f09ccSJohn LevonSMATCH_OBJS += smatch_var_sym.o
1895a0e240fSJohn LevonSMATCH_OBJS += smatch_parsed_conditions.o
190c85f09ccSJohn Levon
1911f5207b7SJohn LevonSMATCH_CHECK_OBJS:sh=ls src/check_*.c | sed -e 's+\.c+.o+;s+src/++;'
1921f5207b7SJohn Levon
193c85f09ccSJohn LevonOBJS = smatch.o $(LIB_OBJS) $(SMATCH_OBJS) $(SMATCH_CHECK_OBJS)
1941f5207b7SJohn Levon
1951f5207b7SJohn LevonSMATCH_DATA = \
1961f5207b7SJohn Levon	illumos_kernel.skipped_functions \
1971f5207b7SJohn Levon	illumos_user.skipped_functions
1981f5207b7SJohn Levon
199c85f09ccSJohn LevonSMATCH_DB_DATA =
200c85f09ccSJohn LevonSMATCH_DB_DATA += call_implies.schema
201c85f09ccSJohn LevonSMATCH_DB_DATA += function_ptr.schema
202c85f09ccSJohn LevonSMATCH_DB_DATA += mtag_map.schema
203c85f09ccSJohn LevonSMATCH_DB_DATA += caller_info.schema
204c85f09ccSJohn LevonSMATCH_DB_DATA += function_type.schema
205c85f09ccSJohn LevonSMATCH_DB_DATA += param_map.schema
206c85f09ccSJohn LevonSMATCH_DB_DATA += common_caller_info.schema
207c85f09ccSJohn LevonSMATCH_DB_DATA += function_type_info.schema
208c85f09ccSJohn LevonSMATCH_DB_DATA += parameter_name.schema
209c85f09ccSJohn LevonSMATCH_DB_DATA += constraints.schema
210c85f09ccSJohn LevonSMATCH_DB_DATA += function_type_size.schema
211c85f09ccSJohn LevonSMATCH_DB_DATA += return_implies.schema
212c85f09ccSJohn LevonSMATCH_DB_DATA += constraints_required.schema
213c85f09ccSJohn LevonSMATCH_DB_DATA += function_type_value.schema
214c85f09ccSJohn LevonSMATCH_DB_DATA += return_states.schema
215c85f09ccSJohn LevonSMATCH_DB_DATA += data_info.schema
216c85f09ccSJohn LevonSMATCH_DB_DATA += local_values.schema
217c85f09ccSJohn LevonSMATCH_DB_DATA += sink_info.schema
218c85f09ccSJohn LevonSMATCH_DB_DATA += db.schema
219c85f09ccSJohn LevonSMATCH_DB_DATA += mtag_about.schema
220c85f09ccSJohn LevonSMATCH_DB_DATA += type_info.schema
221c85f09ccSJohn LevonSMATCH_DB_DATA += fn_data_link.schema
222c85f09ccSJohn LevonSMATCH_DB_DATA += mtag_alias.schema
223c85f09ccSJohn LevonSMATCH_DB_DATA += type_size.schema
224c85f09ccSJohn LevonSMATCH_DB_DATA += fn_ptr_data_link.schema
225c85f09ccSJohn LevonSMATCH_DB_DATA += mtag_data.schema
2266523a3aaSJohn LevonSMATCH_DB_DATA += mtag_info.schema
227c85f09ccSJohn LevonSMATCH_DB_DATA += type_value.schema
2281f5207b7SJohn Levon
2291f5207b7SJohn LevonROOTONBLDDATAFILES = $(SMATCH_DATA:%=$(SMATCHDATADIR)/smatch_data/%)
2301f5207b7SJohn LevonROOTONBLDDATAFILES += $(SMATCH_DB_DATA:%=$(SMATCHDATADIR)/smatch_data/db/%)
2311f5207b7SJohn Levon
2321f5207b7SJohn LevonBUILT_HEADERS = src/version.h src/check_list_local.h
2331f5207b7SJohn Levon
2341f5207b7SJohn Levon.KEEP_STATE:
2351f5207b7SJohn Levon
236c653bb47SJohn Levon.PARALLEL: $(OBJS)
237c653bb47SJohn Levon
2381f5207b7SJohn Levonall: $(PROG)
2391f5207b7SJohn Levon
2401f5207b7SJohn Levoninstall: all .WAIT $(ROOTONBLDMACHPROG) $(ROOTONBLDDATAFILES)
2411f5207b7SJohn Levon
2421f5207b7SJohn Levonclean:
2431f5207b7SJohn Levon	rm -f $(OBJS) $(BUILT_HEADERS)
2441f5207b7SJohn Levon
2451f5207b7SJohn Levon$(ROOTONBLDDATAFILES): $(SMATCHDATADIR)/smatch_data/db
2461f5207b7SJohn Levon
2471f5207b7SJohn Levon$(SMATCHDATADIR)/smatch_data/%: src/smatch_data/%
2481f5207b7SJohn Levon	$(INS.file)
2491f5207b7SJohn Levon
2501f5207b7SJohn Levon$(SMATCHDATADIR)/smatch_data/db:
2511f5207b7SJohn Levon	$(INS.dir)
2521f5207b7SJohn Levon
2531f5207b7SJohn Levon$(SMATCHDATADIR)/smatch_data:
2541f5207b7SJohn Levon	$(INS.dir)
2551f5207b7SJohn Levon
2561f5207b7SJohn Levon$(PROG): $(OBJS)
2571f5207b7SJohn Levon	$(LINK.c) $(OBJS) -o $@ $(LDLIBS)
2581f5207b7SJohn Levon	$(POST_PROCESS)
2591f5207b7SJohn Levon
2601f5207b7SJohn Levon%.o: src/%.c $(BUILT_HEADERS)
2611f5207b7SJohn Levon	$(COMPILE.c) -o $@ $<
2621f5207b7SJohn Levon
2631f5207b7SJohn Levon%.o: src/cwchash/%.c
2641f5207b7SJohn Levon	$(COMPILE.c) -o $@ $<
2651f5207b7SJohn Levon
2661f5207b7SJohn Levonsrc/check_list_local.h:
2671f5207b7SJohn Levon	touch src/check_list_local.h
2681f5207b7SJohn Levon
2691f5207b7SJohn Levonsrc/version.h:
2701f5207b7SJohn Levon	echo '#define SPARSE_VERSION "$(SPARSE_VERSION)"' > src/version.h
2711f5207b7SJohn Levon
2721f5207b7SJohn Levoninclude ../Makefile.targ
273