]> pd.if.org Git - pdclib/blobdiff - Jamrules
Different text for static_assert()s
[pdclib] / Jamrules
index 8657cc9ca0fb0dc16899c7030b36f80fa2997b8b..5e739353b9546a286bbcf061ec090772e8bd8a4b 100644 (file)
--- a/Jamrules
+++ b/Jamrules
-PDCLIB ?= pdclib ;\r
-\r
-ECHO "PDCLIB_TOP: " $(PDCLIB_TOP) ;\r
-\r
-if ! $(PDCLIB_HAVE_PLATFORM) && ! $(PDCLIB_PLATFORM) {\r
-    if $(NT) {\r
-        PDCLIB_PLATFORM = "win32" ;\r
-    } else if $(UNIX) {\r
-        PDCLIB_PLATFORM = "posix" ;\r
-    } else {\r
-        ECHO "PDCLIB_PLATFORM not set and platform not automatically detected" ;\r
-        ECHO "Set PDCLIB_PLATFORM to the platform to be built for" ;\r
-        EXIT ;\r
-    }\r
-    PDCLIB_HAVE_PLATFORM = 1 ;\r
-}\r
-\r
-#if $(CC) = "gcc" {\r
-# TODO: Better toolchain handling\r
-\r
-    # No -Wcast-align      : spurious warnings when using char* to do pointer \r
-    #                        arithmetic\r
-    # No -Winline          : when compiling with e.g. -Os causes spurious \r
-    #                        warnings that call is unlikely/code size would grow\r
-    # No -Wredundant-decls : some functions must be multiply defined\r
-    PDCLIB_WARNINGS ?= \r
-      -Wall -Wextra -pedantic -Wno-unused-parameter -Wshadow \r
-      -Wpointer-arith -Wwrite-strings -Wmissing-declarations -Wno-long-long \r
-      -Wuninitialized \r
-      ;\r
-    PDCLIB_CCWARNINGS ?= \r
-      -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes ;\r
-    PDCLIB_CCFLAGS  = \r
-      -ffreestanding \r
-      -nostdinc \r
-      -std=c11 \r
-      -g \r
-      -D_PDCLIB_BUILD\r
-      $(PDCLIB_WARNINGS) ;\r
-    PDCLIB_C++FLAGS =\r
-      -ffreestanding\r
-      -nostdinc\r
-      -std=c++11\r
-      -g\r
-      -D_PDCLIB_BUILD\r
-      $(PDCLIB_WARNINGS) ;\r
-\r
-    actions Link bind NEEDLIBS\r
-    {\r
-        $(LINK) $(LINKFLAGS) -o $(<) $(UNDEFS) $(>) -Wl,--start-group $(NEEDLIBS) $(LINKLIBS) -Wl,--end-group\r
-    }\r
-#}\r
-\r
-if $(PDCLIB_PLATFORM) {\r
-    include [ FDirName $(PDCLIB_TOP) platform $(PDCLIB_PLATFORM) Config.jam ] ;\r
-}\r
-\r
-rule PDCLibHeaders {\r
-    SubDirHdrs $(PDCLIB_TOP) includes ;\r
-    SubDirHdrs $(PDCLIB_TOP) internals ;\r
-    SubDirHdrs $(PDCLIB_TOP) testing ;\r
-    for opt in $(PDCLIB_OPTIONS) {\r
-        SubDirHdrs $(PDCLIB_TOP) opt $(opt) ;\r
-    }\r
-    PDCLibTargetHeaders ;\r
-}\r
-\r
-rule PDCLibConfig {\r
-    SubDirCcFlags $(PDCLIB_CCFLAGS) ;\r
-    SubDirC++Flags $(PDCLIB_C++FLAGS) ;\r
-    PDCLibHeaders ;\r
-    PDCLibTargetConfig ;\r
-}\r
-\r
-# MinGW needs appropriate prodding to cretae executables\r
-if $(TOOLSET) = MINGW {\r
-    PDCLIB_TEST_LINKFLAGS    += -mconsole ;\r
-    PDCLIB_REGTEST_LINKFLAGS += -mconsole ;\r
-}\r
-\r
-# Tests\r
-ALWAYS regtest test ;\r
-\r
-rule Test {\r
-    DEPENDS $(<) : $(>) ;\r
-    ALWAYS $(<) ;\r
-    DEPENDS test : $(<) ;\r
-}\r
-\r
-rule RegTest {\r
-    DEPENDS $(<) : $(>) ;\r
-    ALWAYS $(<) ;\r
-    DEPENDS regtest : $(<) ;\r
-}\r
-\r
-actions Test {\r
-    $(>)\r
-}\r
-\r
-actions RegTest {\r
-    $(>)\r
-}\r
-\r
-# list all files in a directory, except ., ..\r
-# [ ListDir base : dirname ]\r
-rule ListDir {\r
-  # start with empty list\r
-  local _result =  ;\r
-\r
-  # for each file in the directory\r
-  local _dirlist = [ GLOB [ FDirName $(1) $(2) ] : * ] ;\r
-  for _subdir in $(_dirlist) {\r
-\r
-    # if it is not . or ..\r
-    switch $(_subdir) {\r
-    case *\\. :  _dummy = "" ; # is there some no-op statement?\r
-    case *\\.. : _dummy = "" ; # is there some no-op statement?\r
-    case * :\r
-      # add it to the list\r
-      _result += $(_subdir:D=$(2)) ;\r
-    }\r
-  }\r
-\r
-  # return resulting list\r
-  return $(_result) ;\r
-}\r
-\r
-# same as glob, but recurses into subdirs\r
-rule RecursiveGlob {\r
-  # initially use the files in the current directory\r
-  local _dir  = $(2) ;\r
-  local _path = [ FDirName $(1) $(2) ] ;\r
-  local _result = [ GLOB $(_path) : $(3) ] ;\r
-  _result = $(_result:D=$(_dir)) ;\r
-\r
-  # list all subdirectories (and files, but it doesn't hurt)\r
-  local _subdirlist = [ ListDir $(1) : $(2) ] ;\r
-\r
-  # for each subdir/file\r
-  for _subdir in $(_subdirlist) {\r
-    # recurse into it\r
-    _result += [ RecursiveGlob $(1) : $(_subdir) : $(3) ] ;\r
-  }\r
-\r
-  # return the resulting list\r
-  return $(_result) ;\r
-}\r
-\r
-# Fix to work on targets in subdirs\r
-rule MakeLocate\r
-{\r
-    # Note we grist the directory name with 'dir',\r
-    # so that directory path components and other\r
-    # targets don't conflict.\r
-\r
-    if $(>)\r
-    {\r
-        local _rev = [ FReverse $(>) ] ;\r
-        if $(_rev[1]) = "." {\r
-          _rev = $(_rev[2-]) ;\r
-        } \r
-        local _dir = [ FDirName [ FReverse $(_rev) ] $(<[0]:D) ] ;\r
-\r
-        LOCATE on $(<) = [ FDirName $(>) ] ;\r
-        Depends $(<) : $(_dir:G=dir) ;\r
-        MkDir $(_dir:G=dir) ;\r
-    }\r
-}
\ No newline at end of file
+PDCLIB ?= pdclib ;
+
+ECHO "PDCLIB_TOP: " $(PDCLIB_TOP) ;
+
+if ! $(PDCLIB_HAVE_PLATFORM) && ! $(PDCLIB_PLATFORM) {
+    if $(NT) {
+        PDCLIB_PLATFORM = "win32" ;
+    } else if $(UNIX) {
+        PDCLIB_PLATFORM = "posix" ;
+    } else {
+        ECHO PDCLIB_PLATFORM not set and platform not automatically detected ;
+        ECHO Set PDCLIB_PLATFORM to the platform to be built for ;
+        EXIT ;
+    }
+    PDCLIB_HAVE_PLATFORM = 1 ;
+}
+
+if $(PDCLIB_TOOLCHAIN) = "" {
+  local __ccparts = [ SPLIT $(CC) : "-" ] ;
+  if $(JAM_TOOLSET) = "MINGW" || "gcc" in $(__ccparts) 
+      || "clang" in $(__ccparts) {
+    # GCC / GCC-alike
+    PDCLIB_TOOLCHAIN = "gcc" ;
+  } else if $(JAM_TOOLSET) != "" {
+    PDCLIB_TOOLCHAIN = $(JAM_TOOLSET) ;
+  } else {
+    ECHO PDCLIB_TOOLCHAIN is unset and I can't glean what toolset is being ;
+    ECHO used from your environment. Please set it.  ;
+    EXIT ;
+  }
+}
+
+if $(PDCLIB_TOOLCHAIN) = "gcc" {
+    PDCLIB_WARNINGS ?= 
+      -Wall -Wextra -pedantic -Wno-unused-parameter -Wshadow 
+      -Wpointer-arith -Wwrite-strings -Wmissing-declarations -Wno-long-long 
+      -Wuninitialized -Wno-deprecated-declarations -Wredundant-decls -Winline
+      -Wcast-align -Wno-format
+      ;
+    PDCLIB_CCWARNINGS ?= 
+      -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes ;
+    PDCLIB_CCFLAGS  = 
+      -ffreestanding 
+      #-nostdinc 
+      -std=c11 
+      -g 
+      -ffunction-sections
+      -fdata-sections
+      -D_PDCLIB_BUILD
+      $(PDCLIB_WARNINGS) ;
+    PDCLIB_C++FLAGS =
+      -ffreestanding
+      #-nostdinc
+      -std=c++11
+      -g
+      -ffunction-sections
+      -fdata-sections
+      -D_PDCLIB_BUILD
+      $(PDCLIB_WARNINGS) ;
+
+    if $(OS) = "MACOSX" {
+        # ld64 does automatic repeated searches of archives
+        # and doesn't accept --start-group/--end-group
+
+        #actions Link bind NEEDLIBS
+        #{
+        #    $(LINK) $(LINKFLAGS) -o $(<) $(UNDEFS) $(>) $(NEEDLIBS) $(LINKLIBS)
+        #}
+    } else {
+        PDCLIB_TEST_LINKFLAGS += -Wl,--gc-sections ;
+        actions Link bind NEEDLIBS
+        {
+            $(LINK) $(LINKFLAGS) -o $(<) $(UNDEFS) $(>) -Wl,--start-group $(NEEDLIBS) $(LINKLIBS) -Wl,--end-group
+        }
+    }
+} else if $(PDCLIB_TOOLCHAIN) = "WATCOM" {
+  ECHO "Watcom!" ;
+  CCFLAGS  = /zq /DWIN32 /zls ;
+  C++FLAGS = /zq /DWIN32 /zls ;
+  STDHDRS  = $(WATCOM)\\h\\nt ;
+  PDCLIB_CCFLAGS = "-za99 -zl -s" ;
+} else {
+  ECHO The value of PDCLIB_TOOLCHAIN is not recognized  ;
+  ECHO Currently set to $(PDCLIB_TOOLCHAIN)  ;
+  EXIT ;
+}
+
+if $(PDCLIB_PLATFORM) {
+    include [ FDirName $(PDCLIB_TOP) platform $(PDCLIB_PLATFORM) Config.jam ] ;
+}
+
+rule PDCLibHeaders {
+    SubDirHdrs $(PDCLIB_TOP) includes ;
+    SubDirHdrs $(PDCLIB_TOP) internals ;
+    SubDirHdrs $(PDCLIB_TOP) testing ;
+    for opt in $(PDCLIB_OPTIONS) {
+        SubDirHdrs $(PDCLIB_TOP) opt $(opt) ;
+    }
+    PDCLibTargetHeaders ;
+}
+
+rule PDCLibConfig {
+    SubDirCcFlags $(PDCLIB_CCFLAGS) ;
+    SubDirC++Flags $(PDCLIB_C++FLAGS) ;
+    PDCLibHeaders ;
+    PDCLibTargetConfig ;
+}
+
+# MinGW needs appropriate prodding to cretae executables
+if $(TOOLSET) = MINGW {
+    PDCLIB_TEST_LINKFLAGS    += -mconsole ;
+    PDCLIB_REGTEST_LINKFLAGS += -mconsole ;
+}
+
+# Tests
+ALWAYS regtest test ;
+
+rule Test {
+    DEPENDS $(<) : $(>) ;
+    ALWAYS $(<) ;
+    DEPENDS test : $(<) ;
+}
+
+rule RegTest {
+    DEPENDS $(<) : $(>) ;
+    ALWAYS $(<) ;
+    DEPENDS regtest : $(<) ;
+}
+
+actions Test {
+    $(>)
+}
+
+actions RegTest {
+    $(>)
+}
+
+# list all files in a directory, except ., ..
+# [ ListDir base : dirname ]
+rule ListDir {
+  # start with empty list
+  local _result =  ;
+
+  # for each file in the directory
+  local _dirlist = [ GLOB [ FDirName $(1) $(2) ] : * ] ;
+  for _subdir in $(_dirlist) {
+
+    # if it is not . or ..
+    switch $(_subdir) {
+    case *\\. :  _dummy = "" ; # is there some no-op statement?
+    case *\\.. : _dummy = "" ; # is there some no-op statement?
+    case * :
+      # add it to the list
+      _result += $(_subdir:D=$(2)) ;
+    }
+  }
+
+  # return resulting list
+  return $(_result) ;
+}
+
+# same as glob, but recurses into subdirs
+rule RecursiveGlob {
+  # initially use the files in the current directory
+  local _dir  = $(2) ;
+  local _path = [ FDirName $(1) $(2) ] ;
+  local _result = [ GLOB $(_path) : $(3) ] ;
+  _result = $(_result:D=$(_dir)) ;
+
+  # list all subdirectories (and files, but it doesn't hurt)
+  local _subdirlist = [ ListDir $(1) : $(2) ] ;
+
+  # for each subdir/file
+  for _subdir in $(_subdirlist) {
+    # recurse into it
+    _result += [ RecursiveGlob $(1) : $(_subdir) : $(3) ] ;
+  }
+
+  # return the resulting list
+  return $(_result) ;
+}
+
+# Fix to work on targets in subdirs
+rule MakeLocate
+{
+    # Note we grist the directory name with 'dir',
+    # so that directory path components and other
+    # targets don't conflict.
+
+    if $(>)
+    {
+        local _rev = [ FReverse $(>) ] ;
+        if $(_rev[1]) = "." {
+          _rev = $(_rev[2-]) ;
+        } 
+        local _dir = [ FDirName [ FReverse $(_rev) ] $(<[0]:D) ] ;
+
+        LOCATE on $(<) = [ FDirName $(>) ] ;
+        Depends $(<) : $(_dir:G=dir) ;
+        MkDir $(_dir:G=dir) ;
+    }
+}