xref: /illumos-gate/usr/src/tools/smatch/Makefile (revision 1f5207b7)
1*1f5207b7SJohn Levon#
2*1f5207b7SJohn Levon# This file and its contents are supplied under the terms of the
3*1f5207b7SJohn Levon# Common Development and Distribution License ("CDDL"), version 1.0.
4*1f5207b7SJohn Levon# You may only use this file in accordance with the terms of version
5*1f5207b7SJohn Levon# 1.0 of the CDDL.
6*1f5207b7SJohn Levon#
7*1f5207b7SJohn Levon# A full copy of the text of the CDDL should have accompanied this
8*1f5207b7SJohn Levon# source.  A copy of the CDDL is also available via the Internet at
9*1f5207b7SJohn Levon# http://www.illumos.org/license/CDDL.
10*1f5207b7SJohn Levon#
11*1f5207b7SJohn Levon# Copyright (c) 2019, Joyent, Inc.
12*1f5207b7SJohn Levon#
13*1f5207b7SJohn Levon
14*1f5207b7SJohn Levon#
15*1f5207b7SJohn Levon# The src/ sub-directory is un-modified copy of
16*1f5207b7SJohn Levon# https://github.com/illumos/smatch/tree/0.5.1-il-1
17*1f5207b7SJohn Levon#
18*1f5207b7SJohn Levon# This Makefile installs just enough for us to be able to run smatch
19*1f5207b7SJohn Levon# locally.
20*1f5207b7SJohn Levon#
21*1f5207b7SJohn Levon
22*1f5207b7SJohn LevonPROG = smatch
23*1f5207b7SJohn LevonSPARSE_VERSION = 0.5.1-il-1
24*1f5207b7SJohn Levon
25*1f5207b7SJohn Levoninclude ../Makefile.tools
26*1f5207b7SJohn Levon
27*1f5207b7SJohn Levon# We have to build smatch before we can use cw
28*1f5207b7SJohn Levoni386_CC = $(GNUC_ROOT)/bin/gcc
29*1f5207b7SJohn Levonsparc_CC = $(GNUC_ROOT)/bin/gcc
30*1f5207b7SJohn Levon
31*1f5207b7SJohn LevonCFLAGS = -O -D__sun -Wall -Wno-unknown-pragmas -std=gnu99 -nodefaultlibs
32*1f5207b7SJohn Levon
33*1f5207b7SJohn LevonSMATCHDATADIR = $(ROOTONBLDSHARE)/smatch
34*1f5207b7SJohn Levon
35*1f5207b7SJohn LevonCFLAGS += -DSMATCHDATADIR='"$(SMATCHDATADIR)"'
36*1f5207b7SJohn LevonCFLAGS += -DGCC_BASE='"/no/such/dir"'
37*1f5207b7SJohn LevonCFLAGS += -DMULTIARCH_TRIPLET=NULL
38*1f5207b7SJohn Levon
39*1f5207b7SJohn LevonLDLIBS += -lsqlite3 -lcrypto -lm -lgcc -lc
40*1f5207b7SJohn LevonLDFLAGS = $(MAPFILE.NES:%=-Wl,-M%)
41*1f5207b7SJohn LevonLDFLAGS += -L$(NATIVE_ADJUNCT)/lib -R$(NATIVE_ADJUNCT)/lib
42*1f5207b7SJohn Levon
43*1f5207b7SJohn LevonCPPFLAGS += -nostdinc
44*1f5207b7SJohn LevonCPPFLAGS += -Isrc/
45*1f5207b7SJohn LevonCPPFLAGS += -I$(NATIVE_ADJUNCT)/include
46*1f5207b7SJohn Levon
47*1f5207b7SJohn Levon# no install.bin
48*1f5207b7SJohn LevonINS.file = $(RM) $@; $(CP) $< $(@D); $(CHMOD) $(FILEMODE) $@
49*1f5207b7SJohn LevonINS.dir = mkdir -p $@; $(CHMOD) $(DIRMODE) $@
50*1f5207b7SJohn Levon
51*1f5207b7SJohn LevonSMATCH_CHECK_OBJS:sh=ls src/check_*.c | sed -e 's+\.c+.o+;s+src/++;'
52*1f5207b7SJohn Levon
53*1f5207b7SJohn LevonOBJS = smatch.o $(SMATCH_CHECK_OBJS)
54*1f5207b7SJohn Levon
55*1f5207b7SJohn LevonOBJS += smatch_flow.o smatch_conditions.o smatch_slist.o smatch_states.o \
56*1f5207b7SJohn Levon	smatch_helper.o smatch_type.o smatch_hooks.o smatch_function_hooks.o \
57*1f5207b7SJohn Levon	smatch_modification_hooks.o smatch_extra.o smatch_estate.o smatch_math.o \
58*1f5207b7SJohn Levon	smatch_sval.o smatch_ranges.o smatch_implied.o smatch_ignore.o smatch_project.o \
59*1f5207b7SJohn Levon	smatch_var_sym.o smatch_tracker.o smatch_files.o smatch_expression_stacks.o \
60*1f5207b7SJohn Levon	smatch_equiv.o smatch_buf_size.o smatch_strlen.o smatch_capped.o smatch_db.o \
61*1f5207b7SJohn Levon	smatch_expressions.o smatch_returns.o smatch_parse_call_math.o \
62*1f5207b7SJohn Levon	smatch_param_limit.o smatch_param_filter.o \
63*1f5207b7SJohn Levon	smatch_param_set.o smatch_comparison.o smatch_param_compare_limit.o smatch_local_values.o \
64*1f5207b7SJohn Levon	smatch_function_ptrs.o smatch_annotate.o smatch_string_list.o \
65*1f5207b7SJohn Levon	smatch_param_cleared.o smatch_start_states.o \
66*1f5207b7SJohn Levon	smatch_recurse.o smatch_data_source.o smatch_type_val.o \
67*1f5207b7SJohn Levon	smatch_common_functions.o smatch_struct_assignment.o \
68*1f5207b7SJohn Levon	smatch_unknown_value.o smatch_stored_conditions.o avl.o \
69*1f5207b7SJohn Levon	smatch_function_info.o smatch_links.o smatch_auto_copy.o \
70*1f5207b7SJohn Levon	smatch_type_links.o smatch_untracked_param.o smatch_impossible.o \
71*1f5207b7SJohn Levon	smatch_strings.o smatch_param_used.o smatch_container_of.o smatch_address.o \
72*1f5207b7SJohn Levon	smatch_buf_comparison.o smatch_real_absolute.o smatch_scope.o \
73*1f5207b7SJohn Levon	smatch_imaginary_absolute.o smatch_parameter_names.o \
74*1f5207b7SJohn Levon	smatch_return_to_param.o smatch_passes_array_size.o \
75*1f5207b7SJohn Levon	smatch_constraints.o smatch_constraints_required.o \
76*1f5207b7SJohn Levon	smatch_fn_arg_link.o smatch_about_fn_ptr_arg.o smatch_mtag.o \
77*1f5207b7SJohn Levon	smatch_mtag_map.o smatch_mtag_data.o \
78*1f5207b7SJohn Levon	smatch_param_to_mtag_data.o smatch_mem_tracker.o smatch_array_values.o \
79*1f5207b7SJohn Levon	smatch_nul_terminator.o smatch_assigned_expr.o smatch_kernel_user_data.o \
80*1f5207b7SJohn Levon	smatch_statement_count.o
81*1f5207b7SJohn Levon
82*1f5207b7SJohn LevonOBJS += target.o parse.o tokenize.o pre-process.o symbol.o lib.o scope.o \
83*1f5207b7SJohn Levon	expression.o show-parse.o evaluate.o expand.o inline.o linearize.o \
84*1f5207b7SJohn Levon	char.o sort.o allocate.o compat-linux.o ptrlist.o \
85*1f5207b7SJohn Levon	builtin.o \
86*1f5207b7SJohn Levon	stats.o \
87*1f5207b7SJohn Levon	flow.o cse.o simplify.o memops.o liveness.o storage.o unssa.o \
88*1f5207b7SJohn Levon	dissect.o \
89*1f5207b7SJohn Levon	macro_table.o token_store.o hashtable.o
90*1f5207b7SJohn Levon
91*1f5207b7SJohn LevonSMATCH_DATA = \
92*1f5207b7SJohn Levon	illumos_kernel.no_return_funcs \
93*1f5207b7SJohn Levon	illumos_kernel.skipped_functions \
94*1f5207b7SJohn Levon	illumos_user.no_return_funcs \
95*1f5207b7SJohn Levon	illumos_user.skipped_functions
96*1f5207b7SJohn Levon
97*1f5207b7SJohn LevonSMATCH_DB_DATA = \
98*1f5207b7SJohn Levon	return_states.schema \
99*1f5207b7SJohn Levon	call_implies.schema \
100*1f5207b7SJohn Levon	type_value.schema \
101*1f5207b7SJohn Levon	param_map.schema \
102*1f5207b7SJohn Levon	function_type_size.schema \
103*1f5207b7SJohn Levon	parameter_name.schema \
104*1f5207b7SJohn Levon	fn_ptr_data_link.schema \
105*1f5207b7SJohn Levon	constraints.schema \
106*1f5207b7SJohn Levon	mtag_about.schema \
107*1f5207b7SJohn Levon	type_info.schema \
108*1f5207b7SJohn Levon	function_type_info.schema \
109*1f5207b7SJohn Levon	caller_info.schema \
110*1f5207b7SJohn Levon	function_type_value.schema \
111*1f5207b7SJohn Levon	return_implies.schema \
112*1f5207b7SJohn Levon	type_size.schema \
113*1f5207b7SJohn Levon	constraints_required.schema \
114*1f5207b7SJohn Levon	fn_data_link.schema \
115*1f5207b7SJohn Levon	mtag_alias.schema \
116*1f5207b7SJohn Levon	common_caller_info.schema \
117*1f5207b7SJohn Levon	data_info.schema \
118*1f5207b7SJohn Levon	function_type.schema \
119*1f5207b7SJohn Levon	db.schema \
120*1f5207b7SJohn Levon	mtag_data.schema \
121*1f5207b7SJohn Levon	function_ptr.schema \
122*1f5207b7SJohn Levon	sink_info.schema \
123*1f5207b7SJohn Levon	local_values.schema \
124*1f5207b7SJohn Levon	mtag_map.schema
125*1f5207b7SJohn Levon
126*1f5207b7SJohn LevonROOTONBLDDATAFILES = $(SMATCH_DATA:%=$(SMATCHDATADIR)/smatch_data/%)
127*1f5207b7SJohn LevonROOTONBLDDATAFILES += $(SMATCH_DB_DATA:%=$(SMATCHDATADIR)/smatch_data/db/%)
128*1f5207b7SJohn Levon
129*1f5207b7SJohn LevonBUILT_HEADERS = src/version.h src/check_list_local.h
130*1f5207b7SJohn Levon
131*1f5207b7SJohn Levon.KEEP_STATE:
132*1f5207b7SJohn Levon
133*1f5207b7SJohn Levonall: $(PROG)
134*1f5207b7SJohn Levon
135*1f5207b7SJohn Levoninstall: all .WAIT $(ROOTONBLDMACHPROG) $(ROOTONBLDDATAFILES)
136*1f5207b7SJohn Levon
137*1f5207b7SJohn Levonclean:
138*1f5207b7SJohn Levon	rm -f $(OBJS) $(BUILT_HEADERS)
139*1f5207b7SJohn Levon
140*1f5207b7SJohn Levon$(ROOTONBLDDATAFILES): $(SMATCHDATADIR)/smatch_data/db
141*1f5207b7SJohn Levon
142*1f5207b7SJohn Levon$(SMATCHDATADIR)/smatch_data/%: src/smatch_data/%
143*1f5207b7SJohn Levon	$(INS.file)
144*1f5207b7SJohn Levon
145*1f5207b7SJohn Levon$(SMATCHDATADIR)/smatch_data/db:
146*1f5207b7SJohn Levon	$(INS.dir)
147*1f5207b7SJohn Levon
148*1f5207b7SJohn Levon$(SMATCHDATADIR)/smatch_data:
149*1f5207b7SJohn Levon	$(INS.dir)
150*1f5207b7SJohn Levon
151*1f5207b7SJohn Levon$(PROG): $(OBJS)
152*1f5207b7SJohn Levon	$(LINK.c) $(OBJS) -o $@ $(LDLIBS)
153*1f5207b7SJohn Levon	$(POST_PROCESS)
154*1f5207b7SJohn Levon
155*1f5207b7SJohn Levon%.o: src/%.c $(BUILT_HEADERS)
156*1f5207b7SJohn Levon	$(COMPILE.c) -o $@ $<
157*1f5207b7SJohn Levon
158*1f5207b7SJohn Levon%.o: src/cwchash/%.c
159*1f5207b7SJohn Levon	$(COMPILE.c) -o $@ $<
160*1f5207b7SJohn Levon
161*1f5207b7SJohn Levonsrc/check_list_local.h:
162*1f5207b7SJohn Levon	touch src/check_list_local.h
163*1f5207b7SJohn Levon
164*1f5207b7SJohn Levonsrc/version.h:
165*1f5207b7SJohn Levon	echo '#define SPARSE_VERSION "$(SPARSE_VERSION)"' > src/version.h
166*1f5207b7SJohn Levon
167*1f5207b7SJohn Levoninclude ../Makefile.targ
168