I do not have your OS here.
I don't have your code here.
Hence I tried simulating your sample code at bash.exe/gcc.exe using CYGWIN_NT at windows.
cat CommonMakefile
Code:
all:
@echo inside $@;\
echo call /usr/bin/make ACTION=kernel CompileAtAnyOS;\
/usr/bin/make ACTION=kernel CompileAtAnyOS
CompileAtAnyOS:
@echo inside $@;\
OS=$$(uname -s | sed "s/-[0-9]*\.[0-9]*-[0-9]*//;");\
echo call /usr/bin/make ACTION=$$ACTION $$OS;\
/usr/bin/make ACTION=$$ACTION $$OS
CYGWIN_NT:
@echo inside $@;\
echo calling /usr/bin/make $(ACTION);\
CFLAGS=-O3 \
CC=/usr/bin/g++ \
cc=/usr/bin/gcc \
INCLUDE_DIR=../../security/dir \
/usr/bin/make $(ACTION)
kernel:$(BUILD)
@echo inside $@
cat Makefile
Code:
BUILD = ERP
include CommonMakefile
ERP:
@if [[ ! -f helpers.o ]];\
then\
echo $(cc) -c $(CFLAGS) helpers.c;\
$(cc) -c $(CFLAGS) helpers.c;\
else\
/usr/bin/ls -tr helpers.c \
helpers.o 2>&1 |\
/usr/bin/tail -1 |\
/usr/bin/grep helpers.o >/dev/null 2>&1;\
Ret=$$?;\
if [[ 0 -eq $$Ret ]];\
then\
echo helpers.o is up to date;\
else\
echo $(cc) -c $(CFLAGS) helpers.c -I$(INCLUDE_DIR);\
$(cc) -c $(CFLAGS) helpers.c -I$(INCLUDE_DIR);\
fi;\
fi;\
if [ ! -f ./a.out ];\
then\
echo $(cc) $(CFLAGS) mymain.c helpers.o -I$(INCLUDE_DIR) -o ./a.out;\
$(cc) $(CFLAGS) mymain.c helpers.o -I$(INCLUDE_DIR) -o ./a.out;\
else\
/usr/bin/ls -tr ./a.out helpers.o mymain.c 2>&1 |\
/usr/bin/grep a.out >/dev/null 2>&1;\
Ret=$$?;\
if [[ 0 -eq $$Ret ]];\
then\
echo "./a.out is up to date";\
else\
echo $(cc) $(CFLAGS) mymain.c helpers.o -I$(INCLUDE_DIR) -o ./a.out;\
$(cc) $(CFLAGS) mymain.c helpers.o -I$(INCLUDE_DIR) -o ./a.out;\
fi;\
fi
cat helpers.c
Code:
#include "header.h"
// I am defining macro since I am not sure about actual definition of func1/argType/argName at your code.
#define func1 int arg1
#define argType int arg2
#define argName int arg3
#define BPF_CALL1 void bpf_call1
#define func2(argName) extern void func2(argName)
// I am defining func2 based on same reason
void fun2(int parameter )
{
return;
}
BPF_CALL1(func1,argType,argName)
{
func2(argName);
return;
}
cat mymain.c
Code:
#include <stdio.h>
#include <header.h>
void func2(int arg)
{
printf( "%d\n", arg);
return;
}
int main()
{
func2(12);
}
I created empty header file ..\..\security\dir\header.h
Code:
$ file ../../security/dir/header.h
../../security/dir/header.h: empty
Sample compilation using bash.exe/make.exe at cygwin_nt
Code:
$ /usr/bin/make.exe
inside all
call /usr/bin/make ACTION=kernel CompileAtAnyOS
make[1]: Entering directory '/home/murugesan_openssl'
inside CompileAtAnyOS
call /usr/bin/make ACTION=kernel CYGWIN_NT
make[2]: Entering directory '/home/murugesan_openssl'
inside CYGWIN_NT
calling /usr/bin/make kernel
make[3]: Entering directory '/home/murugesan_openssl'
/usr/bin/gcc -c -O3 helpers.c -I../../security/dir
/usr/bin/gcc -O3 mymain.c helpers.o -I../../security/dir -o ./a.out
inside kernel
make[3]: Leaving directory '/home/murugesan_openssl'
make[2]: Leaving directory '/home/murugesan_openssl'
make[1]: Leaving directory '/home/murugesan_openssl'
$ make
inside all
call /usr/bin/make ACTION=kernel CompileAtAnyOS
make[1]: Entering directory '/home/murugesan_openssl'
inside CompileAtAnyOS
call /usr/bin/make ACTION=kernel CYGWIN_NT
make[2]: Entering directory '/home/murugesan_openssl'
inside CYGWIN_NT
calling /usr/bin/make kernel
make[3]: Entering directory '/home/murugesan_openssl'
helpers.o is up to date
./a.out is up to date
inside kernel
make[3]: Leaving directory '/home/murugesan_openssl'
make[2]: Leaving directory '/home/murugesan_openssl'
make[1]: Leaving directory '/home/murugesan_openssl'
$ /usr/bin/touch.exe helpers.c
$ /usr/bin/make
inside all
call /usr/bin/make ACTION=kernel CompileAtAnyOS
make[1]: Entering directory '/home/murugesan_openssl'
inside CompileAtAnyOS
call /usr/bin/make ACTION=kernel CYGWIN_NT
make[2]: Entering directory '/home/murugesan_openssl'
inside CYGWIN_NT
calling /usr/bin/make kernel
make[3]: Entering directory '/home/murugesan_openssl'
/usr/bin/gcc -c -O3 helpers.c -I../../security/dir
/usr/bin/gcc -O3 mymain.c helpers.o -I../../security/dir -o ./a.out
inside kernel
make[3]: Leaving directory '/home/murugesan_openssl'
make[2]: Leaving directory '/home/murugesan_openssl'
make[1]: Leaving directory '/home/murugesan_openssl'
$ make
inside all
call /usr/bin/make ACTION=kernel CompileAtAnyOS
make[1]: Entering directory '/home/murugesan_openssl'
inside CompileAtAnyOS
call /usr/bin/make ACTION=kernel CYGWIN_NT
make[2]: Entering directory '/home/murugesan_openssl'
inside CYGWIN_NT
calling /usr/bin/make kernel
make[3]: Entering directory '/home/murugesan_openssl'
helpers.o is up to date
./a.out is up to date
inside kernel
make[3]: Leaving directory '/home/murugesan_openssl'
make[2]: Leaving directory '/home/murugesan_openssl'
make[1]: Leaving directory '/home/murugesan_openssl'