Skip to content

Commit

Permalink
Merge pull request linux-can#426 from passgat/no-mmu
Browse files Browse the repository at this point in the history
Add support for Linux/no-mmu with vfork
  • Loading branch information
marckleinebudde authored May 9, 2023
2 parents e44db73 + 5ed3b4d commit 4cfc12e
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 9 deletions.
15 changes: 12 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.3)

project(can-utils LANGUAGES C)

include (CheckFunctionExists)
include (CheckSymbolExists)
include (GNUInstallDirs)

Expand All @@ -25,12 +26,13 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSCM_TXTIME=SO_TXTIME")
include_directories (.)
include_directories (./include)

check_function_exists(fork HAVE_FORK)

set(PROGRAMS_CANLIB
asc2log
canbusload
candump
cangen
canlogserver
canplayer
cansend
cansequence
Expand All @@ -39,6 +41,10 @@ set(PROGRAMS_CANLIB
slcanpty
)

if(HAVE_FORK)
list(APPEND PROGRAMS_CANLIB canlogserver)
endif()

set(PROGRAMS_J1939
j1939acd
j1939cat
Expand All @@ -49,21 +55,24 @@ set(PROGRAMS_J1939

set(PROGRAMS
${PROGRAMS_CANLIB}
bcmserver
canfdtest
cangw
cansniffer
isotpdump
isotpperf
isotprecv
isotpsend
isotpserver
isotpsniffer
isotptun
slcan_attach
slcand
)

if(HAVE_FORK)
list(APPEND PROGRAMS bcmserver)
list(APPEND PROGRAMS isotpserver)
endif()

add_executable(can-calc-bit-timing
calc-bit-timing/can-calc-bit-timing.c
)
Expand Down
10 changes: 7 additions & 3 deletions GNUmakefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -75,14 +75,12 @@ EXTRA_DIST += \

bin_PROGRAMS = \
asc2log \
bcmserver \
can-calc-bit-timing \
canbusload \
candump \
canfdtest \
cangen \
cangw \
canlogserver \
canplayer \
cansend \
cansequence \
Expand All @@ -91,7 +89,6 @@ bin_PROGRAMS = \
isotpperf \
isotprecv \
isotpsend \
isotpserver \
isotpsniffer \
isotptun \
j1939acd \
Expand All @@ -106,6 +103,13 @@ bin_PROGRAMS = \
slcanpty \
testj1939

if HAVE_FORK
bin_PROGRAMS += \
bcmserver \
canlogserver \
isotpserver
endif

j1939acd_LDADD = libj1939.la
j1939cat_LDADD = libj1939.la
j1939spy_LDADD = libj1939.la
Expand Down
16 changes: 13 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ MAKEFLAGS := -k

CFLAGS := -O2 -Wall -Wno-parentheses

HAVE_FORK := $(shell ./check_cc.sh "$(CC)" fork_test.c)

CPPFLAGS += \
-I. \
-Iinclude \
Expand All @@ -66,10 +68,14 @@ PROGRAMS_ISOTP := \
isotpperf \
isotprecv \
isotpsend \
isotpserver \
isotpsniffer \
isotptun

ifeq ($(HAVE_FORK),1)
PROGRAMS_ISOTP += \
isotpserver
endif

PROGRAMS_J1939 := \
j1939acd \
j1939cat \
Expand All @@ -87,14 +93,12 @@ PROGRAMS := \
$(PROGRAMS_J1939) \
$(PROGRAMS_SLCAN) \
asc2log \
bcmserver \
can-calc-bit-timing \
canbusload \
candump \
canfdtest \
cangen \
cansequence \
canlogserver \
canplayer \
cansend \
cansniffer \
Expand All @@ -103,6 +107,12 @@ PROGRAMS := \
mcp251xfd-dump \
slcanpty

ifeq ($(HAVE_FORK),1)
PROGRAMS += \
canlogserver \
bcmserver
endif

all: $(PROGRAMS)

clean:
Expand Down
16 changes: 16 additions & 0 deletions check_cc.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-only
# check_cc.sh - Helper to test userspace compilation support
# Copyright (c) 2015 Andrew Lutomirski

CC="$1"
TESTPROG="$2"
shift 2

if [ -n "$CC" ] && $CC -o /dev/null "$TESTPROG" -O0 "$@"; then
echo 1
else
echo 0
fi

exit 0
2 changes: 2 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ AC_CHECK_FUNCS([ \
strtoul \
])

AM_CONDITIONAL(HAVE_FORK, test "$ac_cv_func_fork_works" = "yes")

# glibc versions before 2.17 needs to link with -lrt for clock_nanosleep
AC_SEARCH_LIBS([clock_nanosleep], [rt])

Expand Down
27 changes: 27 additions & 0 deletions fork_test.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (C) 2023 Dario Binacchi <[email protected]>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the version 2 of the GNU General Public License
* as published by the Free Software Foundation
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char **argv)
{
fork();

return 0;
}

0 comments on commit 4cfc12e

Please sign in to comment.