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